From c53aa1bf5d2d23e6c9e44d86a8ea4e50e1d79875 Mon Sep 17 00:00:00 2001 From: Vitalis Salis Date: Mon, 5 Aug 2024 10:07:39 +0300 Subject: [PATCH] Deploy website - based on c8692f2c187d7baa204968898b7f56027c6f8209 --- 404.html | 8 ++++---- assets/files/cantina-phase1-competition.pdf | Bin 0 -> 728231 bytes ...c430e6.ab7eb0b4.js => 03c430e6.9068d98c.js} | 2 +- ...61071f.0e3e1244.js => 7661071f.fb4b9aa4.js} | 2 +- assets/js/7e396926.5ac17178.js | 1 + ...a9f017.bb69d677.js => 9ca9f017.62f136ee.js} | 2 +- ...42ab4f.09996b77.js => 9f42ab4f.dcdbf2e3.js} | 2 +- assets/js/a27c0e41.df505de0.js | 1 - ...93a134.7fe9fda4.js => a3709191.07f06032.js} | 2 +- assets/js/a7d7e9b8.6777adb0.js | 1 + ...209be1.d9040e56.js => b7209be1.3c6e85ee.js} | 2 +- assets/js/bd9adad9.9c3b810a.js | 1 - ...3be1c7.798f08d9.js => cc038963.f9d86d59.js} | 2 +- ...f32620.ccc0eb9f.js => d9f32620.d8ad6e12.js} | 2 +- ...e7943b.38c9ff8c.js => db4acc74.7e2a8979.js} | 2 +- ...06a73f.a6cc7100.js => edc6c16a.25f1c0ad.js} | 2 +- assets/js/main.269d115e.js | 2 -- assets/js/main.5c374939.js | 2 ++ ...ICENSE.txt => main.5c374939.js.LICENSE.txt} | 0 assets/js/runtime~main.d46b7766.js | 1 + assets/js/runtime~main.dbda3742.js | 1 - blog.html | 8 ++++---- blog/archive.html | 8 ++++---- blog/first-blog-post.html | 8 ++++---- blog/long-blog-post.html | 8 ++++---- blog/mdx-blog-post.html | 8 ++++---- blog/tags.html | 8 ++++---- blog/tags/docusaurus.html | 8 ++++---- blog/tags/facebook.html | 8 ++++---- blog/tags/hello.html | 8 ++++---- blog/tags/hola.html | 8 ++++---- blog/welcome.html | 8 ++++---- docs/cli/babylond.html | 8 ++++---- .../babylond_query_auth_account.html | 8 ++++---- .../babylond_query_auth_accounts.html | 8 ++++---- ...babylond_query_auth_address_by_acc_num.html | 8 ++++---- .../babylond_query_auth_module_account.html | 8 ++++---- .../babylond_query_auth_module_accounts.html | 8 ++++---- .../babylond_query_auth_params.html | 8 ++++---- ...babylond_query_authz_grants_by_grantee.html | 8 ++++---- ...babylond_query_authz_grants_by_granter.html | 8 ++++---- .../babylond_query_authz_grants.html | 8 ++++---- .../babylond_query_bank_balances.html | 8 ++++---- .../babylond_query_bank_denom_metadata.html | 8 ++++---- .../babylond_query_bank_total.html | 8 ++++---- ...abylond_query_btccheckpoint_btc-height.html | 8 ++++---- ..._query_btccheckpoint_epoch_submissions.html | 8 ++++---- .../babylond_query_btccheckpoint_params.html | 8 ++++---- ...ylond_query_btclightclient_base-header.html | 8 ++++---- ...babylond_query_btclightclient_contains.html | 8 ++++---- .../babylond_query_btclightclient_hashes.html | 8 ++++---- ...bylond_query_btclightclient_main-chain.html | 8 ++++---- .../babylond_query_btclightclient_params.html | 8 ++++---- .../babylond_query_btclightclient_tip.html | 8 ++++---- ...uery_checkpointing_raw-checkpoint_list.html | 8 ++++---- .../babylond_query_checkpointing_params.html | 8 ++++---- ...ond_query_checkpointing_raw_checkpoint.html | 8 ++++---- ...babylond_query_distribution_commission.html | 8 ++++---- ...lond_query_distribution_community-pool.html | 8 ++++---- .../babylond_query_distribution_params.html | 8 ++++---- .../babylond_query_distribution_rewards.html | 8 ++++---- .../babylond_query_distribution_slashes.html | 8 ++++---- ...ribution_validator-outstanding-rewards.html | 8 ++++---- .../babylond_query_epoching_params.html | 8 ++++---- .../babylond_query_freegrant_grant.html | 8 ++++---- ...lond_query_freegrant_grants-by-grantee.html | 8 ++++---- ...lond_query_freegrant_grants-by-granter.html | 8 ++++---- .../babylond_query_gov_deposit.html | 8 ++++---- .../babylond_query_gov_deposits.html | 8 ++++---- .../babylond_query_gov_param.html | 8 ++++---- .../babylond_query_gov_params.html | 8 ++++---- .../babylond_query_gov_proposal.html | 8 ++++---- .../babylond_query_gov_proposals.html | 8 ++++---- .../babylond_query_gov_proposer.html | 8 ++++---- .../babylond_query_gov_tally.html | 8 ++++---- .../babylond_query_gov_vote.html | 8 ++++---- .../babylond_query_gov_votes.html | 8 ++++---- .../BabylondQuery/Babylond_query_ibc.html | 8 ++++---- .../Babylond_query_ibc_channel.html | 8 ++++---- .../Babylond_query_ibc_channel_channels.html | 8 ++++---- ...abylond_query_ibc_channel_client-state.html | 8 ++++---- ...Babylond_query_ibc_channel_connections.html | 8 ++++---- .../Babylond_query_ibc_channel_end.html | 8 ++++---- ...uery_ibc_channel_next-sequence-receive.html | 8 ++++---- .../Babylond_query_ibc_channel_packet-ack.html | 8 ++++---- ...nd_query_ibc_channel_packet-commitment.html | 8 ++++---- ...d_query_ibc_channel_packet-commitments.html | 8 ++++---- ...ylond_query_ibc_channel_packet-receipt.html | 8 ++++---- ...lond_query_ibc_channel_unreceived-acks.html | 8 ++++---- ...d_query_ibc_channel_unreceived-packets.html | 8 ++++---- .../Babylond_query_ibc_client.html | 8 ++++---- ...ery_ibc_client_consensus-state-heights.html | 8 ++++---- ...ylond_query_ibc_client_consensus-state.html | 8 ++++---- ...lond_query_ibc_client_consensus-states.html | 8 ++++---- .../Babylond_query_ibc_client_header.html | 8 ++++---- .../Babylond_query_ibc_client_params.html | 8 ++++---- ..._query_ibc_client_self-consensus-state.html | 8 ++++---- .../Babylond_query_ibc_client_state.html | 8 ++++---- .../Babylond_query_ibc_client_states.html | 8 ++++---- .../Babylond_query_ibc_client_status.html | 8 ++++---- .../Babylond_query_ibc_connection.html | 8 ++++---- ...ylond_query_ibc_connection_connections.html | 8 ++++---- .../Babylond_query_ibc_connection_end.html | 8 ++++---- .../Babylond_query_ibc_connection_path.html | 8 ++++---- .../Babylond_query_ibc_transfer.html | 8 ++++---- ...Babylond_query_ibc_transfer_denom-hash.html | 8 ++++---- ...abylond_query_ibc_transfer_denom-trace.html | 8 ++++---- ...bylond_query_ibc_transfer_denom-traces.html | 8 ++++---- ...lond_query_ibc_transfer_escrow-address.html | 8 ++++---- .../Babylond_query_ibc_transfer_params.html | 8 ++++---- .../babylond_query_mint_annual-provisions.html | 8 ++++---- .../babylond_query_mint_inflation.html | 8 ++++---- .../babylond_query_mint_params.html | 8 ++++---- .../babylond_query_params_subspace.html | 8 ++++---- .../babylond_query_slashing_params.html | 8 ++++---- .../babylond_query_slashing_signing-info.html | 8 ++++---- .../babylond_query_slashing_signing-infos.html | 8 ++++---- .../babylond_query_staking_delegation.html | 8 ++++---- .../babylond_query_staking_delegations-to.html | 8 ++++---- .../babylond_query_staking_delegations.html | 8 ++++---- ...babylond_query_staking_historical-info.html | 8 ++++---- .../babylond_query_staking_params.html | 8 ++++---- .../babylond_query_staking_pool.html | 8 ++++---- ...bylond_query_staking_redelegation-from.html | 8 ++++---- .../babylond_query_staking_redelegation.html | 8 ++++---- .../babylond_query_staking_redelegations.html | 8 ++++---- ...nd_query_staking_unbounding-delegation.html | 8 ++++---- ...ry_staking_unbounding-delegations-from.html | 8 ++++---- ...d_query_staking_unbounding-delegations.html | 8 ++++---- .../babylond_query_staking_validator.html | 8 ++++---- .../babylond_query_staking_validators.html | 8 ++++---- .../babylond_query_upgrade_applied.html | 8 ++++---- ...babylond_query_upgrade_module_versions.html | 8 ++++---- .../babylond_query_upgrade_plan.html | 8 ++++---- .../babylond_query_zoneconcierge_params.html | 8 ++++---- .../BabylondQuery/babylond_query_account.html | 8 ++++---- .../BabylondQuery/babylond_query_auth.html | 8 ++++---- .../BabylondQuery/babylond_query_authz.html | 8 ++++---- .../BabylondQuery/babylond_query_bank.html | 8 ++++---- .../BabylondQuery/babylond_query_block.html | 8 ++++---- .../babylond_query_btccheckpoint.html | 8 ++++---- .../babylond_query_btclightclient.html | 8 ++++---- .../babylond_query_checkpointing.html | 8 ++++---- .../babylond_query_distribution.html | 8 ++++---- .../BabylondQuery/babylond_query_epoching.html | 8 ++++---- .../BabylondQuery/babylond_query_evidence.html | 8 ++++---- .../babylond_query_freegrant.html | 8 ++++---- .../BabylondQuery/babylond_query_gov.html | 8 ++++---- .../BabylondQuery/babylond_query_mint.html | 8 ++++---- .../BabylondQuery/babylond_query_params.html | 8 ++++---- .../BabylondQuery/babylond_query_slashing.html | 8 ++++---- .../BabylondQuery/babylond_query_staking.html | 8 ++++---- ...abylond_query_tendermint-validator-set.html | 8 ++++---- .../BabylondQuery/babylond_query_tx.html | 8 ++++---- .../BabylondQuery/babylond_query_txs.html | 8 ++++---- .../BabylondQuery/babylond_query_upgrade.html | 8 ++++---- .../babylond_query_zoneconcierge.html | 8 ++++---- .../babylond_tendermint_reset-state.html | 8 ++++---- .../babylond_tendermint_show-address.html | 8 ++++---- .../babylond_tendermint_show-node-id.html | 8 ++++---- .../babylond_tendermint_show-validator.html | 8 ++++---- .../babylond_tendermint_unsafe-reset-all.html | 8 ++++---- .../babylond_tendermint_version.html | 8 ++++---- .../babylond_tx_authz_exec.html | 8 ++++---- .../babylond_tx_authz_grant.html | 8 ++++---- .../babylond_tx_authz_revoke.html | 8 ++++---- .../babylond_tx_bank_multi-send.html | 8 ++++---- .../babylond_tx_bank_send.html | 8 ++++---- ...bylond_tx_btclightclient_insert-header.html | 8 ++++---- ...lond_tx_checkpointing_create-validator.html | 8 ++++---- .../babylond_tx_checkpointing_submit.html | 8 ++++---- .../babylond_tx_crisis_invariant-broken.html | 8 ++++---- ...nd_tx_distribution_fund-community-pool.html | 8 ++++---- ...lond_tx_distribution_set-withdraw-addr.html | 8 ++++---- ...d_tx_distribution_withdraw-all-rewards.html | 8 ++++---- ...ylond_tx_distribution_withdraw-rewards.html | 8 ++++---- .../babylond_tx_epoching_cancel-unbond.html | 8 ++++---- .../babylond_tx_epoching_delegate.html | 8 ++++---- .../babylond_tx_epoching_redelegate.html | 8 ++++---- .../babylond_tx_epoching_unbond.html | 8 ++++---- .../babylond_tx_feegrant_grant.html | 8 ++++---- .../babylond_tx_feegrant_revoke.html | 8 ++++---- .../babylond_tx_gov_deposit.html | 8 ++++---- .../babylond_tx_gov_draft-proposal.html | 8 ++++---- ...babylond_tx_gov_submit-legacy-proposal.html | 8 ++++---- .../babylond_tx_gov_submit-proposal.html | 8 ++++---- .../Babylond_tx_gov/babylond_tx_gov_vote.html | 8 ++++---- .../babylond_tx_gov_weighted-vote.html | 8 ++++---- ...d_tx_gov_submit-legacy-proposal_cancel.html | 8 ++++---- ...x_gov_submit-legacy-proposal_community.html | 8 ++++---- ...nd_tx_gov_submit-legacy-proposal_param.html | 8 ++++---- ...tx_gov_submit-legacy-proposal_software.html | 8 ++++---- .../babylond_tx_ibc-transfer_transfer.html | 8 ++++---- .../babylond_tx_ibc_channel.html | 8 ++++---- .../babylond_tx_ibc_client.html | 8 ++++---- .../client/babylond_tx_ibc_client_create.html | 8 ++++---- .../babylond_tx_ibc_client_misbehaviour.html | 8 ++++---- .../client/babylond_tx_ibc_client_update.html | 8 ++++---- .../client/babylond_tx_ibc_client_upgrade.html | 8 ++++---- .../babylond_tx_multi-sign-batch.html | 8 ++++---- .../babylond_tx_sign-batch.html | 8 ++++---- .../babylond_tx_slashing_unjail.html | 8 ++++---- .../babylond_tx_staking_cancel-unbond.html | 8 ++++---- .../babylond_tx_staking_create-validator.html | 8 ++++---- .../babylond_tx_staking_delegate.html | 8 ++++---- .../babylond_tx_staking_edit-validator.html | 8 ++++---- .../babylond_tx_staking_redelegate.html | 8 ++++---- .../babylond_tx_staking_unbond.html | 8 ++++---- ...esting_create-periodic-vesting-account.html | 8 ++++---- ...esting_create-permanent-locked-account.html | 8 ++++---- ...lond_tx_vesting_create-vesting-account.html | 8 ++++---- .../Babylond_tx/babylond_tx_authz.html | 8 ++++---- .../babylond/Babylond_tx/babylond_tx_bank.html | 8 ++++---- .../Babylond_tx/babylond_tx_broadcast.html | 8 ++++---- .../Babylond_tx/babylond_tx_btccheckpoint.html | 8 ++++---- .../babylond_tx_btclightclient.html | 8 ++++---- .../Babylond_tx/babylond_tx_checkpointing.html | 8 ++++---- .../Babylond_tx/babylond_tx_crisis.html | 8 ++++---- .../Babylond_tx/babylond_tx_decode.html | 8 ++++---- .../Babylond_tx/babylond_tx_distribution.html | 8 ++++---- .../Babylond_tx/babylond_tx_encode.html | 8 ++++---- .../Babylond_tx/babylond_tx_epoching.html | 8 ++++---- .../Babylond_tx/babylond_tx_evidence.html | 8 ++++---- .../Babylond_tx/babylond_tx_feegrant.html | 8 ++++---- .../babylond/Babylond_tx/babylond_tx_gov.html | 8 ++++---- .../Babylond_tx/babylond_tx_ibc-transfer.html | 8 ++++---- .../babylond/Babylond_tx/babylond_tx_ibc.html | 8 ++++---- .../Babylond_tx/babylond_tx_multi-sign.html | 8 ++++---- .../babylond/Babylond_tx/babylond_tx_sign.html | 8 ++++---- .../Babylond_tx/babylond_tx_slashing.html | 8 ++++---- .../Babylond_tx/babylond_tx_staking.html | 8 ++++---- .../babylond_tx_validate-signatures.html | 8 ++++---- .../Babylond_tx/babylond_tx_vesting.html | 8 ++++---- .../Babylond_tx/babylond_tx_zoneconcierge.html | 8 ++++---- docs/cli/babylond/babylond_query.html | 8 ++++---- docs/cli/babylond/babylond_rollback.html | 8 ++++---- docs/cli/babylond/babylond_rosetta.html | 8 ++++---- docs/cli/babylond/babylond_start.html | 8 ++++---- docs/cli/babylond/babylond_status.html | 8 ++++---- docs/cli/babylond/babylond_tendermint.html | 8 ++++---- docs/cli/babylond/babylond_testnet.html | 8 ++++---- docs/cli/babylond/babylond_tx.html | 8 ++++---- .../babylond/babylond_validate-genesis.html | 8 ++++---- docs/cli/babylond/babylond_version.html | 8 ++++---- .../babylond/babylondaddgenesisaccount.html | 8 ++++---- docs/cli/babylond/babylondaddgenesisbls.html | 8 ++++---- docs/cli/babylond/babylondcollectgentxs.html | 8 ++++---- docs/cli/babylond/babylondconfig.html | 8 ++++---- docs/cli/babylond/babylondcreatebls.html | 8 ++++---- .../cli/babylond/babylondcreategenesiskey.html | 8 ++++---- docs/cli/babylond/babylondexport.html | 8 ++++---- docs/cli/babylond/babylondgentx.html | 8 ++++---- docs/cli/babylond/babylondhelp.html | 8 ++++---- docs/cli/babylond/babylondinit.html | 8 ++++---- docs/cli/babylond/cli.html | 8 ++++---- docs/cli/babylond/debug/babylonddebug.html | 8 ++++---- docs/cli/babylond/debug/babylonddebugaddr.html | 8 ++++---- .../babylond/debug/babylonddebugpubkey.html | 8 ++++---- .../babylond/debug/babylonddebugpubkeyraw.html | 8 ++++---- .../babylond/debug/babylonddebugrawbytes.html | 8 ++++---- docs/cli/babylond/keys/babylondkeys.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysdd.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysdelete.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysexport.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysimport.html | 8 ++++---- docs/cli/babylond/keys/babylondkeyslist.html | 8 ++++---- .../cli/babylond/keys/babylondkeysmigrate.html | 8 ++++---- .../babylond/keys/babylondkeysmnemonic.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysparse.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysrename.html | 8 ++++---- docs/cli/babylond/keys/babylondkeysshow.html | 8 ++++---- docs/cli/babylond/migrate.html | 8 ++++---- docs/cli/babylond/preparegenesis.html | 8 ++++---- docs/developer-guides/grpcrestapi.html | 8 ++++---- .../modules/btccheckpoint.html | 8 ++++---- .../modules/btclightclient.html | 8 ++++---- .../modules/checkpointing.html | 8 ++++---- docs/developer-guides/modules/epoching.html | 8 ++++---- docs/developer-guides/modules/monitor.html | 8 ++++---- docs/developer-guides/modules/overview.html | 8 ++++---- docs/developer-guides/modules/reporter.html | 8 ++++---- docs/developer-guides/modules/submitter.html | 8 ++++---- .../modules/zoneconcierge.html | 8 ++++---- docs/developer-guides/overview.html | 8 ++++---- docs/developer-guides/vigilantes/monitor.html | 8 ++++---- docs/developer-guides/vigilantes/overview.html | 8 ++++---- docs/developer-guides/vigilantes/reporter.html | 8 ++++---- .../developer-guides/vigilantes/submitter.html | 8 ++++---- docs/faq/overview.html | 8 ++++---- docs/introduction/architecture.html | 8 ++++---- docs/introduction/babylon-overview.html | 8 ++++---- docs/introduction/btc-staking.html | 8 ++++---- docs/introduction/btc-timestamping.html | 8 ++++---- docs/introduction/overview.html | 8 ++++---- docs/papers.html | 8 ++++---- docs/rpc-gateway/btccheckpoint/epochnum.html | 8 ++++---- docs/rpc-gateway/btccheckpoint/overview.html | 8 ++++---- docs/rpc-gateway/btccheckpoint/params.html | 8 ++++---- .../rpc-gateway/btccheckpoint/submissions.html | 8 ++++---- docs/rpc-gateway/btclightclient/contains.html | 8 ++++---- .../btclightclient/containsbytes.html | 8 ++++---- docs/rpc-gateway/btclightclient/hashes.html | 8 ++++---- docs/rpc-gateway/btclightclient/header.html | 8 ++++---- docs/rpc-gateway/btclightclient/mainchain.html | 8 ++++---- docs/rpc-gateway/btclightclient/overview.html | 8 ++++---- docs/rpc-gateway/btclightclient/params.html | 8 ++++---- docs/rpc-gateway/btclightclient/tip.html | 8 ++++---- docs/rpc-gateway/checkpointing/overview.html | 8 ++++---- .../checkpointing/rawcheckpoint.html | 8 ++++---- .../rawcheckpointlistepochnum.html | 8 ++++---- .../checkpointing/rawcheckpointliststatus.html | 8 ++++---- docs/rpc-gateway/epoching/currentepoch.html | 8 ++++---- .../epoching/delegationlifecycle.html | 8 ++++---- docs/rpc-gateway/epoching/epoch.html | 8 ++++---- docs/rpc-gateway/epoching/epochinfomod.html | 8 ++++---- docs/rpc-gateway/epoching/epochmsgs.html | 8 ++++---- docs/rpc-gateway/epoching/latestepochmsgs.html | 8 ++++---- docs/rpc-gateway/epoching/overview.html | 8 ++++---- docs/rpc-gateway/epoching/params.html | 8 ++++---- .../epoching/validatorlifecycle.html | 8 ++++---- docs/rpc-gateway/overview.html | 8 ++++---- docs/rpc-gateway/zcconcierge/overview.html | 8 ++++---- docs/rpc-gateway/zcconcierge/params.html | 8 ++++---- docs/support.html | 8 ++++---- .../btc-staking-testnet/become-btc-staker.html | 8 ++++---- .../btc-staking-testnet/become-validator.html | 8 ++++---- .../btc-staking-testnet/become-vigilante.html | 8 ++++---- .../btc-staking-testnet/czintegrate.html | 8 ++++---- .../deployment-overview.html | 8 ++++---- .../finality-providers/eots-manager.html | 8 ++++---- .../finality-providers/finality-provider.html | 8 ++++---- .../finality-providers/overview.html | 8 ++++---- .../btc-staking-testnet/getting-funds.html | 8 ++++---- .../network-information.html | 8 ++++---- .../btc-staking-testnet/overview.html | 8 ++++---- .../btc-staking-testnet/setup-node.html | 8 ++++---- docs/user-guides/installation.html | 8 ++++---- docs/user-guides/overview.html | 8 ++++---- docs/user-guides/testnet4.html | 8 ++++---- index.html | 8 ++++---- markdown-page.html | 8 ++++---- 341 files changed, 1299 insertions(+), 1299 deletions(-) create mode 100644 assets/files/cantina-phase1-competition.pdf rename assets/js/{03c430e6.ab7eb0b4.js => 03c430e6.9068d98c.js} (98%) rename assets/js/{7661071f.0e3e1244.js => 7661071f.fb4b9aa4.js} (97%) create mode 100644 assets/js/7e396926.5ac17178.js rename assets/js/{9ca9f017.bb69d677.js => 9ca9f017.62f136ee.js} (99%) rename assets/js/{9f42ab4f.09996b77.js => 9f42ab4f.dcdbf2e3.js} (97%) delete mode 100644 assets/js/a27c0e41.df505de0.js rename assets/js/{7b93a134.7fe9fda4.js => a3709191.07f06032.js} (67%) create mode 100644 assets/js/a7d7e9b8.6777adb0.js rename assets/js/{b7209be1.d9040e56.js => b7209be1.3c6e85ee.js} (98%) delete mode 100644 assets/js/bd9adad9.9c3b810a.js rename assets/js/{e63be1c7.798f08d9.js => cc038963.f9d86d59.js} (99%) rename assets/js/{d9f32620.ccc0eb9f.js => d9f32620.d8ad6e12.js} (97%) rename assets/js/{4ae7943b.38c9ff8c.js => db4acc74.7e2a8979.js} (65%) rename assets/js/{1606a73f.a6cc7100.js => edc6c16a.25f1c0ad.js} (50%) delete mode 100644 assets/js/main.269d115e.js create mode 100644 assets/js/main.5c374939.js rename assets/js/{main.269d115e.js.LICENSE.txt => main.5c374939.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.d46b7766.js delete mode 100644 assets/js/runtime~main.dbda3742.js diff --git a/404.html b/404.html index 0ee123a4f..c22bb472d 100644 --- a/404.html +++ b/404.html @@ -5,13 +5,13 @@ Page Not Found | Babylon Blockchain - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/files/cantina-phase1-competition.pdf b/assets/files/cantina-phase1-competition.pdf new file mode 100644 index 0000000000000000000000000000000000000000..22384ddb4c2f302215ba9c8b76ded7142de5e113 GIT binary patch literal 728231 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 su*fE7R;DCFjqG}%<29T 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

-b&WOh5@(K!V6j2%3RPo?RaZZ8d zRF9lwL&m-&B>QBX=tjyz3Q}_eyeuX@3TMDf6i^O7BGIvP7&3GlQrs-LSRi2^5|TbY zXqDTy`Ofjz3mUkxzB*I2Ui7!%ql({$Ek4uOad+}f8Z#8mz%1l^KbSa~QgrOg_W(=2 zbt#XjM{{~g7@-O$WfI5|ZLwJdDmg$p29bQKk@47z<8h7$AWNAdV7?g6C{vrQP|9^)^Z*J$a@P8kB}|`C|qU9vS(L~pqNE} zSylsYu7*NaL_eGmYkroFNE4)M#FaANM^o}KeB?#oi%0QDg0}q3bmwNb`J^2QA?;Rph9F zR=XJNRNAkV_9eDKoN@8FMsDZrh$o`q*yH?<$tm1|(D76{l*Zu@#CzoI_8ATNvXC1a zWJ>nmt2u|o@MQX#k8yP9E~%;C?N#cK`bNR(cQ7ZL$szKe(5We zMi=S1_4r6p(K=X!KN9husx_%nmO0GP*WYZ_{Cg}m94JVSbfY48xTG8|{l$q*%;8*( zj1F$!Eci?w+O>Db&c6lqi|FKpIzAOow+FK?1XB3vQui_$41$7Iy+zAFD;%9jpMbd> z#5<_S<}+Z5Ek-O*BRzSz>I^;2winOzeMFez^26Ij3f03IZW=z0w!#dW*YEIv>V{zX8x3jFis3~t*q zEzbOxFF8(J|G#XDSpJ(s1?xZGivN2-(~DYIJDWHX(2H6dIGYHY7}*({K=blKJ2^X= z7}!9&Z(Qq0C2g`I_k5_C(`!Abf*#5csPJ01utp>)Uk_zu9fF7m64y{VN-HvDY)ts= zf&(sC8hFSEBP6)P2q6RApI!?9&Ovigm#b>Vj!JxkNm)?2-mTq4F(Ha5(aEamt!mQb zzqon6kDlFTcle0!=yKyD;>9glBZvanjgpL?uco!QCHB`5;&Uxn+U=BT$h48%@dMwE z(#-h6sC6x%hn0le|Ek}+3nqj<=$vzLFodKV=H-d3fs02HiSX)nh-yEGm7st_Q9`0Y zok(s+1uXQm`@S4#jd2Td4j4Ojr;A6|1qy;CIy>gb?nt9w5_x>TyoYU@iX>h0t!8hh zuXdsi$d69=L7Uy(jK#7*_{%Pd?Dv8)N8Fu>J?V&<55oDN`xcsC>b7$bfhaKXl zhkq#GMdWPWq4lc=Q zm-aX6H4G39JBLppmf67g3V~Hno<-pHwSUS|*Yszl3cz!)sN~8g_@}YZz*#yO6G#(i z0#V%rn#FVi5sabo`ih;}wx%&9Congc9`!FU=`XkhqrxemIbeBkm|_-uCX+hB$aGi>Mrhd3=)g;4mtG5b(S+64a^ZrxDHYJ-6iTp^gnXxI8Y zn!`WhXl$p2zcX})Rk|w0hK>oXq5Dk0q7w?`&VBx#Po*nbloPr=eg1-RgfHyOts4Qc7rOE%g751s&yA*ojm|HMn#gGa?dhK@7S!yj6KlHFQ z8>++ViOf3Am>SjV<%Sq;p>3M>vK0$AeXBH=RvCI*_S{(n)?c2k*F_HR>!w8Y?@02}`~FiXum}{7MB^ES$BWHWhxJ5088f_~8v|if;9mSqHz`X)3OO-L92`7>O)GP1;#;bHko=g; zE9@+L3?I!YH$Wto1hHlbBFB3aP@$zFT$mO22A$0@tHs&Vp0gw_8%f^XntX^L9%H4> z9CPU!^FP|Fm}|wTn@~R~WAXC95dD!=LMyQRFK=wpMCcVEpRZg@EY8a%Hy<~toN@9f z`hlzIfs1?#&@vYI7f;9sIg*s`Wac#3lAP^4j>#p9L6o-b=o{Ge;?IkQNCKhqv*)FfnH|!9 zzu;3ITtB<<@_zPCtN7rGv&*ywNfa-6b5lkkfN(>MFdZ6C<9QdjGj)4+eXOEyf{dgI zW_sTHZ6nPltHc^gb7BxGFD0YY2|j^FjFB|pKI)s=Bas%y+qT+M@L8W+`>>mo*L)>7 z_(I?d1%W`ALcs8x=q+#Oev);uQgNhZ2u7S-((p;laDu#p3>TprF`GMJl;K-n#3%jv zs)Dm~f)9NLv4ZN)QY3%MjMv_Op(7eq=!~`z8WM@Xupw{2cTT#qut0etH`n3${-fbb z#1+}`1BjMTlcuUY@0TWvCPwCP`B_1C?fw21Bf}SlQq;pS#X>rEE#@zNg=+fxuAYXwX0eHopGzO!`Nhc{%{o)sV8b*<(!+1@u0O2q%)U2c*&2zY4BP2 zy!)_r!=sv68_NQJ7q`Rp?}4~yt}N5~2!>0C^RP>6#l2p_C7)}5%2+R7*IQ*DZ$qGP zIsi|N#9J!iA@u?48GNw6Wd)L{nc*(lnXaokDTxv^{hKiFHSRn8l_3!!B;!R>l{M&f zT|)vbyj_Pae$|bTJ~bl>01Bk!2{{YTo1=U?B`SKya}lVQ%%A{p!AsKq>)~yG$wEQ z9f@zg?uJBVbaljIwO4y(HPciV9e-9s()C!I-l!Ut@Hty~a{d+h*|Q-*UCe3C*O`h> zk5Jd&-Kg|~^T}a)1f26?q(rmC42Icuz}^7K#cD2xHe>8uKSy(HoAUMH!{`3yyBxb57T)hux-?w|ak<_!5hd^&0z?67`F^+zgO< zJH%Y8)*(%A{m-#gT4$*EMmu&H6iGc;LQ=Kv+8emHK(ZnMqkxoOdMdYN$7Tr~+z~k3 z>w3%HiPEY7=X|}H8STYp!yaf-Bf(hv^}mUBs&M1x&KCal3el>eq|j{Hk9=D^+q^$c zs3HwrT;sOo*DM_K9J7!oy&38`j&?f{TxPU>GkgO#ndRnBp>4~|DV?Ps?3n#wU@v% z@rziDkTrVwku4&%S9`IkgXNc%}b#U}Oubpb#Wit3do6MKZZkD-b zU-XNLD09|6U5J+D(a&o2^F-RH%&b1DiPm^8sV4&%0`gB8YeB!JNg?w^{3_{<89Wfa za>e+F?6+-=a%ePN^>=OL4l)@-EEq2^6G;Sy#8HH`k%w`w72HXJ=sGNffg+w1VlM^u zQ+F{3yZ3iYJYT&4FJ&@H2JNv%9=*htA}nX%El5)%>;J|;r=y!!9u8!4)XIU*lA`s$p-Wh=$Uv9xgV6i>?-~?IE== z{TErSL)%Qw1ipN(b15%}MHaPJ>RR2Fnd&}AqG6EvqykgA_>43d3cV^q1txYeN6|BP z5t_03b!ECE0S>HUv`F}4k`2C4mt;^}NG!~a>XC{J_K2V)F{Xk5v_aoc)RX2Y!bTR8 zX?f(j)+Y@$nZXg($^^zPkxL%+15yJnF^U^+C1YKq)Cf6Ddptpuw5=@bq6`d{pI*CO zbr#Ega{^md<3wpNLzjGkFSiW;gyYT-C8V*G`3P==JIzJ2O(szrRx0GQfm9+EdOnvF zA%tor;^j@a6A5gxno*q(?5Sr5*!k6xTc+TA1|2@pD*^|Ovj9K^T{{ic7IX;LG|KvD ze6Wd{+}8A=&*aEkGdQCz*=zd>Dvn1{BhfetB@yAQx}Tk4?y^(3caTf;`PqH_j);0i zckjOHp}t_3?#X+}%PYO1clblJxJ-7C*jO;(eYpUWh_l_#9aESSc73s7m4p)(@Pj#5 zrLLM$JaLvDq9Ar-b@$U_herq9EzObW5?_sX^?+kh?l;)8v$*Ch1G-dE8{EIeRdDxg#INQ$~HP~e~N#Ym#RN*TaN>dbLJ! zgiT%r3#;pAm)g*nt@4&S8l-aP1nj9>!~O3=Y$-Mon$7&?58C-Aph8fbr&>{Lv>s3fPWtbo`hk`o3?BR4N7V-}&JCc=o zk@E%=8W^Z+(fu=8vw?n2z>~z(Lri=cnSi&3;GS+yk1uVH(r}>=L{ap}IFcsvMB=Id znsO||NzvTV$ckWc_GzE~=h1JS6+&9l(J&~uOeH6d009&uHijf?9n*Ehg5>w4!f`n3 zQaEq5ldCr|318m^nV;Tnz}mGZ=L3mTEs@wN(zhg2jGo;zX`@rRC|^-v6KP}>n~rio z2e77G4Z}%&w25Y>DM>=VEY+t?#?hoGa%XDzQS1*)Jk#edj8Jky9z5OXJ-hql%g&-og-zQ#XDL^^4~<-k!np6ODi zrgFNbU$*N~xOlVfQ7-p?Ww*KFt}pQ;oDH~?C_&k6=Pl#+Wrpg;L!UEO1V5y4m2Zd&SGahe^ zdGey7FzghJp`FLuyvbr+kURp4o=p4ixRFG$-mn6r2K@H)1Y3 zwiNvZxK^D-^a ziw|ACV8JS=qUDX_p}4e`Q0wjs)I|%2wW(*YvZd* zs#~c7jRf#zXn*@32z*mhfw5+Z2@0LA@Cc*rhun*8S#{P)9mgI|qcL0I?n^I1NDMXR z@^h1}9o&?4%jgG%AMXCCxtHig`iZUaqo$cIHa6tM$9s6bNqW1zeG})kx~@@BrwI1e zd{jxq#2ONc-X$v96vUX#_6e;!RJ8Pr3nq_xXXtBeYOM}SA_S!z0as8T@o=7DA;^(O z3?A}qlq85InUWDo{RahHPcP)F*gZVN_0&BLLj|+kJe8C|Y~7(XWN@J7020M8EX=zW zzOvrwG81X*;~{B*Rg;@OC4lLQKFQ4%eFA>M7Q6>R;1w9HMLCNv`s8|QY=~xwc~{R^ zv#NFOXMqv;)1Ge>RPuL4g1C0e)lEN+6Xv8(ZlZBPK)mQ6eIo3cQ<}zdz2sA{e@`3U zT-zl#d%)IgIt)7y%&Mq!V_RDu1*~e6--8^cAZ!_3Op5*te&3@v|CC0rwp>kHNBjsr zBA>J7%u0({<&Y5ufn~LSI+n9F)xP#H6DVpE@wFew41q{*GiqHjl1WdDP5CP*-*?9J zDEKZkhqJ+fhou1k8cM8qBM}J_GFsH7h#I=!r&Ra`1c0hxBog**kn*KC-UA!&2?Vb3 zLVkF*f)rbm!F`#D!+;`!y0!K+=*(oPTgnsA<82%Pk_xe;(I(uAp`F0rP0;2tSp$Rx zZ7pMFhwBYHt6x18;uk&5P8AoOnU=43l8BO>)rCM(5yP{BOgmwsc8^YosVkeHKNB}C z^fS1?vQvnK$x6eSNtW4|Ir+*a==RnHVp99a8P80|Q97mFfppR*W*$LR*RH^{DntTV zoJrTr70QJ6+laMtPzp#u38i{j-1@sszWxGBxFkD+!DeKrBwEI%$GKqh1BcHsCC(6} zIoB}On=w4Q?t{_jjNVVXJc<<|T;qn|4V0nLz^~_{Sh(?ZDHg&$#a@ zdU?Sw6eWI!)@nVfQ94Wg*J05_9tgM2xMdqfM6sr*w?g+4`flSO5gK?N$h15FqIBU! z$M=_x5$kVAqHp( zU4T7w`G<-_^cA0sKhQJ;H^FC`&fHIkbn-%)rGy8!Q^?`*@hcb z3(u>6*t~Z&!EDv=Z7Fb=Z{U;CxJdwwK>Pe^`F5*0AD*=FhIHS~_h##s92VhTa{Z1D zY7dFh3@jJgW#ibt>ovvJ0xR5BP(Php$r6Ti9|YiI;ZWM~QvgE?Qex)OY%KxW`3to&%;fzp}<^aOdZADOb&!wn*; zz?a*fn6X-~BUu5qstXbl-cyq|zYjij zGjsnruyLWVeG}8ps+D`Z$xZLAT+5#$g+dBuL*tq{XbCpXv#xHrv-NDwJKO|*`v%fT z`S=ZKXU{l$=BE!j3)rV)olSC#vv5KPzQWqXFaKe2Yvmud*~QV`=farl-Gx$6*_3^u zWznzXm{{T4IAUZyx^@oBh1p4xYjdPl$;H@{A@;1n`<87|ox?G8)Jd&WXMq#*MB`IT z(ddCS`U#D%S;B!G(JvVCybTx@n+}yolq9<<_*e;n>~Fsd8SMAnr6{s0E!PU2BBlm$ z(~zAZ49x||S3m|6q|g+0p^O&A;#C`yk>5s_%|I7J2N!>}udfXMEloEL@HH|HxU#Y0 z&qT%%8YXld*~_3i50A}EE)_`HR($0vE30TUETU;O6EBio4EE#Bx=q@|RBM*9#%kkX zyC=E!>8pp+!qpt;XmvT7R%$S{(GzkOE%A+^81fOjL*r~b0_#i!9y2(l`{v05N=+S4 zSA->LeUbgXFFj4(nwC7Nx0=ep~nBg0-lK&#a>0rBiVBH=1l*KepU#h@=B35X8 zWElhJq!@nrvKMosr~tinkR}+Xj9;8}N^C3#;Ao)nerQR+!_eA|6uk>$$Q zR`|g$L3!yneRs@1Q_Z_Ko}&wvv)Q!_Oz!U)d_O6AM)v=uWWEZ6Lh`7N4rVYg+MZxx z{bbrPEU+V>azWAU?3j$6TyK)^zNMK%SwYyi4iX%vhwm-|wPK^tuM4-QR+~qRD&2DB zFB6rZMu?=k%S>^5(JvdO#R}sf9@8Vm*5iM~WZ=7dQ&RaP=8(;ev*p@GAR#g)=>zZB z5{C^L5WfsJPvs?5^ZqsugqpkTD2^V)4r+Mh0Oy6#8ZQ#2kT4FBxe9T(znMQ^%ce32 z$5<^Ek9}o>wTVcaQbJZ%t-=ohyV9l9Qf}8ihrXmY{P0P4RW)YNyE%B&m$}Mb_t=+k z9Y>9N@!+ShT;|Dawq2;NTag3W{~cOUgF`{?_&^SJ#*`p==k@G7JlW5F^sor%J#OIhzAh& zz3@5Vc_IGg1A7vnt%7py6kk@UlP(E zQWcLeVqVi}RFoLj8`av!;~9hAMRF%7fZzIWAwi4J>>hta{K9D@W6wQ2yrvff3F1Tf zH;V}`KLQCXT5iZD^YypMjw*}nsG_y`@!2PQD1wn;sNCU_Fk#7CHmRRu<1*)h5Hn9QEP z;m*oWPZYo46go?GcMpA*0-69Tj|2RJQScPse@dxe+QiA}S?4;4 zgHk?w*c|8u!A1z0LCW+mTawMK?d==QtIJDaXz{(G{nR~(+zXQ^X#d~SKU}|2hVS`f$IoxK|(vD;dXVZ7>>``<>XoF4sWu+Yu<4}utu`k zH_wFgh#!1BMhRiT)EMrc~7YC}|m8z_=r&|Ki$)Zd{_rS~?dD_{6DJBCi) zUv`+9xv*y8L{IksxVt@zJf?B53E#QhY&JJO5UtKP#3rbLtNCR6ZwvjN@BC?B&CCWEg-TzB^i1`OhVRxjHTkh{uTJ@ko)-nA-ZcBOr_JxAY$nuQD-{D$7gVt}UE!72>VHWoNi?S>Xt0sO$f$y|^7|}=w z&_F<`<^)JS`}y-exb(UNY7A+RUa$k?p>4n>gb}?NQ}CE*yuzyju|Y1lRg5JaJoMX! zz%MFn$fBV67i15RdKgJ1*q%soRP!PcgT-BA{8EvD!pEdld**9|VqOs< zC6NzX4&V#J;N>7}1Nbo5IFhnx*vL51{FcsX=~jttYq!=Ja+Py$x-O;MmW!VKn1O7G zLKzFp$&|rb=*P=>Y)uy~>ZN8M>gS?R@|Z~NpA)30K@dVL`i&9f!uV4lrrb)MHbD01 z$_yeF6JI8{erz1F;Ei$|aA~ebRlWXd?uqotO=_C@QN&C}!iXRHaGFTWM67z`ngT5M z`BRmAHIp5r@beS~gaStIqL_hUkU|MR$zcfZt$UHN zVeZ2RZVq)^K z9oKq(zXmbgC5S-7lMavXPhIuw!cd@7#E7C%lalWGQ$3-OJXryR-lPAm)F4o!zv=?o z!@p%#w!+7-8^q$0V(q2+;gx9GHvaglb-pHVcz4g8TG<59H@PeAbXVHae)KB!@w?t~ zJT?JY7;Jj}+E67+^r^BPba=N|vasVlBP}A%D;J}O-QzOj^T-XZ=S#%Iqk|bDtB|ipw6Q#B5>tkY z|7)SaK!~vi8?c*pXTv%ldbAP+NMS&rEdZlEX~I4W`1aD}Y!W$0UD}8DhQh;9O0qW% zaWFE)Tc{h)An|mh>);W?%d@w&Kxz0l5-zdl7_#ZZI;Eap@kS|k!*IQ0m?$rx08o{j z+YTL-xbnwm%{m)TYzsfSHLMTCJB6xBMOqdsum08|C`l2f6vcX7$r@An9uvn2rzG+B zr2Uo{L2nob%ymW*U=-8ZKiyVqFPw>ZX0^20dYan`)NlC$AIe~UVxtcEWO`NaHjqPh zMhM4R6H!C-gYZBQ?!HY)T9_&irt%3{HQ(?~A{+s=82c88J$97ZT*rF=2?B+PAgu;gA!?E&6!h%(^^&!vr9nYUOOzgy$A?T-t?3U$x_ zHmCF@mGI5K@d@zr_5T?(7P|-RS$Dyt4B1}d!*zLk5M%Q}pnyQ)l5wA06T}3?9eh3` z`p%4tu7f5}R-*V$Fj9xVl zG6m(5zqIa*OOpQ$oF^BaxXaZQpyfpoPP*}H>8a5$!R7XIgdIRlK#Y{^R!A1PEty@p zdM#i&V+;eq9>>PMX!&umAP%u3Qfgi1u_kbg$U$@a9FOM=g{LN|wC#a8!hgr#8c~k~ z!XJC%V?v`wrK;KT=9-H2h$OyA_Y_p{QavlWIs0NrcD+)0)PE$(0>wX$8eDk+fZ;en zP*4SKk%$wQjK*t((7RQx75%2W-Vql>9F{|JhuAOWX%~)DK4^tR{%r_?;tOzCduj%G z90>2`V{B~OXxZz&3*SbI==1z#*QfT*jH7E!N_55^tYCn^q^!vF=E!%FC_>OUcqEEP z?XQbrN9dgoEzXTJFRI8O5)I4+KOui=3 zIe_*j>MgA1p%1nsAZgfswBJNzR@5CdVQ7*hG1j|Uk?JpWn?iM&KQp=~;UOGIE>CG_ zycZn0n#ChI9^+W};D9LVUoK=fFo{9Q>LV04!{|qnFO@MkVQ!*%a7B57Kg`w`@#Q88 zh@+KE;SW_Vo|}nQ?u1fM`I$T`raAIuHn}5UPN#0(iekK4t^r>MRgE*?cOb54@QDXK zkUn;FT90xBrbnNUJF`i7SCL6(CvnlP7P6%-c=y~@kF1v?yT`w6uYHR9APa4$^uEbY zmzrNxCS`QgTYOZ_me_@V6^23qKmi4aIXI^tXR9%ar#I~g20fgY2rC8r$5NMHtM zm+bTH)CiF<#j4Ru9qRnJ;~7ZLdMVX-d%Ip3uWT0cLj;oY#gGexJj5mN#fJ<3imK_I z)sZVQv=|F}6)r<%RJks1ROYmJsd1c~s+lXZW%fAmRm%aYu6MRe8E7B3yiG43DmT-b z$5jy@QS>@DWM!C}le^~5?0dGh{YdBgsGX>de$~hxY}9!zakMgTa0dIjU95gf|0c1hH~YNhBQ_UIXx zv_1-pgffD$^#T$_x1Z4!8!c^@wJcVR`}?t0g!LK5j6jh{ zeO9+}%b1jIAy*7f5zy$`oKhH37i4+aY^ywjr!tp%GJ5@h_G?|PwJRZ)1v{54{|%E4 z(PGw%b2iXS?2Th~)55v)17!~Q?g#;&cnm39t}&WFXOOv>Q#!k`;6X`gm$kAevEc$m z?Eays4>;co6fse@!d5L*$*xh_+G{Sz&y)1q?WC`rQTSrN+Ct(QsYKfM)M1cFx@FMs zZ)<9Q?FC#z5swX#+ zOt*pqANj;_-HO0LlMv@^ttyVXzOY`mXSsY@j{1j{=AN+_s#<)q30{Gs``wza8bssa z4SSLX!_cH`rp$Ea%-JDJ=KQZFgmtV`n>S6DbWLuFm-NyU`5*U(!E+5QpN=7@sJd3H zo8a1*$mX#rd3h~VJDfgWUtDueac(CA(##yZ-m@8zFm{LpfL6$N7vPCAvEf8I5S)lVU5-pRw@i8+-=z*Yt8vwN~IK zJ{@EeL=Vx`<5+6!w^>~6%km7_Xi$j|5JxN(d*&TNBU?8R1>)XbnW@?&iZHs(R+PwD zurMPXmLB{w=I50YvboLO91Xv=Xf7J9vp$>a?=_ezH)5=r#VE>~TzEe=({2;GS154o zPdPO8vwn5A7A{Vf|J5uyqOFs>)r#T&S~vgC zrcs6>3qmf;rO=>a(dwoW@9~l1%99eBno%MZhE@05V9&*||5BuJ&3(}i1^UprcCW)R zZ>QUD2&?N|x_+HLctqjrHaeSXPCslwgq0xL)5)bP!Wh%0Ly^W<7f!O4{gCg>RQfkM$ABF4yT4OvhrqfM-{V7X96HyWSF`6`)Z3xqCK7S6LMkbQ-ms z-HW-4!L_=+u6$i->mnMc(#fZxu5I4PP%?f7$G1 z$xg$_!<|~4cCb}Cb)#yn{uSd9?jF+M7k(u4qoJ>U>tu8B>pqd!OY8mF+;eUgRk{ctGp07<>f_XeddkFpps}`$_8X~Q zo^zl7PzKCS(<_aSgHSRlqM`;8bt+7<^mdItXSSMMYS7?%4er!-a-j654g_7yzwcE% z$kDJ@iyw#A3JT_IL18pIdk-h{DCj?2J6Z2s!1kGQvK0^`qi3kFr zQ*3km1hJ7czJgJ4#UddBNGt_GzNDqtQU&9pBPerT_~`&7 zDfQhyo`u%a55pthh*Tky_U`*lko`@|b1DGLwR_+nmbn3F>#-tse?wG^RJB!3!}r(L z>VCJH`eNvesGMqJ9*76ROBTRZvlZ>7&6$doT|7uzlQMpnhL-Td!7qCsZ8ewIOJFd1y&ADvmcrEDngnioa*gI82KHk z(G^Z?ZV+Wk&BB3^wCmL1R!b&-xP|I>OwBHT!ZU|Kta%sH`tWPTsf0~}2%ib1#RdB} z4Kho|_fP~sQ6SAp<&8Pk%M0jz?*Bp&12D6Hf6&cIPY8+c+SkaU8P;TXn}P;BZBr3}9#AcFTQOU0wg#qWcg+ws`l_?O^aN3oNrs!}F_TdhKdfh}zXs}{lfyntEbPQ#0x75X!to?_x~Qhs)uZwR|zZT*OjKatXka0hX0VX+v4@|4StTG@i1P6m4|9+V3dV~6VwCM+$3 z`>-*1@gq7#q$IeYq-aw4N+bh#^?M-_+@{u%1`!Ku;IP*P$82*|HK0BJ7`!{d3Pax% zQ}-FaY0rBY6z-SQA*;v_$KgI`{z2(qrg|^)yp74P;CYLdjoue32jF?Isl@0DiJD+y z#VK+JOJBPu2VAzD7{v-dnL9z`HyY=$I2y_x)`QowDMaG%5XEISQOx|1ps*Di0-3f> z2}RVEoz@z#@f31vaHj|Iw0P$6quBz~voG`@Tdtd0HMbyRR#pPyHx`byjMi&E;l|#` zU$laiW5Uz7s92B_Jg1kP-ME7P_B`X5I)mHy7U1rc*#AA|3x1cah(~`rLU8K;lK|FE zO2j&1m8gKR)jmFko35WzbvjU`#kSs`e!AX^%Lu`%anIJ~3)~6neKG5JhGAExgYjnn zs;d7ClTKGE@)Z41$;sx&9F&AVt873P1SS`4nv*CIG=&lPi?yZ1P@0_Z$e1A{B|+_8 zOu?m?HB|Um!>`VE92Wo_fgMbs$KN8YdNsdv$XcLAqwo`P&=d*YgL|F)r47=Z<^M5T zAKML^oW4xY4gQzZR62>TQWG&rzgKT}SI-dY$Q#xwA6d2o#Ep(&9!>P+Yu>$l|Hm8> zDSNzU_|SBQ;*fuze7^DOg7}`(&%ZJ1_VH~7Wg&Rhn3BG`0|-Y7m-~~*wUI>bj$ZrP z?Sff+{E4W^6mIz*PfX|B`=L|+aA3cKBcGu^?dW$)F7bcjqX_x3%Pr-xwerl4K}=#B z4})ayd3z$8yx8y{)BLW%Gp^lBjNhZ6^Rs$I1UUMEMPQI-7WSi5cW=LUR+TH#|DC_N z2)Bj0d9>hAZ8KX)8PR*cn-$Dgh-OSoH2yFvJ3V*T%MDG*Tl|6f9nWy5ad#(u)PAiD zHQlf8(&A0OOmR|HV{q>9HH$_P5ov^^$*HGeQ{K-^&9f5Aoxrc2VC-tw{P%0Y)|R33 zT!qqivnBOs^@MMg^n3FZ$eW(3ot;0^dB?^iP}@2>mCSi?jn+pWnQ`Xh$&tMIKo1GD z6iF+QpjzS}NEtRqZV#!6e{_Qa>aK1ymexZ`k{sTSNFbs@%TN+&1Ak9!uiUX-AsXnE z1JSy`->^WGgA9YCC#R86&5ExNh7`8UK*X2ijF(XQJf%ItSv5K7PH}5a<*P#$DSKgkQG$%Rea4E-q;_ ze0gWT6W@KOqHA|&*#vSH)!cAQeguNneHF(mfZZ8O_OZwB9Z_Q}>PlqP3G3LY7Vd$o z^>E}>3~YM)c4`{|s@Di~!~;DRF}<1V#xq_IHAKax4QB}p*XR*+k4t+w19Q-#kdhK* z#E;i)c6IEN!($I?HNw$Qy*5)2w-`^lf4E z$%l!!!R?P*-}R1UO|tQ^=9^Eph8sBYE0v~kA5r?oM6-OT1u@1y-j%W{%XV$&|EklB z+Vo(-d4oKs$E(%vUNpmRY;1jtKY}8=aWE;<(nS8fP6k*}6B=Qr4Ez=eZr}GLE+@NR zg^hOU5W6RqllT-# z>72qzF$mN2D!yLr@KeOJ?$^o1UGRG}i9rs};CAF(Ki)<@h#J_Z6l`tGH^_pq?2 z=JuFu-^M*6ZS-`t8|cCcsU=d+>kGk5S9l7CCixf`;RMx7?!+N-mEBD_m2 z8}?fSpvhJP*8{gIXhGNf$v`!}(TUZd=ig7)D@DHdvG`m4+{;6SB(4w<)HYw$V@kNB zNrihUluqmR)xNA?8$FAKR4G@dEXwqS>S-|X(x`Xsz2UW+lp zhY5OIZANgFiRRv6(v_t(YZ_bcKO8L7k_`PqB#(`+Ulj*J|snEpJ8d ztJe8-&(VYDb*(11(=K@)l3vTkZuMS)m0j$jHRes7ee7DBQ1pX)ltKsE`<&Pi`@tW9 z->CrrKNC5&Uvr*XIFRRWNPS< z9Mbf4!K7St7fhBvQnXFzol{M%L&v0&jwpN4Nbe+FYZQyo&ry(oT#Ee+!Nw~ z64p{>fUX)^M?@JC5NM7$f}teGh?GJk9RI&=L=e`t^%|hi(K=u^j*Ej*ksf9ZbkV!! zKQMYi{i49{mEc5f0%L8N#*k*kW3S4hVr>ng4zs?V>Hv|LzYkrrF`q^2L1atJl(Bs* z8A^$eLfcLfY~nfA!d3QMkYd{?(~^Y$k<7=*Qbms&sloLhP0h4s+ z;9Kd@f0v`z4AnsP%+d*%c~hebs=RT$%U8}`bNxDa_I!NpXJ^ZurAsRqhR-i#(}$mx zW#P{E)#DBHfigqdnZ2wX>Bc*E)f1(&h{HDYbg_HA_^j-t;f09SYAKkmPE^n+p; zi%=@$z7K#J6ov!127-@CW;}i4RBV2d$vJS$`5t$=j+?h#A|J22j@=;E67AgBgLg47 zK}}ZOB5mB6qi-zxB>j5jlpN~9yQXOWJB7DPkKF;zEMhlIjn{Y}NA1kTi@OWX)P1^O z+iT)A)H&BO@I`@MM{}e@I0(+(tE1=(^(nzbI@H<&Bf9<)-})*lUsrU!6N;AoC;}A| z!TfMV642_wEXv@5Xye@$C<4V*4^s#)n05XowRAbdD*)~mx;LEkug>c6s1e8P>GVO0|JL-twY6su?*j=^W=<4X~$m~6JK01*9@|b#^ggtj# zM7r=#R_-ed!*0y{oLM4o?N$3(VW+YAdtS+(cuoqBc`GR4bn&|%>I%oHJ-U4?J~z>y zk4(H7`Smrr+K;HzKMj+&Hi?8=d=uFRs``Xwn2*P_F5<{p42IiVobU|8%G(wA?CsSZ zaE&6g)C9KCL$i>0W;O6h5J5Nw8Zv=bk2mhb^?-kyZ=cVhcm@JBEgUyQIEC<}xs*Ml zg0+z=XvvAZGNAGr<9oJ*ungu&kRR7RPBELXBVncpoqW7Q1~*~IPa=P^G^MAtFT z%@aU~9p~)&7au5?m%vA#(bsck)Ef>xBI^Ek9eV?xX!&gk5|&`U{}I{aEil&d#6%Hk zJ1(W#XNyA`od|l5o_H6uwAoNkWhhK4b1qOUrDJT4YJ*HZp6OxTqYJO*XKbtn5y=XiSTzG%N6-v?}g9GVpowAw!xYVe^Ldi(P2cJgp;=Aro8YorONRo~7(k4lju}VcH(ClL6Vn2Rh&a>~lbQ zoW+<-;@%=j#JwHIRNNgyE}MezdW!jj$dGIz?4T-&Dp|nqWa+RoUT^R~C*pFKFWK{{ z@h#NPn~R~g59#6U)wo@N2KkXip9w}VdIfWBNOvdqv&)O^Cm56F$SaH8@$v0;PX;7MHSYWb^>mOmp*1#Y}i)W0Y=g_(j*`famWOMU}Z0cZS>R z<4%C_+kqFR^vo9Ee4|yyKf8~2&=pV7BhYeAa-HbGPUs?8PC3=FX!c;C%9UrGOvQ8q zO@@1C3+K-IfhA6Cac}H}Q^|~MTm}E^VnmMCubMa7NK?C|*M1d~4eGsgRU*QTSfoR6 zIg}+8`Wf1p>zb8OP2u4-x{m04XxYLwyBfjIeSiQ&X^rU4jb-wj^6RJIcA~#8&!jNd z`E|X2_ICoNL&_umEjt#Hx7Z%0)vLhEUjffTZ(ouXU0GM+VqKr|3a3guujP_)v(YJx zvahe~^1P7hhFjf5e^!HpZjg@-M~^0(khki!j~<_HqR2_Cx~X)Ya9hjTn^|!dc7Nn& zcHIis`<tY} zhFq-v%e+$uvBk@{vU)@!znYG1K;@-XV}U9wSQ|VoCOpuZR$nHKE;%BH!D$9od{TI! z0(URsQL8prl`exv_e>!~1}knZ()dyEy|?cbywj(T~W|kJ| zt7WIzQ$Ly!(MTV9Q5c6_jW|s3LVyP89I|$QN1Cxc{DG6+F>Y=f?PP?wMKrN7YE?)| zXy-sHkGlDg-Hi;lgAChIAofF6L`8j6P00?)yP9o97~zT#PziwB8Bsa5a{y=|_GFH2 zk;qyCAvzT0Wo>NJ^oGJNPR`5a=5T%&&d;5fRFtnGxY0=e0%@UMvonO0KRs~^lLn+r zX<>$nKo(5^WM(BP5h8Hxd(_Xm(BxreE{$034ZZ@BpU$M)t@hB?E5^eIZ^|T4EuGh# zrB`W<3w10LQj_t%@L+L3K&s59iFzWUtSSwb64bg1^t5U%Yq#Q4t*V$lG$LWoEW z&=#c0oQ--8Pc;zy#1u?+LGV$kB>-l|DgLQFMcv7{c#EWytM>$=Rn5?FD?{rc061(_ z8lb4qP{+G-=g!CkO<{>P5d!rhB}4`>yctF6K`HlHNeQ}u2+Npx!Nr-Njyk|d1Vt~C zaO)74aE%$zu^oJir%Rph)P*{ZuQ8r5GVZuac<1mZ=5`XIJOiqO;rJ(WY%!B^%4kOc z(~T7&26!pasnKqjD3s(LIpd(bR1lzS1bhe;3gA#AhL zSCdg&0HTRl#(AmH$oe=Ab9s5b+euIxo$~ML(@1b*WCSN%jo|yM%`R zpK_Ir>A&oaSXtQq=a7+||BL75c=;z+Cwiq+;7D$SIQ*nG$(Q6kw%oeAkTzt)(=4O$ zvRuU{(>KohZU@59D**O%BF$x9&_)UU9Yi_c_-AkD6O3G)<#C5+q)|m4*N@NV3y*Dd zacqmh5ob?)hhQ*rWYpZGDdJ_(XG5W+!A!Zcj`(BA0T$2B4KnsgzC2{4xjD5-g)%2@ z>X@}hr*3{NwFNWJ#|F~9@_Mg)_qThgH*Y*MQ+R8i{(5hqf@bMj*F4F_2e<(Wj7dCQ z^8dn>0(}3fPa?KDu?^i}l_4&?Ub15Am-+8+0CAkr$*lj1GaKhvJA!dE&VDuck7(I=)#J7h4&CJ15<+B-%bzsiM8>*$b3LvCGZBi(_!Hs8X~maemhwx z?{JCbv)CGoW=X$_Ag|RR<)EbZ^_z<35a+Y(mdx)2>J|IWPkTmVBX!{hQk=l01ms7F z+VoY^fYT|S(8J96f`cTs;V6ndysTv~Tj|2*!`aXnmv(;_5kjW6IOog%Pp*Y}K~@2&E7`iz)GHo;0Zarm(-U6@ECBdK?`XC ztd9tNF9`xr!*Tn+KU*RLcZdOFW5{sdJX+#oAAdF$aS@3on~TiVE5rXN+5{2A(y78Z z`Z>hK^JxhDsd??y81B?}LC?=ud`LWB@Ap1@qWjyj1=B*6ef~e%fZJd1@UZh7D0CEPb84?#Le1EFx$faGP-(DaaDv=dIYuA& zn2MEVrbzQf3MTQ*f~~N=I0*q(K6^0v%RN|(mC*5RR&@+GCoy}h_Z|4XODrg}w}li^p`fOeu+JYd|C>GkQV<^sheHjOw=`l?gpE|_}3Gg@tdY!=3~ci z;aEkXhZ6;ngrDWSL_WQ}{vp1Yb9a3=y`4RP_40KptEEykrJ9jUd}xdCKJ<}x!&Z^F zG7_V5I0MAIaQSP3ry;LtXqT{Y!%f-@wK#RxM*uG_O+{Kp3Ab@TJKWPc&Du93*4h>D zc06jU%E3QMXQy`08=S^oB9&bT_ag<^dd2ZW2HJp{lNPO3JT?HWm@Xhg8f$@cQ( z$YO2{@jPvfe;|v$(|m>8V@^K8r@6l)^8kxs9FComL#?7wUN~o|X{~2~*VS0mSu#`S zg(eeP2ajC}*`=b@sec4Yq4*Le+d zE{jH-{+{{o+oLTu+!zt(j_W z1jitye2_12TFNL4uRS75Efj>RI@IV@ZjFaraxE?0}*aLm{91uCp@^wxn%*! z)ebbiB0I@!9VDouGGCo3S7_lcnK*E1*I4>gH~MuiHC`=ZllEa5NdqK65e&Mjo@3!I zm-<8TgJhu~27dtndj58UHuU)!z3YAncNt_HqTqKFpHeYdqxKYvX3@tE8jNKd(Y z)Z_Ymq`g3IO?ld9qi;&l&`Gr!MWd4zJ$^*PLuc%{c9suU(BT?ge%wCiRFSU2SLhwg{Z6hY*}D(=P)a2Ovl>U6dnmFm$;FF|i7PF*lrFBKWm zj040Zbzx^GKOLV)T$?|db>pji`0)pBRE^xzvTt`U@H308?uV>>kp=}Xs7vItYjL8{ z(!e^n>@;QjMM;;RVwCc>3HppTn4?9l#O&Tqcv{(;tCb3o0sZv83cBSVX-PPEBGPdy zi#|4N|cYJ&OnF}=68q^t_ z-onKlE}t~LThMq&|A2qUHL0lx84Gjuaqyl1)h8h;OZ`5estsC^G0M@qd;>%FAMAzR zqY@@;{L2|Jfoc3Y9qf4PLKnU%Rx6u>w|l*UB-tit7Wp?`&dX_@^^LK$mX-9LKu}i9 zM*T%5#8f94{YiOxotn@sL(WlR-_hE~=})(#0#fsE#t1QW=Q|N~&aUY)V|5v^pt$XB;-&k9F*Q`<)O=bu#NH)WhD8Pu>TqG;gFno_}M>Q9j!yg7*4&CWoxHxrUE& zR9kY@B5fq4VmlMxVIwOgMb}gR=0F5!)kUE2cvauXEPncNLi6%FcjKkElY{h+XPV`l z@*t}UnOT8j4RTz?n_p9kP=L5YcZF~9)pm!5YV{bte|-CpZ~~(SX})Bf4JaK@_wWuq z`T2UTmQ7qKrqAmbx6Hkzpql;z1I{XeC#jf-Hz~xmb6-NYM?`Qoov%;4gLGp$4yy3v zaqV^2YSXWzwIPypA663YaF^Zu`{MBIFpS4WQTh7|#P;+H*wnH@cHQPiZ+0!1>}x)S zU>BAzNXp`S;Vjg2BGYbcyUtb+N7cf;kGOA`Lomsxo1fSLAH?r`bJ(mYY9pLoGWDt$ zD)-!`BEPB9cl+8~@&iDazCdLA-sy0uRM+Zw0CPtG*#&oUaZurSW7MST#>+^S+2WO( z;VX^Q4D6=LizSv$JP3-v(Bah}F@LnujO5nL^ha;b&vq(1Qs%Q#0yzHnB##ukzuaCt z*CmibV{Uc5VI&Dd9w+hd0*AaEFtzf)U@@9+{BdsLb^r9e{kk&<4#TL!5e`TB`%L$0 ziNGg+#3W>$BU&D$rK-S&nEg6+<}c@1mX({?lxq15`4gM!-2L1QMXlL(yJ*Rk_;+q| zqNKNK>E5{C)4s`?bwvTQh%t=RP>$rn)q}|%i|`F-`W~5WPM)g_JwNsowBzuwwRbmi zf7~^5LRr#k25^_`mvLk;;j6JVax#jpuYqG2rix)1X7-h?Y?Q5fd&+<8b$+sR>&1D^c39t&+Ac%@Vm7-ef$`f6I}MNx-`sQ)}*xEBqVx2c0UmV})= z*eDovpYT;{>dR`a69LdB@;H_MNwp-}P~S?+L(1J`jn=I~ruHlBtOUuNY$adt0>=j; zeF5MXZUX^5n@574?9>GK!Ms;3vFrpcVR6L%jSBRIQwxZSf%e4g&^rbmmA0!gL@Xj- zJy2_Eous-Yd=F$K1*Q@|as`_N$Fd7aiszfVikQZK2Lreg7T!9TsuX>D- zaP1RA?x|AW0h!U;bxUzmocoP$f{Ib}<85;%Z}JwO#J8*>chGu23ih;WQyJYq{+1-F zM3ev3(CB5xH@Cq^_t(=T_7R)}_+#ldPo?|_=VqussJ#?)Lb3b7H}#y~ntmXTfGgc9 zRPRJ_tKb54YyTcj(L@sRzY`xWfqz~)t>x)xPQ$5cVy)?FhsLQw0|tS9-mmEF;z}b3 z=0)RFGPi&3YDvQ-2MqnO!S!9_^8swu)=UJ=BP}}>4*~XNel>kjlMF~yv3AK7+uv@^5BzfgKnvgI$ zFUGwGkZ{5j8*o-`A0HRabFtCRM2KQT&!b1X<1bb;RC|5@MEmY|{A ztDv1@%j>4ovku!zavU(9KuGZgoV1MR1x_afa9c|K_z>44z-PPngUA_274A|rv{O4m z8IICQ!%<_!7{@Fd#{xm&(63W~R|E@NkK>U1@RK8%NIO14WhXhF`wB*L&N5!_bHbFs zRiS+nG?@sdSTwKW!(|3p||fsFTNGV(*L1UnGcnT~_%?om(y>y-51le|L22 zedlx3v^zRiS!4Uyt#a(S^Rpa__dagbrDa#UE#)n`~@NpToCAI@Gc ze;n=2^1*vUy@2_}i(>z3i0-1O&CXR6{9uUMq8RS%(8|-kcgN;OdIng=peb%G6;OI9 zTWJMhH2PNPyUCf&krqpD|Glz19rnT7jO(ne@7oE9NUdb=lEED+W5-BOa~q%XA3V(s z!NKTZPbcku&b+ak%;4ROVG*sB+R?E*BGOhKk9tQYGGICR{iy}k2j((^)@F~Ktmg+q z=I#q-k!GJh-SRfr0f5=v8wQ zoDb_+hEQAVNQN8TMu2s60&d=iq~YOXocSLWZ^ylm*YC0c^a_lD+J`ft8C$tU|~)0n#A23<}?aEuM&HVX1)?z>j;dta=o{Oxyk z7{rmDYWKH`ROaiE!m&#Tr{#ZiXwuh-TA@6CzdYymLepU3c7E|JTASN^dJUVJpElN0 zubV#B%1l+KLjxd6?WBwhXfNN}c=1?1+U%u9OV?gyvh*wDdofP^mn9>3sjo&BT1T6$ zW>uO$_qb|n4eg)RzT|znK7#kXh)MfLeLA1?H};cKpPZ9KwISCnzu-bsz?A1Q*!h_> z7y+er9N^zs;wsW#7P)WtEwgskR(p)AaMdTftWlZ!hjm4s;k%@1E1m8%HiE`kNpk)i z^Y@Q=zv}_(Rkf0p#ZTGBQmggLLPVZYR0Nh3Alo<+v5*FwZ_^lig~@OGG;r$rA-eba z&kfrGeVY)+i@lMrGf)q+BL*$(ogFb8g~9FP{Uk=i%+X9VMQ+`@>eg@|@J#^qXUvQ}vojtSA@pj>GFA4iJibqm8x6s+Oge^?P7iWzh zw%fo6YDxW^{Z!4ry4xGyk>^=6KbMD#F68B)HaU%NGXIqooYaR|yv5BjE5pe_!?`A} z!>MSL(UjVV+V~%M=W(L#Eb*>$V-_*k8!0WHOM@hk`M4>G538(KmrQA=n|fM5?-d|G}5nGA3}Cq)0zMzCc#-_J^_v z&{A3BzP1;IdLZ|AY9AN{Y)ov=L~)zNg1#=lY&A5A^ks$DmOmKzGW%?{lp=+$qX8?{ z%0RD-D1g$0EcRr9O7(r$2$|g?;A^2&D8ECc*1~AUaXER9|2s|5e6q4@*FGe8#EojJ zG`Yo>AokpOict35x~WaOPf979>-mz8ToH`-27>`ynyw0i}9}Ct|ws4pm>u)7 zA!`itP9W-QBHvAFV%-aVUFhVlnW{e%w$wwHEk9ytk>EO*m8Uve_#tVwIL&DjaCIu} zEwC&|pI2 z$WxfQ;OynYoTv*<>=j%TJ`rRW?MYW>szPqdkuwd#Wi}P6_Wb z0yu=xKn)X~1%vSDMo}Pcm9lE0zPEgDKAp5kWb(Do~ws*ukiM)@` z{z0qkY{RKlSl%TlA@4H4DcDeW#>pEb)ezw`KgmeC66RPElq}&ZRQs8)zuy9G&|8dd z=y*1$)8*jx5kCHkC^ijc2CM9xQ+J8OdbqrUun9@Yu_Js^CnTZ^64F)p2J5u|hRsr! zF?*!-d=v3ykxY&#Bhq(1A2E4GT#6(6Vcf2f2M<2j6zxsnhI8SYid~o2@_^!09rd`q zrgzIZnxahVN*81GuDBKyN9{PwgG~x8YFEhQ1N-?blF&$V?q;LeZHud=czT;9Vy>i>mGxrILS z@p7G=-EfjW>TwM^g>1X22V)1iXPI{#&L@2#Zyv&mN14lQKmamhz(A>Wj9jzyC2IzzSf;YOy5q5$(!wvRTT8S%+IZNF`>;A&+MK)^3b>$ zSn8J(n`~5lg8t?Gldlf^b&SE1?qSGMSdX8~=%0ztKUwUMI}IQ|a)|8xzFhomb!vd3 z(}j;9V{0KLtJ0;{#`RbiWvwoFGiVfhs!&@v^HXVcCKxl*@sbiy7=VvOU!y>Iaab*N zj@9Z}(ACGe`+l-TkQBc?I({^b4GwdH;3;t>3P5~?ydv#|GH6t z=KsDhof|yEU8e<718I))>VkOHKy_+z;5F7YE-(@re26kF*Fd9zO18oEGTMV)gKH{? zF^8|JVMs#$gcgTyG2l6(6o)Tyh@})_kRFFBF(ML;kqCe;joM$%jUj=WeRL5(x86}8 z3JfdwptYTMzsc{&ls(>h6Yha8rDSiwSj7Z~Ddm;ZZW!_7Su2Y(#j6Jy%=>Kb^ zhaPdu$as$d4;l?b8{r!PgEkTmU;)7Ozk3hCV8K6AmVW~Pj~0kW69m=<@u~lb03T8$ ze9yyNjlU7-{R07~|BArf{rx?6KQICb0gi~CXbSpW(6adJOQ3N;Ps5*f*vs(o!m(*QMV>NGLQ?u|^XS`A^CS;{R>e406(tMUJVMkX=>xK#)O_{76+2pJ(Xxc|lbq;{iGv%QF5LOT-q%GUjUd>Uik+ zvTKi$aaFNEr_sn`jHytni%rBJ+h&GX7a_+1Ty2#lQq90Rq{A4iwS`DZ|4E@4q-Z^W z5}91vOx%vdhx)XRo#Kn5p5&nUMNZ0i;eg7g!cVnm)HAqGG2dAA*NY!|b}Qbfhp zxD}W;layIht+H0I-lJ|t6x3ADt+aGsX4RnfDpr^nw2mA5%^QjM`O=LNpT=t(N2~|7 zyBk)7wr4#(Q7!A*Is-T!3xh#V>d{7IqAzI(LQq%aDW@fp_;Av)<`!7&Xv%qYqBbmE z6yuAY(7F5aUN(|u_iTNA{Q-@#twyz^OFO%7SGw)wuKaquTB=*9zO`4UZxe6vkeIB) zQVtei|I{dcX%Jw6-(OJXBh_e~ARPZ?HcGS)mnb9nUqWXBHS=^pLAi-R0&m|0<=cFf z-F)Vd2ofUtziO7!f#>=$?V%3yY>Qp9_R7D586v>aiv67DL5RWVD^P+m~p z6(NZ=+1Hbcq2S8MBK@&W)O9F22fBIVignLT!ou59PkWwcDJlH={A<*Wr2~uB%B_v7 ztIMlNx7RPb7_T0RCmD!nzBgZ^2at;g(BN7=e>9K~)&C~T=s{1c3@O3q4BQIMPD18~ z!~T=vd;UE5#y5uZy2Y7c;fJ!`>fPsHO^u4o=!S|qye1kt$74|!dCt<@RBD8^?h%bO!9Q9e(j{( z{IbuoWeyXvTVIytT6R{}4iWFfY3aEsR9P6`{U9Ob!WXh`$=`OF>l@o}>}}~bQi$8lxdNu_9Vrd9UZ=k5MctsKxwwp?saU^(;lEn;THL3#^!aD&3X+Q z2Pxn*Tl|ZQ-{FP55uC*x^79wn)hM!b90XQLa+t|*#EkZbn8rDB(CeD)&3?TE1O4h} zP~w5U9P_`!6W8yv1Le_bg>DFRfuOPw70t?i@q|x|8w$`~66qia)FCn{Ox9(dv-t3S znC;!PXzx0%Mv z4x5gNt|qhJUj1=GSoZB3q5Q(6sni)hmNz`}EFAOsJqy0kXoJ!{ve_Qz8{3D0Sn5JV z?8pG3NK5$F63A+0&m=e%QW012RUSI?!38Qu=Wax2(>{Q=%mFW|2#msAS4L+cWcx7d z-RPmcF35--|)sI3v^lJCMg5H)ik5b&;e@DG zp(rI{qNEX$bZK|=qTl(m1Yba3#???nm;O4>{&2sWQLl((zvXCF-v_ukOfeb_4Mfm) zhzn!lP5GBi<%yjgM16+tN0yaNA|oF*Cq&lGYH5+TK0RP!-4I9Ta~}|Hp4Y51qXCH8 z#c!iO6GkB1l1f0?M%}5E$`ZxJ9C#A$fOjO<3|K^*PC4Qsn?^~*SzS!qM`wmBVu z{_+WbQ`~61D=s=`A7iXE1@tU?euC=L<0DT~s_jbPdkURH_}FHPI#^J_AhBHByua^{ z$9`@%0>p9Q0um2pG2;d7En7La2pWVLLM2*Db6TCI!jOEUx`E<#&0|!SViK;_4Wm{N)fFV@`pH%v)H)1^J3UTpOU(4~9y82Yls&!) zBj@O+zHD3?L9atb+CymXq0Y^qS5m-DGcm=FSLNu8@$@IRg-oJT1}C;=5H<>?al^S8 z^!M!z2m9zb-t+vBEN19nNR31N^uWkXQsI5H23b$f(L_OHm3?^l-acb|RMdKWwg zJkzY%|M38mHGLetcS+e479OyeGtckip*#v!1cFJBmN@5eE|YJA*N8pb4QyVZO`$E& zY^~8CcDNB}x!P$^Q2damx|D^-s=!UbSYAo75v4e8&wwnrPf#em(k_hMQo@?9)hQ#R zu1Zs{a303~;4a`$-J&sqF~r@}QzNRY`fALEeUq3e@>ufe=Td!>W;HrEf2DJAI-nQe z4n&_3|B_)pE?F8x8O1J06p5kQin0pJ< zZ67xjjFHsuUOM>|fq#ySh-WLn4wP%i6|%UOht!GdK>1J+$T#r;$N$0+n;no{?-9|4 zqu?kD3qe>^n*aCN5#xX;lmXy`E~63!SWV2Cs~FW>;g%DbAbh~7t-)cdt5vK0_HEQ= zomo(FkbrjguDz@MMp?UJ2Xno9=3Gl~I(i?&Q15lU@AcUCh?w?0CFzLSh0)Xqpzp#W zvc-s#V*QgQ&|oFAz6MhCrvNUp2E^Fo0)FpAe8e~JQIMFhyqHjhm@sR*&Jt_}I@CdI zsRe{F&fwC;_K~=BG4NAcnshjKc-2c}Q#nNpSk}WL&*0xzMxdeJ8eRgLNW?$HDmudD zQe9ebBLCD2G^No+NEnpVkXDqC?(m^|k*i!PXT{a(OEaSU|xf(Z3Ir z^kB6$ltlY4bCV%_@E9rb4jk-#ORI=zg?6SUSByog`4ucB*)-?HBOXaDQ5c0pdsacf zHIIC;_^!G629tN{q}+SQ>)P@tI;&PjN3bQwQ8?H4jeXF08r$4*NJUDeYVFq_^mUf* zu9j~FSE}ByZUKbS5niNor5d0$XhgbmkUt<3Z=zuz<{{4s;qincxx0w#=!jwMV2Hkd zRKY5#kNO5}n%ZefX-1-_fS54&K#M#63iYfUO*2V4)dsuA#vi%87|!sBc+AB#3Kl#t zdGzlmq|&2ctUw43;w&NY450$2(kM-e-G&aVziJrp=AHVcM zH$?o#Y>S!SOH;`vm*w|}Eo%qY`W@%UA>rI>*Idqo2dW`3u;7M8r~gHKe>w_Q=>|cu zpti%cN~fT01q4?;Lr5w#kCzKTAVka$eE0z%(LAc$pb(otpE??H1mY`G?$-0_`5<$0 zcI^71aC9xJHbo()Y(2!wZac;`V=_t1=i{E`H}#VeSH+QcYg4Z7JF7oj6i2S_^yQn> zRclU_zRBcKl){x{Ir$$^0B#b^VfdIr_Ys{;Dh+y(fP4x?k+R% zXH|WwS6t10sNY;qA#EmO?v}8ygGs7?pBrh9d_;o>V;~<=U`Zy6b*`h@Vvkk6b!7b_ zF+L!XIrT|G-En6-@sd?+P&9BAv#^>_B|eUt;Y#Y*zL=j*I%xbVuE}@K+@sq-y&Tlr zb?zS`(U@dm0w!*B$Pa zA;>l%K@*WUwcBi{o7jYx;V##xx+s9HCsL?>U&8NK$P%buNbUCR=CI1FP-l`EtdQ@L zD!IWz0tTT53;uq3!5jNWTnfq2Lvcas5Dds@V4WiwM=AO{D&Z%-`4yB_qs4n(?hSvv zILGw$<5~A-@(Kl>n~H_FG9J9ZvgKL!$n%u6?^{TGvYl*DvvKp?=>h*Dy8r|6iP+i_ zM1I(x03vIh%Y=y&0eCBiG%$g|J5jDpIw(HJNXOiy24~5OR9*IXI^&6!RbG9x^(3Z; z?SwTUfx(`^0>3W- zOOO2WG_(X6N?o|A_$W~cM&^O3a>n^dAwRROnEK97=ghm9%q%Fo{WY|S`~&xz!zN;i zDFlg19uFA`6DshiQ_V70{U|t6gf|#vWEHrg>kUk`_P5S_7D0m-HY*0>@)|z9H8h7j z{)ugP_k!o_A>zO;Df-a-4)t`H+*j$aCK8xse2(E{JNb(A8RspfJG^i5J z*lQ-hLH{tC>g7sNH}DQX+NcNXcm_8NBFqK){dmMXP_2Lfh9(ij8W=4P-aTC)P9?RV z{Ib*06sU=!|2RBJU!QqS<(TPCL5wj6WKJY$!Zk#6(f-k$|JmZ++v2wt{GS9q-S`^{ z)W376qjbpeNc|)-*&yp;sLOK#{NZ!|GFMP!VZwhyjuUuRDL{=%hr-F-KTfz6XuY-4 z)b6K(I79g4Xb4I8J9p6e+m!@6_I51j3$_p;QwiH{uc!UGH8uU(1?b00$u`7^2HK1} zns^ba>aR8Ev~;Rwk(TFVNM+&Z=W*P6t!hhAHk5)??1fvq$iDCR&kYpp z>J47|3~nn)GYUq5v0@FiKA0^ul=SZvDi(D*ZSf7EB9WbQu*Zu_K{eN&qpa zgn-jtFkmJ+X5cwg;Kum4?xt(NM2p2iS&24Ly9pqwgR? zCgZhzL>b1rJLB|Jq;1(=@*dJf^dqKltN6+F?WLD=TXSyJAFDDty4fQL2jbid zSTI|M&om}XtO+TyDPvVM5PXjbiAhT$)OSMMnPO<)MLjqorbDuTm0EGbqQ*SGPic6^ zeueP}1HJTK*+ThB2c_Q zRUnb2Pa{1-^){1Y^wi2G!AF4aZ_jPF1=pd(Om5y(7Tc(7fjrlFNSSa?9N zRBqH?c#w}{S7L-Sw7#8hqC$lyA=6^&84@U6kM3fw4KsKGS{+NV%7q-uj~ z4m3oJdy+f;+k3TpsXOEo>`-chifn@b13>B;IUcOB!y@8;HK+a?wBhOK5ly8K|AJcz zhzKkZ&}01@?s5O0cti31|Hr$1l*SKo=P!!F=T9poiZc_iObxn)3r58FWr9T^jUfyZ zU_EaR{uc$Ezu*VeYW>8YPwhYWs{tg?OO%{BQWBX`UN!{g!KJi@1tO-j7FSBjt6Q%tE8!?-8k!Tv(MB;G#X{%h?NPmzYf8a#}+4E`5# zLd;+E8*!EatO zp;9wGm3u3ODX6pfX<4c9LA80I9Q#dX@Ux@uUgGinpIwp}&=%yeE(*|*G;)I`JM5Nu z4{Z<#xq_GuYpN$Z?bs{pZwJw$lb{zYypj;yLi$cEma%>?Ur&0|a&W=gfK)qPo5%0( zC^Q4hdKh8%Ut0fDOo6688VE%LxLm~J$~ySfXx%9Ge+Zk_EG3pqO|nDk&QNz5*pO%d z@tDp@6Hjz4e@@}j`zHDX)fJ{WQHWC|{Ea(&oQYc9UiK zm|ADim?~IJ(l$PH<%OfkQEc6#)l{8s-=mB62!Llj0pP`{g7x-8qw<0Hqpgon@R&&}ALdAYGg64Jvd zVY*1kPFXYOR7+u&jsg$AE5RfZJ9`XAPs{SRw9f6H3`K+-S& zF@+maB}(vB!ikdLGvtVx`3|ll8X9B*(~K|S5Z-rzoMt}XKR3F>?!2dIpt2-PDPz*5 zAqMmmL3m)yE*}i#M)0r6{Wrl=8`>uZsBy(4)WB#&YmCMS2t-1&z=>Eh;9yea_~D31 z5A6uUM&$kuUpr)D=dSqlE`>1RE098dQ26?>tGZE~sZo`KQHg`m<*PuFdv2O>aU=_rYoPR=c-%NL(n}Pt z_Vzn}IDDhJyzGFE(13tnmRYRv!77vS!QhQxzJHV9{vm)smQmq=L2={_F7Ov)%=O^F zCqL8MkP>K(?A-=KHX~C!g>laV>3$Nm<+6qM@{7@O@j5&V!ZaD<&sI@m?B39E-(`Qp z)eLi%?#<7vBQ4CBT=x;pRU*cpVCL4h(I9svl}MF(Ep^M3OW!1U+P(T9J7!79g4&tX z5eqXI1D7~(NcbkS?D~6I%HlQM;W*k*PA(u*$Y2FI8b!bi)`Y?$pIpCR(fN;uQ5&yQ z197QW{fB(Qhm7R?r&sY0_6hm#oq8L~rj4>MzuX;w9pTZOh_a)S>W5 zznllIGd-*(B|aEb=>LuQBjL&Pq9y;iGLs?MaB)B)mC<$QT3jpqaA<)hk z=a^@h_jy&>&^7mK$@wCY!d!B&=nLQPYi@sI58eNopn9#p+#MI+&py!@n*U(`XP4yv z(I<+82Lut28Ufjq(tzXWziiyI-FAmbbX3aB3)Qv2iLNRb$YPIaKh zy+q>qL2YzByL^46PHC))Df=Z)2!0Dq}$oEi5cW$ zblY_sMv0c@2NE-CM_VJ=Bi|vvlQI?!!UX8v6Ozs=l>qDj-hR?0H+{PoFOR?kVEbM9=ppAbcb9d;qzlXCepXQl@t;_!qFGHf~vdOB~1v5}BEZhJGQI{&xXn7a3a z4jeje_?llm#?$xI09b>D#TB^zik|-_68(`g*F&k1#-C|37hEJ1{EmYEumz=t|C1Z- zVe%a#?{sXniQ@3y2GRA3pQ)X`!3sXOSN~7|Fot80NxozRTpj|E z?p7i5F9EUZHvy?_aG|sJ_u}nPngAq0IwE~J1p?h&cC}wFBa?9ZA*_T^FQxuCLazFB zc7G4Lg|59=2_IokB!P)(MJI-j+USGu{xS0VXGkaYXgwMUJ!PCk zoXk37gI$*8DK8QHXgFd1*t z1j4(^F(w&52`0>^7K3l>-3OPTxLJ*{J4UZ|f@e_ZrYN9;>S>HEt~M+z+gj20nU3ZUd3 zQrQSqtNrrRuorl04oT-6`^IN7el`UcTlIOe*T7}|r>n4#g2j0LMcVw=J_8||{6ny! z$5{k)BZB|oGk*H({QsU|U>sv$Kny+FF-5*x^kAzor^Bo64f#l$i2yAgAn4<4!zS))Bj_v)+0+c_V*R_>@- zA8A_YVRn`Y*U8IAZv?}9_rxo(mDo%1Nn@=0DoggV7b?dnwVl7_^^6y4HhwFc2yy(~0D zEML+#toSfo9qNMEQ0LK2-M{b{Rz;5=7V8rHeHUXs`UlZR{ImU(UVwOfBu9=62oC(U zPY?+aqvF<(p0UUd;MUL6J?dk~5^3EKCF#vkX(1IPnE1jdUeNv~F^d0Gl7kZM_NCx6 zkc#^EesuMB4Khg;+fIJj>OC2VjU{+<&1)1OWfXQ7#7|^#)IfTo>XmnSgmc!x^_Y`x z4{J;O;m_G2XNlMY$ynJKA*oHuJg`(;|MDXDf z5iLS#2iCfPMaKR`Q!?*g%@lu?IQ!{vgynGl(M&N)vtavifGWTlJ>i8Ot$5`n_lRoE ztdB&3MzY!KUf0;8(1-$BgRs8sNb{Ia*?1A3(kn@($-U-th@%I;Cp74~hRah`SD>Jk zE!pwzW_FUHh#_^>-v@P|N2-fi%V>J_DIHN%W~{iky49)y^MZ7?st8#T@|;n$fE^z; zQIXiksze5wtN;zAPGRC57FzYNK!8Q%1pY-Qz^FL1(~kh@P?rMD0mNT*fKbm%=w$WJ zGY%PFDBj6#;|ewPq|}C_$5CI2^-~Mxj1m#3cPetQL~P@&QWlQH$GEw)8drcs;*>!1 zj!}7Y6DLPaCaDKH-Ho}XN}o`*CE`fmI=a_0u~$O z|NThvPyeX+HxDs2rTOU~<^Mwl$)T(qAPx1BzJv;q3Yv|lS@4;J{yzUaxps4ZPfD_L zfA0XHYd5*YgnG+k%yUp+2bRJY?tXt1nyMiD7q>L{OzD*hM&c=x#o^r@HX$P8jr z5Y!E9BIu6-ui&DMWO0y<5X3V}?%}wwl1h+C{}R>pk)-osApnb7{tFKQJ>v0)to+ME z>={7#{qSrty8qD)k(m1CJ5*NIYm}CwhzZA_#yC(0FI$pyuYF2I5(@!K!+rM^S!OzA zM!T_a@8*&HSVSWux=He)H5V$bLb5oD*WQd;t|ory5utaaMtYP+Bddyz?U9A!2kag8QwffP+L?vxChR{XOt%|Cs z;u4u-@+z9)3YF#x3_zgH;D2@O|C`96JlcT79NY9LnqOEz+O+*+}P zuKND^tZOKFPC}n2nhdzDM57MLV%U7pFC|<4Yg{ch?~h#UgAO zh%=1cg^9zC-GzZ;i{0ayL97jx?}`M#g7x#La|h9NQ$CT6yfK z&WLIk+0J@EoY?k(kA)ZK&$5qON6k*1ir$Q(rRSP{&oz(fnR8UL!Ms+*Zb)wEqc+%+ zfbmiW56ma)z`yVM|8{tA#xz{N)Gt27;|_zkM}L?8s##K6k=0%+E>7y^6_oHKDK4_K zKZfi7r<_>@&8__N?)*iN71iF=U9Q5YfN zVGbkHAou}=qXB3T6wh2haESx-j~=$=QKgkUhf1k`C8)Hbu$Mnf{`mVDxAtf?TA&dQ z@?liy647GrKGX|X#Rqcr)0VuYh0h}+j|>cjP=EJMRH2}F;W{XGc9Xlbk9>dsaI>N7 zQ!qQ(XSTkg#28&ygR~4i>R94TWXt`2r%wh0L?cGZ7hhMSH+G#x84`09xE;%X&$X;9IZ*JKS-xrPF9Jx79f21bd-lK>WLTK=WfAT z5-05wr0{O!+!b*;+WQW3|0lQb%-dFOi?=Y`gdp|zPm)d%>Wr3w>8b-{_a06%;Ydx78p&kvG>f z44FU7k+gSAT!9nEL{q4M1pzFsDERvhgLmMgeJ6+{WEmg)=sI~G&WC?o2umWIF`ilO z%pUENRu){(Tx59VGRkT2eXLT%WJWf;Yd2(PvxZ_@&gqPAH2?I);?_abbWjiEc|gV>AYmsY1ri@PykbL z7Zxh8m?X5)^zX}M0K5kfvywQIe(ip9v$p^uaB%;BsPrF_YN>2s)bcLJ*Ft_WHoW4;6Sh|{FvhKfT#P`Sb1 z$c?!IdFSd?@NR(DFaMzFD?I|kWIyY--6c30gCp%06eOd0L?qu-U^Gd`+9d<9DdDfz2|SUk>DdEE!Ei(d+6 zR*y5+zm_LZ)O|C~)&xDHNYLY@Qt{Ag^W}MoqDk`OyD(CVd_L>dXRFoEz8_I}u%;r8 zE#ao--jD@9;>>A4>@x5G>P)MBgkwd|#Q+=t<}n(^8#=H_fNz>*=#`=SyBozSkC|1b2HK9Yf~isDoK+P-PGB3^Vqf>@&9Pj6Lg&eF@pJ z6tX3i5E5C&5+Qp?NY>JhRFrCLQ6ws5DcPe`mXdYmyGM9>p6>5`=zV{`@B2gjJLh$s z_jMiDc^>C+VE2SnCS<-o^?>@*d1VEB^nOJMdh*Qx4L+uxjsRu9srL?S4M3pdR(Qhe zSgPEbbS;wj3hRIh;8L*&#{EU6ssPAT2=nZ}BdWU8o$vMdd(G=mS*PlK`*-O|;EZpn-;r-*L5PmR74 zYzsiHFEEb1{lR!=4Mg0Bs3~adp&l6R=nK?ayt&6ay!nCWcym}I4%?j^If!7~)`H$Z z){UyVU~g*`u-YR~klO5dAiREg^0NxP^d%o7m&P#N29!D8*6T{pxRqwHbA68Utu82j%=5E8zj{Avmr*Yv)(6^ZOcph{+;xdupW9LLxgm>^Jn)|j$E#@ht6Kky4wEZE$nz|&peqj8N)p6_JSD$ z*b;yN$1QMNOygGv3iO)IQ%(2{oXrNLY4k5E{VfG3KXvY)ZtjkntoC%937_tN{z3jW z3V=3Fsp1pqgS@+$9FkS}K5*N>nTu^^MlP3eTO|2B=<&OVd&7KxMgD+E1K7GhsQF)+N6i*-@t#&LmxLQy$1^y z3@&a#I>fY1jRY6r1FIQ-@;pn+&ZcB?*|fhU{Db&C_5zuE8DB$PU8mWI>I7$nDILFq z^-;2P8oePw_1|N3d0#&=O6Qsz7Jgy&&`q0Jb99pd}A)sw9!V zoo0<=vN}TXWz18>IN7;Iucex4aAjzP;gOy6NP?WW4z*ro$>C&%4DleP2?d8QcHFE6 z>C{b1RibUlPS1bP={?wIm0VP4W!A%Ks+0PyK%?5_v0J0tMIHJB| zE*aCN;or)qzRVeJm#yZTY%hOlFfy!>*PE7aibnCQ<}I+O!I0sO&Cf>cZhr)@^?QTYaxj8}s<5?c&y@qA1McS890e&Ak)e{V=XA(}|I&eIG$hPf=usn;d1`f}6 z>TMG_i0m5`s@nrVISrL2DI#fP5-ix$m!2cnAsG=! z6(Ekf^Mbaz%kl{M_+oL{Cm#FVpl+Ka&CzU7{ec!ruw~#wuQ2y;ak(`kdWk2i* zevOIHCvRFm8=k1l@zXx>xbNgJ@2EWd5VnV-P%%z-Or0*Fqrd`w`vhXF`H~+MF}Oz8 zX{Y;sI~Bdlns=;U3rv~EdC}s7gO1;PY_3rE^$5!Ymm|VXMY^33DOiX4CB-nPdaOOj zQ&JJ282r87K z2^kqZa@7knRf`dM#ox-<=MjQ$EV4__61_-BtZyIpd-%mdXjWE?RqQ(J6UE+)h*3Pv zz?VxAqNg6YJiJ_BrE?el68{YAQ81%#?on4kHf8L5y(Ktz{PX;qhUrVgH=~rD+H=*e zHek#orKe!3^co=0SrO1w`#lr3@OnJ9-hv|0*rzGmDFUE+WkOn}zZ4Y&*I4ZJs_y(1 zN6*+!PL2@Ile=Nu&+706Lw9+oe_xpFOj#l zi#L4CjD06Td+989bicv9BvGZVq*tB`30Xl>X?tAd?0Jn@u3PqYZc{SW2T==B1oK3a z-NLG@Jt$%ZGg)a~PBO`fpyOpreqB%;|POHYhL-2OgnZ)UGj5j`BB+Oa^UvugU zSvs^=*v;bmrChP=7v7xxt|M?uG(E4q5lJ`gAl5IGAQInqzHwBbsVgh+hu+t8FlDLu}}ycZQlU)t$<<3EwI1WpBQL> zJN6h(y*>6P(J$5mtC{^b>ew&{b?k3UneP|^5n8v11WNE)Q?Ox#2V*FHIf9p*p&U7Y zsDl&W!Hn*y2g(uJYH+nXstc+MTnk(wsB2e=w!~&a$}(aOu{N1P2UoHOixdnhZb9-# zv4w;eSjmC$2FYa)A7=v9TcOkBTFi0OYh$^r)~u4+l{QWi=ijt2xo$&O-_t)G+?F_b zY$d`WeLHj^tT!kKd+^TTi(;R6A5$ez7{$BJ1X~DMsq#MG%R234$d|w*rQv6rok;mb zk2)*dv;4c2#NJOB({S5s?LG;+RhBF~Or~d=*kp3peQ(^JZMdQu%P4SvKcvv{VroSe zP06+SbnS-IZK*oXy3SJ0(W*ualYf|pGh3Qwf~^J^lH9_mi`0_}Qeh!x@IKY?Cm-Fv zuw*OgUEfJ_JBpM1JdZ9TX;?e2YWmr|1+Fld8vB(bv7_^`#60JYvw}08o)oZjx89{7 zZO-1gUaypQOe`_3dUCq5wN-cfIAOkX+9sdN;dVTIlOGBGFaTisq>& zrzLBNO+f2({1sXa?oUC00v~6Fh^6pTM>~rgjR*TKs6G8yUdXfG^g~`HO->H#h}Mq* z#}Sn|oguH@gPn&uDd_~&7NVRxBBO7^)LfFY-IRqMu)TYJw^zAd=PBclh`rGU%dlQ! z<)>glgFr{QElkEKwrQBHj@2Fjqz$;d@$D4OZaxCK(WQ(f)!3*6G7DibE5Qal`*3(t}ICpUHg~kr;i0T=v==V(AMuC*m^pn|H%PIRj!qkF^L@35vT40 zBOWVav`q}(wv+v?AEBK^UaOr{7 zE(QvXmq_P6n>4WX0Yj8qcw8y2i^=SgWC!M-0;LOb8zo)YrVu}cod6vSPm%2dP3j5f zODlFVaoFCPnPHtZeI7Whc}ji2%)RD-3g47c5v=L;b$*d}+>tqjwiZd1JMI^~Mb12% z4^aQwLi<55xg{}}?P&EyueJ_l6poEiY)>+COi%%ekddS-n@ol}+XLbRb?{u>u2=vS46Rar6BB z^=o0ZIV-sHCwmfg1acBfEtIx4mq0%Pa26tr{)5==9E`{@k0JN~jTj=75m$y7x<`D5 zAuJytcO64w2+(OH@Ly#06k-NdJcN9kY2jf-I|FyT z{WiO7yY#(cHhmIh#)HI#JVh6*DN}G>exD~huu(T0_ET^>LOO$6troQZH zdZvASfG*06UV!pvf%&05a+I%-!94CPt0oyvduBmlZ-L%{;TGO@9w%OP)bO1=znZs& z-<;{Q?a{f_@Zr1jCm#AZKYd5-W*ZdXxobeenx(YLGR7|9=6qZ}8|$HuhOb!l&vP-5 z?SxD1M3@G=ew3V~$6Q69v&YobSbSoE_ch<#6e65M9qjA}X61iJ$6H|J0Gd%iKc3_9 zbPm1H*B9I^A!Mxv<_;(=6L(TWK0CXtIC@{MRvbJ|OZ^^|8(#ttH9oL|QkK6=Fz54PuEm`{20x1VAgNzoW!xAp~i`fcNjTq0*Tw$1}MYHHczBhG+O z3$!>_i!aGwLNH*mBckcTAa}b;jdHHpt32i$ik^&DQSD-{%Vtu~$R+~>lv4c~k<4O; zQ|zVv9V>Iy1(J7n8e7-|7>cPB-H79UP1S5VStF)?SMT|em!TX)TJ5j;X4$IFW&v#p z$$jIkx<{%B(Nm+Bpxz+^(Fmm-5p`s>wAi;~HxvND;vZW2>0sf50l_VVzkar%VXkg8 z6zhkZo6bL(C)}XSlOli|j+I)S4ws{)kPD<`3;a%t!FT5mM)P7C5GvvN9N{PthWa*! z$w~ZtL=qk2n{s3sbdY*3Hi4QDi$pC)KN@UcSkR}u;}dRfgo5F$c!&u{JcHa4Of3O?vUw?ltbP& z)`L+%-JGc_NQEEKm7zr6vzPV~d8SG4u{`QA2f0u9xP3@odml&pn6!yXez`Dqd-|bs zQHGF__vU1}%z?)`USNv#_nxgNm0(wq2P~51bs(>h9{PZFD-*FGOV?S4rvI2`jiSwZHBcPVzx)UR?h0r!YV@BZPF zZF`IKyvFdi=%*ACr*^S08py`Sc=igtDmt{=vzVG_v2e9uCB2}Z@er?iAC>`c?CKtx!j-Zrckre4f0A_3ns%WtaX`ZUg$;9eX$uh zeceay{N7Tl3QvKU=MsdF)~=$rzU`mlM_JD9B}k6v5*#((tMKfyzB|%i^ENdkU$SN{ z<~io9jNkW9$uxd+IMzHQpu#f8ZmvOoCA};*V9ZwSWeCSPO2IY_vI$5wUkiCTv`iHb z<2aMrX#JutZX(G&JtjD?+>z~S`_=kSl;4>;>8rV*pZA_9#ssnIUIAN*{}LUVwgaVi zbKuFa6DX<#?{rowNbyOe126*X_C59-fYe}zr@=R=q|$Og8=y#2Gu+QV=iHDJh9`t2 zFzBh^*_BjS3WN0dCp6zX2k~DqODw{iPv}DUpTuaMY0Ccm zZ86z3IO8t->!EGFDUpwD^rbQ^sP<=R+v|O0;l^}c;87wd#+lY@O{r`4?a{k*1N=pj| zD0|qrX#`B3G0fSSh({442Z@NsM23R#B^Z1ThH7NcqC*KWXwjnF8T134tr7Z)&fgG; z&W~XhE5uk}vIb~6uFa**T+(m?ix#AuC?~sl+JRJ(#vzz2W6XtaZS*rfmk(s|bIqrZ z3j6Z3ut$~{GdTdyrX515W;8X~$wh)?*8J+6<)?3E|Ip|+nf+Wnnt$LSXHZVC{LB(o zgzGrhT)HN|d&J|fe~^zOToW>b5G(M7k9t>@#7XBVrU zWJu>szS+Ly?%%KW3KL7V z8OdcRWVtnNOK$dzP2WB@;yY$vcSvG7yNmgVO_MQjuf%tGX`GGQEq&jxUSnGg<857U zgOTGh)c11a%JOse*s9TSG}jmPc2(0l9a)emf>a{5^Dwo@a&FEzR9RtUQP02$g$MEd&H@t!$D3bx>qN^0>pi&gs_G2i z@owLp+-8c$S)2~_n!5^R)^5{3t@z#FlEsYnvdj~sQMdjhKO`(yzCsUM>f|5#(k6C_dXtb|U-wsHU zR40KdwS6PjMQB>&mu@EI35DcJgMznFaj>{1<)+-B2h;8&rzVd!>O31xg*`i9syrh| zr9re{L$v2)hi0-}zj$ zTU%|BjM;G4AlO=fK+>%cJ*1v#cmrP##lQiJYYIsz12qtPB4e?_HFDhq8lf`LB5Nby zQYq2twxoaDkFuR&a`3LGl%KN*!5rG*mYbxxw(Vg z4zw#=*;%j$bw_JP!uxvd@p`J16Ye3ep0VBjHfLwLeEy7NH6>D4I{TRKmFSedqc-=r zpxI7=JQt6gxG|0;zTUaJ4{UkBAgjveA1nY%l61IG45YC}9`u6(M{v%Cq&QQuU#E;{ zjQpzJ;w45X#cV0<5lT_$eY3GYM%;N!o)mK?g;Fn&sV)ZTP56&nh(7z^`&dZl_|6vw z$DhdF>si(Mf9I|tVrJEQ^gxQe@$36sz4wy6-i;&^0+L@}H{TO~&;00ag`;9QWRt3h zOCRlMimWH8WFf4Q2V`Dz!S>rFxx9HmUF{uL*_>Iu?Yq^Znny+hD%Fqyfd;y8Xo{-N z5wIlzMXsBFx9?6~&6t=Ax0{S#&Qs>o;1^Gki>J<~`7%*mVP#@7GJ;0YyCjblw=rdT z)12OK>JXtB)>ND3;WXX({8ZjdTnOj33+gQk%EcNQ4H<|gqR0K>gGOVyv;61w$34l| z7pk5|Xfd&sZ*OT^5E%~88O@7?cksonu(9kbrgn1GDi-!L7PvaXCUwtyH}k$sA@jh* zmQ&pQP!^~-)vcI^DvigY$+sn{wV(g;%>Mw&&oiS*qxNS0?p|Z;3!5s4l<}UIFzaDU zaj=yE!K`xV&3FH#+BeFa6)zN8>D0GHeBWhQR?ZrAlJqSx?$$mhz*IHKcO<3Kz;~kF zm7|$;->gT;kKVpqj|R5))5o5D&atIK9#ZWTz82IaeRd`7j>dwrx6;T3h3)S#vu_rb z&MeQ3MjoC~3%^;jSPHyQfAk~k})6S2PWR6IPzJw8|apuvCf6-@gJA+Mhrq+`9>3g7-rm-h^h)L2a zPPOMYo0B5$$0JN4qBC2O``OCLVyYD8es0w?qtPoW$>E(}4E6L5J=-p zg1usA){`n8>}Kb4S)4Oc&#u^3@a{asCxDBb?%uAG3}?Huc%(RekH6)SF_=YMSUgLx zjop{>HN(#$&M-iL?U)+YqlM!M+0I)DHs2_kWmKfVmH^~Z-iprE#uC_(1Km*osQ^px zlH#XkIHe6q=IXF|FJF_O-5&Czm8VOmt}MvU5_a$kTfNSkMh^>(8a)otIUrXM~t!-Yf0LC6nnl&-O)H*W^_2?>>6O&gY3uDA}F?m;!c?QB8N3uFSXh{<62fKE+ zpvKAoDEEiyYOEEcS;x;8`)`*QEQn;=wh+A42DH{pz)}Tb6Kc|!Ng}s z4Bsf5By~^_VxP;``Nm+ew)$<36>5IG-Ph92dW~uKoTLC40+FT<^6D!NmLDzOOHUW~ z!cd`_Wq*2nNm52tRKIS+*#bnTX+<`&E~@fCN|W_lkvS8!W3N6_Kj_lF8z8^X_vpf+ zT9P_V?U0P}VMP!VHAO(e`M11RS%1iGf@r@{^ifzQ`u zPbj1SpQ)74QIQf3yZ*Lz@9e~vWK?qG~X`rkh{`{de$YCc;)oY zw>N$i-}6(9wzYNnls2hgvjZ@Aw$9~xIV>y}cAA!sK3qVfe(YdJVrO#!=gK|#-T;x@ zC*!gWk`_Ak7MQEi41`L0wk7x+1Z%``wjU-7JKUG+Qe53vyC;_)`8qWe-y&1 z%os_6@~7~YTow7xT>ERD!%!lfot+Vb z2wK`U^m1fmB-2STIZ6*o&FFzxXL-uFbKGljW`xKe28mMvw9mD9mifl9@H5%|+Nw&( zKesAT^54$|U?dl4UJ-E4&g8Cv=x{uq2!uq0Fe;~>8jY-e7+FZbbd2Dz%ZP+XuT&00 z`fITcvvuCEdrTuXfn|MK;gH3cHIby*7~N^GctL6zvVSr{@xO`pI|7K72pPg)moG#X z^2Kp}K&y~J1on4{hycd1Fle;4Y#bdk>`7!->OswxBUt6Ax72>}-Jh|T zh~@e7?HOP{8w{mvp(k2kd8vamOxafqx937b^~u74`n{9V$i zTlSUwvJal_6DPWm7bb^QgbKB;ExBs2VkFpa2g4YDP#;8FpaJ1QV4!dJ`iduTigMUT z3IBb`|4kUgkCxV1lA*M)8k<~GsGt03@Iu~lF+xl10I&wfbO{(B8;j~yl9hvVp(Yk^%l5(OI zNjWh}JvvNhC2|qL=t;y9plXaW$W)B^`>6|q$X_+<92*6}c#nX-_x}jv{a2cGfwbQN z$zf+evMzaDvMz?5Ya7_gg8>D_&DS+HGUtDD%K~>O9WCu70+o$C85tVP=n>%@g1Q46 zQbpZ>l8)$T()CIjVWY%AxTYcZWzm9D95DGP6E}P{ByLS$%;F9BMGFQfwonP(2=(W2 zwysh4$H!Sj-3hoFd=g^CyH@0tO$>>>>9`5yH=f*0GR5rJJo%rJCErV=B76D^iVk{d^}Zp=-E zlu05$(hk6JzkMfvq|t4;Dzs;_A+$$2v2^6OHda;$_(>yy!-@!NKxxA0BTS{%HiYq@ zayi(K2ffb!U_-1(KfV&s3bb9jT*yd>P5YPYJP`nFtR$ttUo}uLmr-;D##t4s(*QyUB_FyFQ~eT64Z(c@U{a z2CbR5pqquE2P?GbH!ZV%`wce+(zx z4i^8=)kXa}f>;-IKC&?O5mbU8_#Qu{lMjsr#_fsIz#j%pJ0u@o?uLT9y=+}Bh=rc) zK`sNbUQ;j$4{y;823T^iQ!H47AXm5?dh^eK{V5vBfHPqX!UAQgm5la>`ZA+3(&p0) zD_&Sypu`JGAX=x&Q?hdLOrn5OM01o4S;EcW;UB>lUmm^`mUR2-brZGtKzT>u+EE1^ zj>9rxW?9^PtX>{D9$wqydRQ^{-t)fpf zsSYZHzCEGZxadW6ZVQHxLU{{r|7}*DQrALsu-cN2uafO8Ws_zwvPf-3 zy4o_0ZOoNZpJE?K`__Ctj~rm<+onFM<^-`j1GYjSAVF>m&vN0`HA9UGOS>FECA(XdCzmWctKP%s#UkrCdfVP!5A*=?)@)5HKX}A=O%gHPc9TU z_ykDp3=DJZe>AnDFwEsmQJAP=??f67N6_r#yYQu2CuHbNa-VXZnMpy^v?)(?@=jLP zySgqrx0kqwDpGg9u*`FbA0l&WaSnxBa$>JTk_)V=Pc!GBVv!hpPxa=@(_=2xIo}p+e&qX>L>+eu z*ZmRQPx0VK&amRmP6yw!^w%CCKD)i#^E&)BMm?_-`UaZKJy6@Is0j(C+YiP!1ZFdT zyL+}`HEY_oCP|qFOkuQfSI?5&JARib*B6-Ev!&cqy6V};Dw*Y=iX7%^s?~CGK@L6@ zi`^^ZM9rxgK9A$T9d&Z_t7E&6IjQknB3yc!F0AfU?$W{F6HWW0y`MeA9+!VTp0k$_ zL=4rsTYGdqd>{#&yGt=#|up>zX zs33dUUFVl#Cm+V56swqBSOh(n$*xn3;OAJ3X=D!;x?TA^yxr5w|24XbS)pZK;+%V6 z(7OQ*0@>mX`*E;b0)tFjm~H*XvAbryvdLo?&^Z59JB$DWo=`*xTVE)?Q4zyfT@)2L zXg~+|Sav=Ybq>=lkH(~)8XywuvVjLKe1|6fJst<4tdpd?L3Abp53428@$A1=H4~|} z90my&Out=r3ry5s!xh}PW&S`ADu#5MkTh50h(L{r5jo&9fCB=eZ)`)(b8}QUr|yuq zPFjYB7iaXzUq?&ZlJlL0%-1rx+d!?iCLnRF`E!LH;rWmkTa@0qM9GnY0R6}==`e9a?3HUGHi z>4j|O4B_j{32*E&$tvWRua@~OA;bGn8^Zs;1*g!rcheZIk&RvityZ=NW{T#(JN43014%RgVe2Nfz~_% z2ZPBGV2z5pu0mlbf9#m7j%*7(0fq|Enu~r5J^CC8PhDCoKC)8VS%C!%1`7Y=Z2{ma zmW_#TlTcf+=QEr^5I}Nds zb3~m6+*(YgR~#vkWdIyhva*%xb{a4(2VzPjw2Tc_NyD5!f=Jul@ccR$$YM3H9`WyQFBa=IWQ?K%|ikITHVJLK4Nwg$S+ z>Ekc2JWsO;tf|j@ha@09AJUHYMO8)YjNZEpy&~xN1#B@uu;3r{H-HcIm%J7HjX-_$ z|0dm6@N_kA7lGCcftU&?v!gU|z{p@aQ1!~rww5p8$PHObQzXJ|0W1U%oc2d%Api#) zw(;o+x}lJ5zp8R_{+lW%>C@vEjOBv&@+;h5`^lfFH9_R@6#+T4-){@~&8OhT@d%Xe zfs*Q9#%4cT6&%0H<8P)_F#|{+b_1tmGfFd>7pCD$$4HDGRz(q-r!Fio=&S(xX|#US zz_Xqd?urw-plMBoNzqW<(Yeinc{2K#LlBdmrmaFa{bOQv8|crIZbllA=hM^Y(ML3 z-@`-lRC0XS6WWhm@C+Rgc=ICG^iw6~y|yJ)j8H}$O@2ozt@AiOom?>&4RkBh>pQr!-d-V z6Y*`Qn6jBpA^`^rN?h!atLP25>tXZ_oHK5KhzJ%PL(D9!H%Qq-td4?34Te#GqUe_I zbD%^GoH{@wc-7!r%q`WY z%w+&EjGSyEp)7s+N9{o zv}h>?dQgUk#wfp$w>{Tx>D_O{vC4{(WQIa9Bvy>eD7AL5DI+EM5X;T5BPzVjoFU2P z`uXJEu=8RzEl$PK^deVSYNVPI-ZESH9c&`Wh}>{`&RH|)==|u?t8&8wx=twZhIeC~ z4P!0`W+BvFeO}=m!P655k;hM@V4NihdzKA;_`GPCrIC|jJ~B?Xm}<=p7A+W>QC?@m zP|N5a^a|MThmz6vatYY4yWh>neLuCPCbfTn-+q@P)Iq%)r;P=v;q&)RB~dK2|E;@E zLTc+KjbyWc?k@1$LX$di&cNG?~sc%?`RM+OHB7Pdp?Xwp807)LI!WB`Fea$9j*ZeN}8q3H0jro7n6 zq_EAX1`4Mlk$#xi|=cX?C**Tv3bP$18?UrTXyRC@Tuyqm*=yFUN2f6nihYy z$L0MISB$LUX%z}pJ?%KbnH{LyJdp`^>8^V+K@Pc*Fu!PJa|SjUd1n zGb!6h9Sn*$-G#2)+;I4PF7m9a*rpjkGk6|@LNCG4>wqNwlQD?Wwj!v2`W6JxHgfZS z6E5Ip3G64}OQeMIYQ~!j0)LSVv$rtw_~%3@OY80k+4~MnupRks3lU){QsVvmOA*1R zCZRhB{J4k(7=}kae89&!6yLwzj2cO^asbKV9bhnQ3;r5gqvF#pHqvE7*rpe+OO}38p8@(&~J?G2aX3qUJ_NiYJ<_I64$Mj@cm+ImN zB^2b3wl2@UY|J{>;>V)WAHhNwKvqCc9U%}z7Iy-W&+18GM-k49L&jE8d>jtF9pe7+ zU9TT3Y%r9z1(|TEwg;rWM@+FI2D3D^zfhUi86nkLdt{s12Oz!MRW z=Wr%A6QfBYv2zTGxNamG3n;v*ir#66`V?{KBmSdi1lk;FNW>5roM*9P{lxe9Z~_MA zKg+OQCEw3sy$BXN7*_ie%HpcS)cUyoA303TAxU&a7iR+TLL_h8LZlr*O9LP*Y3OJ~ z^Xl-zU>wBAA*3DJ;7MSOo*}NxGgP$_AnO;|5{ohw zSjZrdOjddG6Q{=#r2u%!+I-(6RsELWYYEf*D4FOu^3|-nyY3a9xj(~XFBm%osH*;s&4K#JW?!6+iKMfQRd3$}W6(|v z|5qB5mjX?HQ?YdvgOBaS?8b?N z>w32@UD3LoEG2%w5D=}?>heBYVsR{>!*m5b^; z@2)*d_D~TJL}tlfJ^g&(yXgJ|o}IB|N7- zL+|~ds#P}b?XhRrTjNG_f?CsYrP`Ab933SyiI{y~v-C^+1Ri2p+p(1RnkLv8wa-ql z?-cKR7nBO09lrbG{nKQHh}i-?v#;N1-qYHtz^K_dH zZbtqWYI@^LQ|7;+f0~}I+^Zxlefr~>DIMNFR3Mk=a#D*y%lC=xg)twd(@Vb^5 zU|6L!F52-#InaCtgJFO2q5?|t3cJyAyZ@?=tR6kUJPsRSsglKY>`5G(p5 z8MVh=J(l?4laulnE8T>NlgxVDF(I#HKeQMS?Y^QFMYol>Ww3Z#Dv{JzC5ZDTUA+IfnKWwBb^w*~J)_r8Z15FeH(O}>N z$|DuI!vXltB7r|lgv-X6`@9SdHYf}Xxq;j%TW=e6D3UWj_Si6o#$JRnlGQk$8*z{p z*(JT=Tfi(G#!!Gh`|$VShxL~1dG%qSul~Jx)zFrJOr0mD6!IC$O<|Trp5t*-45>S& zPF;w6Gzf@u%ws8v2-BD)1QA2LON>C_*M}vB-ArA;b_onH0h45##S9y}wAzte$B1s5 z>q!1QP$I?MNF;oMGQnjYw+y(5E)ltb1~d+GvWH|KL`KPlXRwXF^+ffPDYyHPjImyYvL7E{W08>eTSsEND zz;lc+EW4Ha0ESm?sRz~y@jif$F>U|>Q?sE>hqA2T zG}qegX%QN_U{Qksp)EKYZ0sjc+5iq#V5nl9b*;2|ux9_lx=#Ez)^!Xq3CBS|5}!{2 z&1M*|Z8%6HvKwHX0-L%Vy#gCX&LLT~&kYC(=_`8@^{?JL9!VhRza)}mfe z1H6)y%P$b0FmnwHVE;|p)@Eq3o;vyez6463a^73eJjh(vHz)N(Rq6qGj5A(E zc57qGt2DVPMW_tBkK6zSId>iY-h!Byq}RhCI-mT6#ky2=>aq_8C2-b6&rie9%*x9K zF5US`Atnk>g~ek04*6%C(7!Ysd`j+I$`gZgFP@6{B&iC=`A|dz%LP2kt&@$dyUv)B z$S+N<1D9?nt#c9OzDIj=Uk067U)g=mZrh{YOkSANhl-u99#rt9k6dZ-}MWg_0RVthi-Qs5(IhGAjX75`pbSF(L0 zwU5B40R>oiV5n#d{3qViq|2677biZbToaLsBUA3-Xnc%K9AN)B@~h2y#FTz$P+j|} zR2Hvtq;gZO%Z%&AZRy5L>6ePm`aPSkJHfYTcWTh@!_#urg#25*@Ybi3Bi}>c+wESu z?SAc$%Kr5Ho>$C++zldApDA0^7VY*>@R({?^jXDAKlUNpdA-=vmo77lS=oHi1yR3^ zz8w3$U^rZj_}+W zH-%Y4gS_5m17HaXhJ_UWv;)3z%WiHC;BSP~7$S0#Sl~tg1imKe%!48xMJ_-94{&p^QjN;XTH82-zik?)2YBUr3pu<1`m zv;J#D@e!~ZTO#TZFu+?I@a)CRb8=`p55Qv?CZ91N%kScJ2M8A!vX>+n&=*b(Ep;)5 zK3{|kYkYz~#?3J<8}KD+ZC@weLY^9e2r(%EL#4l`=@tqu8<*{BkL$nM)OyD;oqJRaWD_))%x&Wtwz+;(|x^=X@ zI_8(?J1?uk*(mtP!W58A225{)aW6*g^VO*CUd&6~>a-j3dWkpCu!qF=Pwhzp2=E?5u z(iH<+2Qa*~1+fX!H7}h_Meg{0M=l&uA*ry9wmvlS;c+g%4PM5 z#iT4O1QZ>}tE3;vIaYTm(VI1J@jm;59ZqFcC4u~B_I!VNV*xO4H_FVVI8Y+qe;|*q z#m1}lc+wBK68*_TLXLDV+dFF^42k`CyNDL(QG}3`bJQV7C_$Ck!3|-g8h4O?&?V9<|-4v$|n7{lEC;$+NB$Ry$ zK-n1h90MSN&Cm@ijYy4rRL9qH%gq@v%mp7qpdIS)^8n5sM!3pW_N&6@5NLU=vFOia z+NlpvOIlwbHHZ=E)Ftefku_pd{WZ%}kj)2`zy1>%@=q@0dNpQKT*!aCFoZZbyns&~ zKh6N4YWNt2b`l3TmZO(X6>!DoaAlJv0Gf>$p!itVfn0k)(5WfC28#&{OKpL#Yx;Cm z(mQ5wRp6gw4R?)e0`LX<)dD4iq%GI|A_`6K3JBcRE*wzjo!~50_;N7EQ`I9#>wK%( zQqQRd&ePOgSpmt1#B8m*R(;`iSL9p8UMX?ZpWwTiUf>PLQZn65^+m+?yw3W}V)9aJ za!;HCqL4_ntTRHUS%0&IZU~NIdQ1%&A2B^C^JIp-^>ms;AOCHg1dZxOivDi=o3?yn zOJH@GZ?w+{wJi!9I$INZ&3VOJ&SlP(^P6 zV7LRU1yg^u&rD&*^qILk@C-%`wG;dJv}c7E3lAMM-x>Y%NjGC?pKw-f*|W_2D$#>F z$Or+ed9Y;xgJ)Z?z&Hk&KtL@x$On2vl@@Xz)b$a``@d)w?R_Fp5p&X*Up#|aTVzN4 ztsU_@qAV*a#)QY+XV~P2d!Jn^j`tYJyCdg#v6AU*8N*c!`(ZKT3aexB-Tbx{qlU-( zR*b!5zZ?|5bMuz!$N7qrBmmE-VNozoZmg{(Q$9*nc)(cc{ z$EOomwyt9&~Ln@G(d1 z%Mvy<#b4b6yXHvtX#?ZtT*XXB1Lm`UCv$CpdOC}-XlY@AwdHnCnW>X z9<|xqA5frNt!}PrmI97IfQ6V+LLdzxLX7;nWTUYZz&qA{Tm0F=@1&HJ_G8%u+I_QG zVe(Bup4&4lw4(E(>jVWhvm7CQhfAY2x3fmOYIde>~~l$(!6 z^dXM)i!4%&gA$8Z!w)^dc*z`eH+WAeBgr%hE1PT4qH-vRX~Iov$R7L zOs(Q(Y$ce#L7i(Ngag`x( zD)4>NVFC*s6cTQ}H?iMrRmk>yssP#)P`rk|o80ay4*S(rF#b#DoT!TSQ`S1g;w0B; z=b+i}3D2_T40B_c-sOuXFP#Rdj`g3R+CTB(mYVB9^BYDVL_cUGy^sXV!}!dzTE)aN z*p9FY?^R&a8bnP=oqQPGg5jUz(_JZ#VY?C0{f_^N4hDz5A+a}(sIT!8IKcMEl z$Rja%Tp!``QhN$9X5TR2^krNB-u`;~+LYr%Z3EQ%DlXWAs9q}pO_|@`23r}7Hf>)U z*Tgs+b;$`kd43x@qY(J|KfUs{3Y@b)%wi*Kt!!tv*M_nyjrWA?z<(GLf zLlm}er|h4Zj_e=#kkc=EL-JZs50CP$n^oRoZ~YxCs_$fLhcqC+UXWpZefO+`RreHN zeI$6BTmNYUHTApVS5#(f;p2<$FY7)?Ipmwu4?p2+id|zheEA11?9}5|yA1c~8w4%2PB=gMo^1+oyd7Zh=z^IOh?=0199X_= z!G|y=89*B5jJl`HQ@t9Px@pD{U^o#=4PSMf0H8C_wr7YX0MZB?%j1~z+{iB<)?No^75AS2IS+w{z;7pj ztn3!J;_D#*Pb5IR!uFR4NO~LRe&vdHpVs=C~=Q8f)GQKhA@?4_t8ol3Z z!Uzr)1lV(63r^9uQ!D5Iu%pXsVYj$*gdHLx2Y(TZ8YH6l zBL$TV2W{Wl&&-;BZe(j2K<78G`_kn3-%GpAgWQgvR~NpKt`spHL5w*NQx`s;)J{Im!KzVHp>Je2v7@jdGep@5O&d zOmdHKuFXYh;ViIV5rE3R0=(E=9@KoV*s;!u?39I!OVCFok4``(aN0@%+7 z0}We|2V4KnZAm|03Akw1RJO>dfb;2BQ71{#`D6n8^PkTrV3HV^Z~aTOB4t!49OQR{ z>W6NDk-V|&a90)`3M-wTMtN@j|7_3a{@Wli1w0VW2?tzK)ru$=VpUOf=Fw)rbS{aQ z3s6P$(cQAk&Jm2q60t?G(=dxhqz7s`dI5S8?;+Q1{Fnh4kY^;HMTDcKfmRAf)HFm5 zw$2P{&i8Kx3mgm?3`&2!@5(sJQu3_Ix?h7>`FsSn zxRi(eVoT)s=l5{sBU4>sNty?ER<0(!d`hu+$n9VesY^46mTkbUSn!yZ6LG z6cHB;qszpKQ;#ICV`k~^jk%AY(-RVP6_;+c)M{&=-_!)e20}ane(pqVzO)@LAdTPA z_sN}Q`NL#%j<};94`i5{GG#w70FCxJp?!x!<+ z(wvg@2O5^_9;DbR`e1sYb?|%%mu5;ybFc1@c}Rbt)^Wpp%gsQmx0)&HG44=z7LTc+ zX-Pm^eaGqSE47&gHq0hV2$|{!r}Kn;T?PK6mZ@-5x@ye0A2C5&ikHIxpXu;ps$`g{ z`wGm+H6b%+6PWR=f_zQnf6K}>wx_XNhtq9sasDIt)T*t=YIog;j-gHEp>Sz_;Y9I} zP=67{%-xdbrLB4i+x$lJ>F?M9{y$;|!oSB3-IrL90l(xw#Gr!zrK11@;)2*^AYzNS z4**RFC&0uX2SnfpLZBl8MZ|p}66#^lE@1*7fe<+T$bTj(2x(>$Qk>@mr2<^2)?nPX zl&j9}?ZJKDn}h%^SN;(~eS+W*NC%T3-Jtxx`j4lhfl@E+!%GMWq~-bBsSC6Z+x{{K;23 zAoRR`X@xJ941Y&O_P?$0fB6+bNBItze*qMN1j9B3G1&bBz7B!DYy$>+1CrwQHRYdA zj=YHQ7p!kN*#L{8XXr{ykKd{`J$rhZ}7DLKC}Pp5Q+lQXLtmH26j{ z=Ma%FkMD4*SR%X-^AjWQVwj8aFIZx%!q85q!vlw$aOQnJ;7Wc7M~gknG#>INnLkHK ztpG#ACJ73(Da7SYNeO{RSB4D&rvL|!D{<>yMu$wo2O#T8Ni3SXXSb3Z$bH6V!5#hHMTBQH&yC$l z^;Uj0n1N4BvP0{v4@JbV;51OM5c}FOYIM*Vp;HK-bRUpTg+~Vq5u<{=Pi9&~GagA( zu1J?L(jqmj>g*5^nH{95hgBC9O;)oVRekU{TTn)K{LvLtCN%AQtJr=x+ls>ncA2F8 zF(SIiOiNUsDa;Ah1w`rqi+n*ah?C<5D8}*|yq@8NKbklaFeF{56ghG{--J#x9^9YC3 z-*otc5D&$dF2hTR>Nm_7Q|Agn^Mjxn>1-Qki}<;BV5_{mfn>Pk#zBynK?Q)wfPn9x z5sA#>nIpB_UG2feP=oGa|hyh_;5N{$|*&KtM6ekovv3&rx`fn*Q zpN+qb-a2YUSQ*mkO_F8rrXu!z=5U?3%r1lSqRSL%d_sclW?20|2Zp*7&;+h|3&|?z z{lZiwC&<43KMn;e+dr>lyTyYfY=sdey4T2(vI&fRz%oK8pgu}Zk|q9G2bS)FrFgwl zybrBMDz(Zg{btG|06Owud>3dBtbD(Fpax&LUy;(8a3D@3``P7VL8RqP&4$oL*}f;a z`rrk)ecWm32mW3`=MBAFnQqN(g9V}eqpHP&O;C#Fl|etiDH zYhr$p-adZR9~3QMPId;kel|^}MM^?~R70zG5`qqQS-k-CeNXq7j?|0r?w`lk|9=_g zS5kxk;kiOI5H|?t>p2FN@IV-tG&7<%sH#a!^9EG6K~Mh^CDC1~Rll^DmmuD6(A_>x z{>cuKqLBw#Pl7_Dwl+K+`j9w0Mh$&Ts*a9Ta~P;;7bh%Zj3Z@r4QoMdcrjZYZ8;u9 z?yEXE<79GYcPzQ*?9|USvIwAbMZYXp{$x)7WuoP@a zJq~=dEQch2*4+*lA(Cu@ET>C?OP*YAgLz-6Y@fp}9s_3dG50;_F%4F7j6VnuX7d&z z1lscN6n}t8$Xg>=uY1gS2nkNp_f<^6Pfa9XLg3ZI>n9<3ie^}&7ZZ~K=hUNG4uc~HLSs3I0Y{X&i+P}jGe6mH7YTo z&&k93X$6B0pR)oOSNZTg91#UF2JZn`Sw(`U5z>oq{VktWv)9%{rgO zgvcMjL`32Z&Pv-l@FfJeQ!Y~o|45gFOl?;CX{}Z7z3{N8dvj5Z+^aD&PU`KY5O>1R zff>66PG?x9C6FTFC5SIO%_gRp$p};bY8&?KU2crrOS|$?VUOpZlVa@u^4f$0g8;#X zT#RoRHf&ev7*#EfqAevz`C>IFHM2>h1$p9HTN9WYf|gw z=zml98xRC z&nO4doUmcid%>fF6QnfoA6esf+S$2(lIJYzQGdAwVq}C2k){6I1f+8cf$?Mj>8>I= zDqlke%E4LpE2%~80kH7eodiqLe9=yok|tqYeFCNwyh{%P%DuXc6rZL8knSgy&?f!r z4er_IexUqF2Na;PH-YXP#WOWHxi7srfNY^qxWOw@#S;rYhM|?Ys^K^=_StXlb)Ha> z8~As7z;d_qAt`f1uzBf$J|fbR#A1TcA?4h{T-xW?!!9rNf;nG8lpsNte;Pkxe|ggV zX&xzKo6ZxMT@Sj^e<4a6>q4vSJu4y*k5C?sb*5}?In?*u@{^E*MfnxfXwKK%VLMep zYFBbw4wQMJoZ1vV)_1LGQ#$2l8)3vh4@2d9^qob^w#5c667~9FOTfsi17*Eq#L*&P zM+6|h=%R5DF{O;z$R~&>?Z5Gxe~R3SFBE<+YKZqyr_PG~XhJp}W`_g1aOQoBfr^3~ zvJTJMJWQjTgzQUK_Kkkk2e9i0}x^ptcrKOu0?(oINT&|#+XoVxHACK*tb`kcgR;mfa-yp})Q z7+(4pw5my0-RUe;Q2d0gAO>iF2pIB5Lnr`Jc(bgreD*-~JR`*SOeE*(d0iZ~g_J38MCVV~KqL_dRAdybUesr_Qm zcmZ(!4wKG4t|1D<`H(nE+UaM%3z>R#A{T*H4PJ|oEjl+LTD{~Pjb*POc_!6%6o;m8d*9h!xi9Z+*xb8d9>>Z&Irc5AUiC9sc4@~>OE;q+@p21{(8oorc z1c~zeXZZM?Ig-C#BGASz|Md|0cRA!g`j0QkA^$z(1OWjW*o20D@D~P^{-B}%P}j;3 zfqcmKCb|6p^&>$uV)>JEeK~AU z{L-~}0V1-39-;pX$TL zAt}1_xRyb&*o`Nn^;baP)bhu1??I^iOQ()6ojYH1@@2hCJB|3hHRUhwBAn_>oV7F3 z^e%WztlRqeKX{h;c)0Xa?!W6{>hLUZp9LfZu(wCpy|wT}(>_iWH~S&u+F!1U-uhN= zn4C-49Kym(pwr(dNy3g(3&3t8`nu651mpNik42v^v_!li4(72HbNH!A>a|TWi>mx| z0KMm?p!@4+m|@b_yb6OqP|`+~HNUw7gq~(?% z6T$sw2?rzC`vsvN&KFgHL4L*m^!)t2Vo>2#4odYezXP#cCf&j8FqVNLh%+Ioj+eAVAPEKT zW4jQ3%l7LzeUUulH*}>HcZH}iLO9B%>~O~p_wsHZICMsqVm>mvGrYn|PLU^tB6P9M z>^e_KJem##CQiS~-Dt%wR;XmXes6G-6IxPk25l~a)grF>Rqz@&#wBAA<4uQG-wUVv zMYUj--xwwQD=b2pV33$sB$$k;kD1$n?*;$&;ZIYH7luE<6V8fI?JJB>C-;wwltKOR zUvkI936b8Y{eAo~5ukz%kPC1Dgn$MAyW{cwou1}PYj_D6f)@5q&ue$ozs4%sbTg== z#`J`_NZ-`6{C8w{18YFfbq;#~tNXU$gga{nVk|iRrzZB`JR}>zUXXLhFb)b&j))yq z(yjgv>I#O8SiL^_5@^$O&+d&lqpu$kU6_&H?sq_}lL+K|#}p9ziq&g^h3T}1l3BdK zf}~n%UY+tIQZCh9hWaGwN4UK+kcn0;j{xfOgj>aE>!BySBb4I<*r~V0#7k>`2?_qr zDCl3`?~mwY%Jwhb!#|8pe;A_ur2zkjVJff!2tfh5kuVhgK+u%EGLTrD^%-ci1)x9~ z3m${MgAh&%B$j@LNcK+{Bfh5k1{4DDf?T8GLEoAr8P(~}D;!;HXZO-tUxItT(WmtV z*>r$j&7t913G%;MD%+yi^3|X_+{QdVG4M+SMN;<@Xi9(^yfoC9Ff3@s#DLZR%(o-+ zm7FXs@oUPa0=X~`cBr2V$kA6wbkX<1Wy0NGXl=Sm4|m-p^iMTX3Tuxu-gt}ZVhkAq zlmkoQh>B2oGeXb5@Hiwfeidm!73QHSG;^ZN@8S~Pp*D_he_|5YYFU&TWHhKAQuDGJ zA&E?J>_;UL!6${$)6?D9MG?$Z=6z`&UIcmnoMKcO|F84@=Sv9T$U=s!4E+)8&zS%n znzbx~Y0$$^myrh7BRL=~NY!T;|Dc=8iCtO+S=+@ho_m=9>8{{dK2cLlamT$yXr6++ zBNsiRL)YBPPgEyC;EE4bhSi;`)AA8NnA7uJRKP^?`*e3&#GD~0@7bthRf z&tJ^Z4feUt{{>-H&X?4LS%1R-v}X3tIg($VMtiU`Q0#D@A~eAK`!N5e$Ww8h%f5rC z+eVVNMkBCng4coPG`tY~{NbY$-!X`&)l$TG9I}I4L%vZMM}b5;U#Ik*;RhSyK?ynH zNRnxS!co1@TjnDr7>eTr?8`;;CelF7O7Md59_#ZB6J81 zDsmzc-)=zjBp*aTQx#68q-(lU!I?6rM(k(|gBeQ^gp;4oGwrdvzT0@5#O1uxux-G7 z@1>`G7plk92Jzm92Wzk@Ar`IM+)&yxi7pV5V@?d>dLEj)d2fI`h+;uSthNxNBP&Ah zrtqX4C<-J4V1ZTidOGl5eb{+*b0g#N(p`B8y>b8Z{H8GZ=K#$w^$sFZ7jP~oj)W0m zwZBI0P$l{&rsth8;}e{t6E0xr=|8hJT>+QkEGxy60u+X+oa63B+=B$Zt~@(-Ivdn~ ziq5Uq-c46%NCfHF87DiuLT}QZAWb_O8&(;+bFTO*g(?bNOLWJD|0aBQQ==Q%G-!jqV!yYj;HpN$Wuy4vtt-a#O@7uT(SshC|)K*r2OuxlB# zP#O%`NGb;FsMK*Dk5L-Eira7$+)3ET&?JSil^r37X3Cd;tMd4UFGaeLCUA)^VD$k| zv*Gv-Z2FMU>O)-s6TDJE1tvCtG3@K%*Y^(j_}I3Bh#jrX)$FbJn4zWYnn%@Cl2myq znR_ZxMOEc%^Av?pzF-xe+Eg!X%?p^3^*02`Kq}QXgTG3ITV}8kLB##ufj>@GX{XV} zvP1W}cbes>b)Ln1xN&$iWX{|BLyiU?|{g~QMEN7 zsi!koT*8vs5>uFPA0bj=p>gWn;~dqzqdhz}K}%Qi>6EUI$mMjYc^d{E&fntv{^-rs zZZPtYYhIA(@zUjZ0SmIS{_{eQIj9j2!GbCQd>vY9?GrKucg~p2 zkdUAOFJgi~Q9*;M{>yJSd-Io-ENIGh9{Fk!HH2Qsb_D1juX!rrQQA`5ZhOjj(~^i{ z%~z*H$<%t*NJJrEy)M&vRa^4KpjWVWi=u}3ZF6Gt{GsHxSGb%}o&e^xkcn!Nj8nAf zI4z=`m>#t-zk#F4S;G1p3n}*@ySN=#%T=@$$Qd-Hv4ZrBK7MeYymM(asnH-<0=n;& zr7h)?;o=-X&1PCrv|srfaY! z{7}-F?A76W8o;gP_g{%`4K zncfq%E~(fP)MH3;l9ZTRJ_yeJbYGXY9XGaH<5eH-~Kfg+|9jkYZ3zY;0<4YzpFWv;&**gyXDAZGv#1llFou zp$HwmJLgWB7}4bSr~;AA^D3Jo^rug6C=>F%`-B{S;x$Gl@};NU-(- z!g3ZoK#FJP9E_pS^d%Li7qyjtBV^de{bA57;h#dbz}^9thailegsGO6CPDU#cW*^k zP_l~E+yELyxCM1?LlAcX=up$ij{$pWd5ONALNG)k%3uca1*(M45)4+^paiH;DSIUHqP zxM!dy_kRRk*58;l^i}Hm)!oc7a;jGlBz=JJj+B9aAAs`LlkJz*El79#F(d`M|E5uM zHNp|mql?XjO`CUun!sgbFr+EtiiH@XQ#q@v@Lido3-@9(Mb|z%b(gDY<9?LG%0uLd ztH5r^Nsb5H=)2d4h>Kt}CD7t|I1wL=#Cbzzsf2^8Z`E)UTCFC=Xr^5EGwOy?``|eH^;Xco#Rhx6+_=-dS+1+uYc7|WO4Tl#m7e9n z2W{K#Gb+jypa`9jRj~tw4XB$rDLvW;mC(e|_*`gtDokf(Y7J{tVrmvZN~zB3(#(Eu z$cdwZMg9(k4d1pFc!}P~wczrogSzbU=$zKj04>d{4UwS*kdM);rq_#^0#HFq&H$a8 z8-SyuYO@n#s3azLH;V>JTT}B$VQOO|%hR8yhL#c$NbD?34y+EI_l+wKD`1#!nGga7 z0xt8-5StARW7q*K`1lxd-KUya{@w+_q)-vK+W5Znn$11<+r*(ooIj`}f%A|M z8035b155MsY0-I~Zzs(j<0EJKGiKJt67w$KOQG3{k>b^q~;IzcZSP0?Ckv@QtiKWqF799+A-#34Ylohsz z-c6QAr1W~uRx0TALgDyfC#U{duJSgcvD+$*meVS!QNq zVPtH-w|&l`T?VWN?d)?MvUoL;9pZGg0zkgn4j}OEod6e3Se@zM&;nPmNto$2eHH9l)ISnJnCWqAXa-R5 z>PapJ;N8$W1X=J3C^rT0j_kcw7rAHhRZqB+GsH3jqEiPLeD96ieV_Mecwbd;o8I&K z@m7u=;9c5#U8-~k`a@07AAVE^W^?ySpE3E~6amwFyjgA?Or9EXSGD|3Kl#_x*FQFy znBQ>aU3`O{$A3oXr82wb8q_2PdR0C1`pB?8e>$_ede`8J*p)+{=5enW(7SeyFKZ3|$#%++mr&pC8S9+#Y=c4JGyFj{91LpL1r4og$~9#xL1*p1M_DHMYLKB)=6OfK&j!;-h>_O{d(lAY$021-^J;R$QFg%%27X$cyY>$w3|VTnZ3y)>!$ zr>xq8PuKg47`Xggtr{yzeB2TPCRBm8Zj_mEtojt}SA=9jWoSy=X;C`!GT}Xa?FhVd zt}=7*dmnQ&rVZ*|?RQvV&6WxF$TlssmA1G-AJ2YsWHyk0M98!u%K&J6_ln#Maa{>` z4=XLix{v+nJ_(z{&?DC!&4)BsOZadeyHiNf;gJ+G;YE1Ne(TIEy45wgDc21fI#8@Y zICQdn^z7km$GgIQKlX8{^6VXR*Bj}j>ehAXLEBnV*fy%i>-RVMReWB(1V2{7nVGHN zmK-qE3s8p&4=WbRw{%=J+z~m! zq88-1ilyyh1T3dYaVHK`4Ex^3d;G^Eb500822ft-0K$xk?!GjRTW^^!$WS> z)?7U*Mybi+&PcPBmow`kryfR?fNy7hEf-y&N;#ip@3B1vdnE)1kb>3&M(3;%6Dafpz(`a{p;f^z>aJVDeXzo3t(>#m&#&=l_gbWM-#tf} zBYqiz%#dkBcTejdTA;f#buXvEQi`?}lkA4|y|9#eFF)9D#P?CKHjmfN)I6TaU>y@& zqRwzHv@2T_nwPheD7Z@Lr|p8t&Q6zhyXiR1dDX_7d<{|6>nP+7jBtc{$GK{FS}lF+N93QZNz|G%t(>hL4XpCeD&J*0i+`l@6tvIy7yA zbbwv#+Myz5N!CE-jKVvS@jE+d(TZ*v-_jiGB)_UlBmYW+uIiz(#$wmS|xEa+WLVdT403#AQbGOR7_q`X-rkwlxt{!q)wkb-DrZg2~?h+yEXH}h`3 zh~8Vu$Y1G9{OfDmM;4P{tMC3pc}5LiB;e%4?Sh=E3}q%(9A#>7=~%YQ`OPr~!iAY2 zv#)HT3}I*?>E29as~=nJvl(Z=Lh3dXbnijBHH+xd1U)Plio@)E-L0qknKw^sxOin0 zlAWpoo+ev`#$#9}u)Eqt`4%@$JArn?!Ykj0B?v% z!q$5RM`5*zaq?1deI@d1XVVbDbHbD{jrozSLJObo&=L^FsmAz`Ml0+{+oB~ z$7;TIZ`8y;<}HIKKRS-{+RYxR((G}d7aQ-@A;l2 zo~*@I=Pr@yVVPuXI_PafVip$FxI~u@+tKNCuGLE$I>r4E1ABp+^r$mh4o2u0Wo+@agsbu~I+NPvkh->N5JhjWscp^PR};T_A0Iqk z2)eqaCgf;ft*BJ%?otAVVADFS1R7cxCwE%jl(-E_YCV-{lmB?cqkB>B=kb{i_bApF z!X}^13|TxzFQ1UsbL!=myqyHTW-1Bbb?gY20wV5WuXU>M>3|Lte){D=y1M$+#}$1g z2Bx3PHM58z&@e5KX1eRiDBu6Mbn&P@2(#e=mS=|by{FWUit8apzCo` zE6`o+3;8=&hmK?ExNzN?#munE8|1GeqqS2fNjkf4a;nq`e|Vp|bM)leQs^TN;<0#g z)26iWIkZ)*m2Ro8)Myj8ej5MD5BG4G4esjn5O<-%?@%BlQ|RA8hSEyv_S3n{BiZmB zMdSHgL{58c`)q0SY-i_#owkBgIEUl3s!>Dew`Lr@dp@q)MXa@!sG`0AeNQ)If(3Y} zk-4f~2Q~eDUiHZVlwGtW^mt+112xla)10r$3d30}90eXe&k;^{fs?bNb>DBDM!U4> z!WI#ro1%;mWNj=J5S4Wt4un2m7AHVJ7D$-{28DKhR^k1aPsi?p6w3q2oJ|^7vTa9Z zNDyz+bfla@Zqk$3IbN?G|CM(C;gg!?Nr*Ee^o4PSfW8x@MU;4Z`uFy=MxI28^L4{F zdmTNcg(a;zMGKlxTzqb(?fGf|qw0(abGhZ@e9G<;|F!IhU$%#5zQp>}F)+jP{bh?3< zgv(XWG}oE*Df!!`kHpvq$%KZU0TJw&iTrW-&WTBZ4$diJ#j-7oC&)m}*kxB!hLI%# z{z#biugo-`wz&OAnz!}p@eNR3Et##G1h;{WWXFANepcin5303u-TyQ-QdmIfm6u|aM2+2BfQ;z~ek9i4MvrYIDydRCp`3FMNMwOg8uS_F6W=5lx5>S-9wT^sJ2z<*{a56o@a($uNTnG(SGb11*Rh;03W8i1S;!gg#F22qqJ; zd|ySXU`S5}XlXa=)hc%kQ``ChG+m;EV7uVR8KE5S?Ly}>ybP+sG0VMf0RG$HdVAN6 zsdx5WnT31Q$h9pniYr5F#Ch1-Yslyr?1Q*!e2jMMjJgpchiAquTU70y=1a!ajn0G3 z6&M?Sx7Xr{K?4VG!^?zy5%?7B6u8Uxtz3@H+^YJ+(S(*V++KYlDD}*#&)vnF%0WM% z8m+viFa^&(T|2dy_)=|i(f-p7_qCdeNI`p zct446OAVUxP!5nOd%nY%6U6Wjq{VoVm;qxE+%BmDWe?VH7;xS-r0$YlxE}x z8~+Sf_x+}j3i&;B753gVnojiR)Exu1v-{2u{8pLQ7fsv~d1k$6=KfxfoA7RxJTrYi zX^B-v-aYuH>PQrPijxaLvQN<8euhh|OeW0Xv$b3R-)7NYitZoKM?b@bcy$M_Q=VC= zZmc{WgNQDu74iiZf@*HznU0Z|&iLoa{SOq9om|5;?t;YSpoTVaf9{?2PDLs_A%!*k z)El!+JVYz8)P!e8E#8!%pRp&*NS>HjTcsA~3ZFpDYDv5+Zi;m3>$k8GK=FI-Z<_~ffKN%DR=^=``d`PG(s?zw-EowcPB3CA;_b=wU{eC+8=Ccnz{vunoMKB zD^dVRJ+ksFRI8C+!S@)fX0o1X8I=-H_Pa)9j1|rf5#J2&e1@GF?*b3%-wf~%E0lN{toDP<3ohKyOnF6`w2)P>BKAwB?mzLzr5Fo~ zqbXL1I|d0Mw?(3_2QA9-R&G|0OxoHt6w!m5s;@JJT3<+^e{llxSAR6+MCzoPiPW-r z7f&FLP5vuu~9s@;- zA%-iFx~JHQ(^#+S4UwvS1C8LH9>fS&5Z6x&uNC^=xvANs*h?gAD@E<7la-PkN#cgh zIA!anNYG3bim8pJkAn6fX7>U`Gt36*$85ClZjMCbFR2 z)p~AxptCnFA|b-Kk}U%{4am#bl4)il&F1d3AG7N-K0|IsAG4hucYL7EpR$mNs~#Z^ zH>qVg0F7d~RC=9Y2YqLOE*ah>0{6F=LpH+JI4X9j;d`f1Cel1oqh$sM)>7s%g0*)! z?8=>0I27EAypLR=vZ+91GBFSZJ^f(r+@m%8LFE8LYPs#|M}$8<`Z%SHgTUSgbk32d z5$sMs5;3;>Y7)y21O2roaJ}ojUjy(rcFn4LxygH|h;h$a$VlS9u=~y5ZE#q0mkb_h z3_7Uh=&DJYkW%b8YVQCSL(!~j>;~=9q_d}yQe5=%RGn6jwT7M+AZ*@td3A@a&}BSB ze=8Eu4GKq6iX*RFq$U)e0fY$?aaN~`#sCcM4rOzulX2uNXcGDj_qN42ia6d;9J7J1 z8?*Vu>0VjfVA6NIiUrYRBhzDzOwvUAdX#CWvh%mp`faW*SWM94hZ@ zVVY2ggb z!aojnNm7~JHXY%R_2+@;)YMgU9ljtA~o515Mz z9KHxE+&=pQJ=Q$8Shs01T$3@ZL?EsB#p|OS$%AyIgi6JB3W*W}@4W_2IU6*I_wN9+ zdBR2$Q6@sCaSazcnsXAL5SiE(lfS^G9l|;b*y{in-HvUoc5NKJQe`Bi{A{rmCY8 zJIG-%Vq0?5XGA;B&i`Pi_?)tGmZ7kBO4*ia*>N7%#sup!M>$kdc}BJ`3E5;ejx+kf z5l@E!UM?B27$<6WXMI!mG9@#Aw$>ocUgS&yo@yy^3#$OvnLl!Z5!K#XTjG-4o#c|m zj&*UN>NTGn@nxu2BAU!A%=h>zvv1{Pc0M~hazCps_+%2!VjHolr#VRO@fL;VGK_h1 zEJN?m=;b@6ZT1hA#1=lv=)9SDP5(J$I8@EYP3C&JGi;~#8$Z$r8`Q=d2%f#e$XB7B z|f3!}LyRYrj;)jI@pHMXXeCG#taMo63Ag5R8D5+&c;z;!{ zDHFDS*jr7SzPb{8*2>yWTw>CY{aNiG}8VNf*FL>{D z8Szs>is48Zekee!eVbi1>>%@$J66QIR+L#}K(Msr-!Pjj#cr*~L48(T2K%eA4$R8D!9G1ypzoNkchlg+K66QTD&zG z!ik~!(0zSfsVh&HSAEoIDNb4;CtXMVR+wOlhBuo8A+ewZ1H-HEUUT}?7S_;z21m5uWUHjk5K&Y4P& zrw#CL@Cc)EZMJ0--9i+n=3v$}7l}uqD^yK8E>3TU9Zk*Ooj+oG3(}dg7?5K~K%%X& z=N7#K>xp$TFKqadSSSBJvqEM%&aP!7)CjzY|Mfl!MPwcYsUma5Eb0;&c2X8aw4U=) zD|Ie1@l25%@@FOq^h#n(5-W4lPG8}(4H}*(Ki6B0KIGdB`S6L82R8o!Z$I3$Pp3IW zG)&0{x?80wyJZFH4MOzUcafWiBF?SWb~LDuhk+<3+QO4C9%~M0Sf6qj*E`?rSsCQF zlZEmlM{P5c?z2wH3op`Z+vcJL_~a(vE}0ACX#}tGE_^-~g4^XIUQkS(oTfAqsA$tx zRX@kL*t{$*KKlCQ6XX5#r>C%5y%yGoUDTk6*+-gqyr0ipZM>s2(f-e8&R6hYXrf`7 zDAnN4U>_au_e6PI{lP}aDOq!muJ8RuJ7I2gR%0cl$GwuuGv_oseh7L% zx5=QZ!lbS(I4X#Hv>L{_{+OX&4ghmN8mXDOW%KxwPWZ$uWc_Fyd<-|K7W|Eoek_7v zFwRe3do2WU)GL~?SBxPJZa{o z-w{@mRb=gMHez_OxSQoqqHPD+ES^?r;?sNfz&cblF3UJ|bfi#CRO3Zfvm`cn z-Hv_iWL=!=+qr;w1kbVDEpdOM@R0Z5!F(JxPbuU7+MK=Zl#0B>UI>p=;kCL92F2>m zb8A;vHGNP!zETOlylSsmXlGhYA?^DRE|JDyew!6ilA2g~n`~?6*XSA-A&D!>S zbf!+(OwF%iB^@|OxD5;yiOwhTJjM0K72s%I^+B8%tfQ~%E>tShCJCkBv%!w@{Py~F zWD|-jJP?;(}mdm|3rY&)$6xpt@wP+P&pp6-_kJOEs+-&Qyv2v?!=X&k(i4&C)t1H|t5i7g4qH6gV z_OLph{qP&EZDx0fK6qtVB6N3tU_Ecbk$mLCh1(V^O zB{5I8P8Uj1$4*Q8s&(Qgc;L)?*|OeZwfBn>P+w#HiyTb6V?_00RN0R-EaTK`4r{>i zqUD?VJ-YB0HT{DKe3W^!#++1a+~s##_~dYFP~cuU)uqnZUOUBqS z`4_M8a(UaUFIo@8L-dk(!-=O*a>efAk$` z!DGEqVDX`=OE2m$T^2y=xO?lF>Ju<|W$w;Z)*a(1WM`<^W9#5^6iGpTrogZ8G@ZE! zB?O`2^*rdV5r#ieoNQfZK_J`56}(4yp+!Bf-5>ovXQFjvx8C!El%ge66pEsApz^Vx z+8LbqmllAeZDxFseX)WLZm!3siXxkTv+2r2eC_s1{D+U-D(|+{k2AI$B~r{JPjkDS zyJ|ksME{&_y7w50k$Jl0x-72pFzXxTx*GF~%3#1$5IrMpU6)O!OvJ}l5iN-lS-Vk; zeRZe3m;z^9@ol5vB!8_mJ~{9`$JKw=qH9JA4_p}>lWF1z!oVaBEE z=KF~-Wn^0sg!k@um;0s&G~^A6wx1Hon-hM%Xg{_wCqgGu+=4&T@L8liN-c&xMSmP$ z#ND^_SGI$FruVdvmvCz@?S^f7EM)6{^X4tNk{{mMB7lHpNc=svgh(3vZ^1c<7HRzagz&c&q$X<&wftRY~+KFxE?90c${}U zwR_l}JU9uPR|k1ZZ2tJf+z|@i%jMiL7OzUT$~-5PsFzUAMoJ(yj5M+1AtoUXM-5nk6Zr+-isgrMFOzQ{iS}Y|+j!^4Xiv*yV;j!q+s?^n@#lg#w6AL#}L?9BX-ShYfOxpWYqij-7_6e;J*`j}b% zp~1yns;-j+MytLnV6^G}ykVkNI`=2hDiunpxhO zD*YeA&Y?*d25PQj+qP}nwr%?v+qP}nwr$(CJ$V;NDplVizv1p~cb}8OgGc*de8@ph zLy0yJ2$R|*N{mu@cNUwf!8BlB?~j+w>Bj)RK3FbkM`%*v(+IzfdxNMCt(LbP8*7PV z0wpu`Q=7bNH}<~lrTVesRU4@+L2rctW&!}b0uvJtyGVIcJBeLQjeA2QvcIs*+}dgP z34R4=B7UKBfMFkV;K2B+QL8&;$QtlDu;8Mq)9CvCBwMEE1f8hwjD1@XwHmw(B8gH# zDkV~O21IH%5NQ92UShw8UuJ^isfLowK4b|8x-2r4fnhWiKnx3b^bU?px5Hq+F;${8 ztAPwdMsd|KAoZxa!Qs;7o|Yz_5!I0xx0rvtg#kX3Fdg(3X@Jo=J$e9dfXEAxE2;kB zL8sQWfes;07y9&cs;G)TN7G$L}4(55PE(keHnX8%axb5+QOo zR=0HIxQ~4zzYX(~e1Pq-uNz)H$2FSL^*HOoI#fZ&w(2Wb(ocTsQCYqLZ^Ea_LU%pF zE>#XOsFho$$QnLh#&J*}NaGAUEI&U4#DgMjK76biG(SPZ_jO@REJF&lxaERgtkLQS z>eU3fx8fI8b)OJ5Z1Yc7#elP}dK<0j9<#$^@B#CHSS_2r5PaM7%6<4bz6}N8uxl=% z3oIRUzpU39nG!Ws6YN#Y${1pW{SABNY^xsj?J+{=9h*mpt>&tKGJMSFJy3#lF}~vv zzMfM(5NZ{zlFW)5qCPGckAFgBzA+O1SMtI255SosyPvsM>AJ);%391wTG0$!&= zWHj%-vv1ZbMIpJ~;AFxy|4yJ{VVJ>sG7bDBxe@vowdYYz@in!CcaBgvU0DQ7V?Tt5 zN+HS8l-wXhg2X1(Fj_`ubj{|9goysf!A|~4A+C%s!!lAev%Ueh**a+#i87r0={9g* zZM=Uf__sCk=|GNW9hOl%oiJDq+L-oklvHKLsU`@}7iA72Y&zV=R@eGZaOi}jhyTT$LD1NP0)Le#pu++aibaiZyao0%gwih)t)f**)6039r&p}9 zCr1lUn)|=}d}zoMw9Q@DOpU%$)EaGa`QcpH=JVx_k$)F@UZkcA3{drw@&3Ad zjhH}8)coiGHApI&vMfYiOC>7%2Rzf3}rfL zNud{Ku538=lPUMBaLiUs3diYd8$`tP-?D{B&rQP$Rii5yG~9_VKQy{lxC%;$9)k=a zTqHOTz7CZuFV}E{)Q@76L_~Swr9t?ThXf-8k%oXGl2deSQc6|&8Q|6u2{*{Npm%j! ztBf=+k&0+I^1e}+6M+OrE%SaGN>lx!9(zD|l&K933v9`&MAqbFIDo_u5uyMA)Rq3e1 zC_uKK2DSHyS8#F+-a2yUza2M#9vMV+j0h-VCof}q)Kp9@guX=!ISe`qMSCGEvPapc z@pmcbk{kUp8og=LBq9=D8EN>kP@H~iYjySHCnTn-Af40Hzx|8rcz2>92>T`sIJ|Q7 z?`ZOT%%3F))+^lLz4(d={CW6|nGS@=0f%`^$kqnJtAc%P?K2XoA!FhFUsjP{Uj$nziC^XH%OdL3r* znMwn=o1{zU1*0_|W?G9Sj+FE5)#y)OEMQ9ez)Y48kXz`Yc{tn$U39+~H`a^&?h%|; z>vsF^>=BXD_#=GiOv%l=nMnc&2}DP8)NOMkST{Cgd1D;^QZ_rZ49dhQT;AG`oO_{@ z0MP7=Is2i{V^II8bnnp8@t1GMQSOc`NUnH9;7~h3DzTmR%PV!tFGn!2OX5yy;027% zGplcKaSVGaSX+kwtZ2F{s@i4lAb!U7E97+BtG0Jp_N9PYqB2=?Q{B#30`od1QxHp1 z08>`6nexw8YX-&Sc9>*N=f6##4vGTl4Jyk%-oQYttO?h~;PieQg>D~p=v*%HvD-qW zG-FTMuSm@5dst5|fIyGHfUO<(5MD-IFS;#gBuz+4e^_}A!Jr~7;rCXlXH$7Iu|0xM(^V&B=2?06l#7^R*Q-p8_3HdSjhP> zfzY#YcFU^v5W7D(4%qew^vfWsj&_Whwdvn<2i!j1kSpc282j!6S*Q`j`sw=<4eM!J zKgF77rgY2H{1$x`o|MG5N$qERh9kx#UMD|Q$LH$qNUJjX+~!@WB2oPvVwxFV3P1G4 znbf)BT6>&z`lW~h5#a$NMT6D|Qa>Q~OtBWtoE6)R+p+}auco?E2JQ%rutxD_O?yQ9 zu>d^0*XK}0X0BHtrXouOT9=8y$VekIH^`%l?kUeylz}aMPWm4hzDnPFI)<1{l}HKmXKFzZ=qVXft`2}aO8`|;riyiZ>TfB7zS z-;(-*V+?jDq>pEjJNdzsT#KI5)hW_TP37vZ{&;IopU8aFvzlNqh~&v@`WP+22-b2s ztHi+-4-Icj@K2u-pSaqg79sJ(mSkFW3#575b-tTagKLSIdI+3DvF~!Fuc8suPPrNa zwT>qBl3>E&<4ob&NZemcjs2!4#o_t3AJq&{e@u|mHgy7Pm|Z{4%~`(w?`WKN2*U^d z<1uKkLU!TTM=eSjNc-hPW6-@1#sjzeQXy7+9J)kXMK%D*8rqn|u;Yvx8A&_wD6%vJ z@h!dokg5Z4+S)zpV-#P^gJ*@6t(g$OHj5#?tRKNHbPwGSzNAV6`+13E>77k9mjx;< zLTOvb910UI(MdzhM-fCSS-jxEo6BGsBVyWVq&-A0SoI1`Y(ERFDsdib;jE)xH-Ryn zntAcR3yt2Nz(Uki_(QM4{Zp(sVx+S;Qc(QmTMk)-hPfbIHe*U+4J6l*7KZWsp2M9f zY_9`F)uY9gB)^tdd{VvckygR$p|dbman<1r`z>q_;FYCB-w>S3=5kAGYBjrnNZc`- zQizC;cF}hy^U_e}N;s6&)n*qiLJHy`M{U2NnL9Kp#V+*z@ew zhy3+aZ_Cbk$}tH^XApR9JGFOJGk#dxNN;3<&&->AD`g^m)rbsro%f!w2W`0Li5ihq z`CX}$*rOFoGMW9|qO-SkDRd50wIu^TcF=6C<;?1 zSz#I6(?NtoGPA#(Nb=sk&)^fXsCE-#c%qXCzBwf4ZnfFk!CP^m9X37FnS`@)X203Wi>TvG{(_r#Y4os^5CNHm*I1C zxyi1Li-Cvi9SC)^=5t#*P3aja>M}{^ zsZYF=A4Q34FRYeiO zgb@h@$S=*Mr~p1EqIga|Dumhxb=sX{YBKq^mi?_wPky-hB1BRa{1iL2#r2zN8A2Db z$x@#uyH1B&${4(o-CgUttqVnLs@-LUmfEHEcs7l^m=y1-sep#GH#~L zWdqYfit;M0B+YZj+JzwHy%I7=4I-KYwhY9b;Q*ArPJr#v(+I8=-AU91Rv9~y%2r*c zmsu^LqLKlK(JXw-Z@V-vIst1!a*Hf!m~4Z41X*zJkYmUE(Q0PF<4c0q7+N_b_^x*s zEyXrrK0Dea+kp&kjJd5f>^fE*{)Vc^{E8>^k2U?uSScf{q+;BqS2Us_l>S@>5YFzg zoL8gx)S!=)-y@*{HM`2SC}uA(0rBo57oNMK{DANmB5cY01A=?a^m0gu;rOgS!9hL2o-0^G{+Zs91q4uGGAQIqDpam?Jl zTa(&Ve!y*^Y}*P6dNu!qBtrAM#vs;uaYcbz%8J0@J;7t6q^j2ibN#wZnzm~%s69U5 zQEc1Ibj^f_k^8}ruuf}`%h=xOA;u+g^f?bD>-|41sc{f#EG!0-37b-zEusOsH3e9u z-o0Efe@sM;OXw$%w(INCI?d$8C9v+cB%7kqgsV%GsC)ZEYBt!^zXt!Goo*N4Wn9GF zn}|U_%O^k{+QB$B%x^m4=AO37OjcdFXh!#CDt#@^BoLD(j(|g3sea8Z!=>0cORVp(Ag&x=>{&v+RJ=LKd?^Is zZz*l+92^Q8;N9;no}oRj@W!=Wzc>Ez)Cv(lX%nT77O&SY*O>s=r^tn>m!e~@UIEp1 zDNh~5A7|@jwFhrQPl0mP9=hPxeK*0YwncxdA@)yEs=7DBKjen^h843FK|UIMY~3SR z?FN)|40{D9L?trF7BSYCPK!4#u6=0k zu5f2|fOtyJJFHg~*nz-DbBFQLZ8GGQKGyts-KZqociOssC?sYrI%&)$;d!HDe<%#* z89fQe`3=COz#d#!wa)rwbao2~z%d@>aH%BCB`ivHob|CsWh=2NL0xkjdKdk;G+iaS zo1_m-Om-JMccWRBTFX1HoAn1Jm>W6@5LQ(n+;wWBH*7z&fvi&tW8V!7`r-8dX061r zZg$YGpfUFuvlaFB!CUAxmrx7feq#xe;XVE|DZtFNk~^-()8gHOC7{f%@xQw1H}SEM zoNUQ=y2d3$7O{VDZ`YGS5D6cTnF+O_w))348W|WvxWrC%?HX~)*g)sIIy}5I0b^6l z{Vo^XS#F^ZAfT5>E|56dxdd0m2(B{uf^cLd2&zSU0FHYjEJvsIp1>N zQ=HzQ`r2tdkZ3~2?YZYQK;%x+!S6aDcJyfa*Yg>iel`ialr+r(()f+Y+))xzZQ*QS zW$&G^b4f&W`i~V)9?RW_s;1Y<5B*EpCdPnZqM0|dTZ0Fb{O8Tem&6X_|KTU_t+@nN zdJ;P=Z3)wgf##LbNAD&426~+crA!gu@_O508k0PSbGk7bP4~FNZsGD7iro!&VLxM2 zR$i^nuhSzltl)xlYguHs$%+|z{$}?}FfBCYnfv;7a!>+uM9jJkPhe!-+o4HUUWY`dom15J%mqx*CTCAcJQ;}y(u{gX}PNy6xO(PzI_yNh{aB( z8g!yQ@GhC$lg!Qzk^`%;*JrHmdr{O!y`sv7zl%`M7vid$Z3SM*SEUg4kV1X}8Xdx7 z?#wz`-#QB8a*%%JbZ>xm9t+-Gp4q0jj+1SwF&5 z5U9A2&n%O4JBVWBTa5?Ouyt6z8X*kVA1@i<5JVLJ2*eDm#Z3`!iX5b08XE$bd`2Zpn$R3&ZG zc_FUpy;P&6guwFRYh)$I$l&kWU7<+;uI$e4n*fVNDIF37PIkhN zO3R+1R{0K;k7JeLKwku7c(!z~U(Rah+!I=hQY|EmjW# zUL_2o`f&gEEp4TxQOs9!-fg=LD{i<{y?~Z&NoPOs((G;yl!-mR$B~fpicxXLfHXI0 z9Q*$D4ddiD=us9=An0xCwrnmzFsgaa`9G{Q#ab#9|jUYngRubcD)KRjYJa09iS!^akzAMl+w+g6i*Ci z{Mm}1sjuVKL9Rn6NffwmDMn0fuiLejR%al)FO<6cUEDyNIS`rcHE|cEu-MZDNgZY& zcs7z$Ghtq7c*lOgF;+5EBErQ&--s_dSlC9v?`D56K$~$iH+*TTpYg7?zfQV^k))5$ z?IyI1JG!dW@(vm>uFo3`!-Mc}>}Dl&bPLaJYov93{;ESDqyhG}G|rS++Miz++kDRg zh|U;FU-q|dX5*vFWViKhyjCZyj|RKrM{ z|B8^|6;HgxGn#3L41VcbibYDHO-w;YoM=n|`)Ws~x5 zxdNa==Y?lh)Ffqd%77%j@xUf5cnf)0AcSS~!{q?m-fiH-lr1nFGy;GAF$F##F+_)4|>#*(~ z+04S#x}93>wWY4( zSH&SU5ACB-)nfJ>iM}nYi;F>d-GN+5pwo+ZAe(DL5>yIN+D+BoiP=m1jKk>Wo|li4 z*uN}Q?(GI*S+K;8&d4F7pEP26{C;3_Qh~uL>zvY%uS1xs$c!j|MCATNCMXuG4|C@i z+*)<_j+#i8VOAy|vRnrip#@x~OH%v*FVlX(7lcI%I#j&Zd`I?T{sGPAfe4g4&B3Ta z2Ry890?|&A$2sz1O1TdS?7K~WOkkAN+t;q}M_PwK6G3m}>XwgwN1Iq*xL6E7$kEW$ zYR4x3tA=~Cf>GBlO&3b8hlIPl@yAEr=jm70zP{zax=i5u7nx)MOpYV^2uc3Hqe4@$ zLsS*j`fZ6~Zv<6qma(k`GPT|W{uw%MxFvKTW)Dt2nhlR?R%qaPk@Ugl%m3w$C zQ#7_VGpphnMNjUrp(Wa~6gR>dL3Km@kOq&KSxL@~$ikRvmb4YX&Vatzi5>i&ii?Q+k@we&QxrxOsXMq5HGdI6XHBq-zh%f-**2{Kz zIN6oh!HeKZG$T5xO5Wl%vdkS@nyff&jOzo2^a*P=H}WMZf4I8XQQ4X|zuIyO>LsYR zTh_4^Vjgll4#Jesy%m2tZOi_cxkGE4`Tj6*8x{1AJoPZY>(Mewagy9mGU`D1A5nO> z*wE(C_Ytb_!S-V8quCvLp!ckE#Bsu0r&>RI*rk1>WEgX;6(^`I0#m~$>hca>s)nO}zG$M2wWN3~B*NnPAvVy*7x`JLr zKbr>Wcc;R3U;iqNE@j8ior#VIN+zvyVReQ?gHS_e{cOFoBQ}NqbJJuE?TEO#qZEi- zY#Xr&FLMzCvhi>$9q^P7@24^i{X{Kz(6$q;G;9;C)%dqtR(J)cB^`9OOS3zxo|KcP z_SV~vE5m*moY6}2H=3|m#uK@?&_ud?2SUVm)Z=$GrnCx}fpx-@PGx@o6a#+Z=~8=j zAOywIp7JiPjL^iluUp7ja>1-lKnaG!S;GkEv6TRRU=Ak-p?w1n&_~~RVc@a-b5H3e z^m$?dsur?H&LvLk*g^Au0+qn`U>{cFzB#7{Lug@E-}b^8x}+jSkaNa-muD~4O!HS;_}kdNGGOU0I{VBJ=;y^U2L{IhgZmxBhSIQr z@Fzt8z~Q%^wz`COa%V*uYxZ#06hO;8B6b(S83m%{ybKEzGwo^a4C^SCh$`T{3)3ES zswgFMF`qUJT+q`(p3x&6{Y}c1yQv`5!|`yMQY?ah_LUB$ZRxKM;BmCE1$Bvi0y`?h zuuljTudOZ!gX7JEDJSOL)XN*t8O71R{+Dsb`5TDiew{1{hcj6T^ntHTAylPZ!S=3~ zK0K+b$stGE-q+KY%bImC(47@F4j5U_1r@;>XbF&Kcv#lf6e#%xE|K3|#sIZG7i`82n`S z^Rq3x%HhU{SZC<(s;pg^OA}O?gxDkC&%Cz3-f8WjBYW@)8K6PB^F9j48}IypcF+mW z3HN-G0?514bSz(DjlXdR%!P$bc(_jz7dddCyDQ+1v8tSFZ)|D1-Jy|*bt$*VnaKHJ zw_=Cv?x)k5$T~DWj3n|v*)~`aZ`XyLCDbZjJ10iPpVgp^*+{m6ArVpB1WG^eu(brc zmS)y>S54Z7hV%N2&rrQ=HRF${ea65nDS@bH;Enh+3?K-A{o?wY1k73CeOu8us3?UX z=W3B8;#&S0)*d`7S_B;ZqvPh`bh@%>Mzg#|GR?^3!2bNi)Wt7bYKYO-cSHNRcg)oE z3*U_k5910#taGtta$`)$I~Pq6Eix|g7wEYA%`=BFIG{8F1`;g|p}jt_ga7({3ohhu^> z`xY`p7H&-jDhP=o?O1r%c|oCL0tCM*%ASANSsl0*Y}!`k9L0`UYP-Dp!E-|n<9C$7 z^-rL>vadne(Gls+42K-Vs@9^y`Ya}?7W`40^h?A2AVQz}g9RQi9gIT%@@AG_z8nd8 zLZRmaK(yvS*Ei2~&_2R6;@X!Uf#yZzAFHoz`h6cn&)*?;pny;&fqEiTm*hLL#)~Ul zZu4^jVI(i8NBnNN;4oo;Rthuey0c}sS6JE9dpc{hRIE5{)$yla&$+QF409a+y?aUc zIEMdyZ$k*^!fd}v;76#4bdjH|CAbGZVX`Jqy68lLL!39tVBde0`c**aoF~Fz`W`?m z`ozFDHxKlF#QFe4 zrxwL+YfF7|e3@+kbLZbl@KXc>F}mCzqqv+hJH*Ue78e*6i?+}0g|pFOp`Va!`tk|I zBPU$SE;C0^Vdh85N0Azj@yo*n%Pl402FTyrOLq`USV_aXGzCaY$BhS+Bdb(=dtEeGnuLe`D0_a_4R+LY-v!431gJ6C z@Y|dsaI#x|i8B$`1Yva7C$r)?m!f2#e@t&DfZsEKx)UsObw&_?p-fM~ zC_YibU{p2whLP?<}Rrn5@Gktz3`IxW(5WN9?7STig|^kbL^he zF3krc+>k4-;``)sD>Nm-&&8(<^yqEQ;>60koa`!ThZs=N6tsm8TxlxE3|50m_?Zsl zMa4`}&^jB1os*C+Do66YJ;vJVvp%q>@lRW6I_a=yVpt_sN^kXnG`0XSo3)uc3) zGCm}5OClgp!pSzqU`V1XC=<8k6(wGFS^J6e>)F$(EpNjk{C2rDjbb~XEGd$k_44@P5BcmIvyQqz z51m~m3dBM#CAE_ha`8f@FQsX0!I%o@{*m?2lGO?*;jOXuOPLVe;Xft?2Boh-+$if_ z4Rf}vW-&(u*@m)D8OaYRZ-F}>ZyhyRu~;6qJ?=89FRVWfE=)^SX8&dXqnq2QJnX$# zBnjn5U^9S?A1Et#7^Q?4uEIll`D$o9a)DJ2HeeUcy7L+go0+zYlZb-a=_bw!qH5&O z;6-Ofrl+YtoYr}(SQlPXpmA_DkNQ4^ZvgdDA;VK@pnpjbm!2cmQnE3aEEm#~bAdqe z$o4x-)n-%8RiBqwyoq-7NQ;tuGsd`->Qe~**Xp9m#y+963*J@$&7hVfPW_e2Q7)5! z(m!TB+Nz0`gDRx!qNxCPB1;CCBj;j!xEvho@LO|bd%e!G>cQ=RQMRr8B+b6BT0HpC9A1Eu&-z9 znm%(b3A((o_mTI&GWOC#gmbz7c*D<-?y$`Gu+MO{~ zN-(lRCBZ)FvuL<_d?6!dDK>ymI=W{Tu4JMJV39z>^z}yAK1z##<@6p+c7&2Nw$!Ae zejl&6X$PXqo;r1|sZ`OD^f9+$D`$WSNRfQDZ9kgpOSlJ7<{)A`Wd1_4z8}WVe76+3 zuf;He_Px65(HGhg@$@@ZPN8r|)G-KXjARyOg6>-X)CXFSP&CKR$BM-~MZ(!X?IncR zTpb|0a2)qp-r=iRK#9s;GglO@je4R2a_TfxLdpZsGQmP_oM{lN|~TTU~!}@1n8!u;5qx6 zV!#MEp2Oivp=^r@V$I;1SbWb-Xfo#YWFW+qEB!)9yfBSMI>EVA40uyVt))QR?X3W@ zm>#v^$Yb$aTF6JUdt9kacL&Jlzbqt~J2`ATg(v+wDdn;n&QiR^{b>tig*%mlNF^On zjRfZagLijr+FxYG^MIP3ugAge9LqMz@*e<+^!rjQ`Wh@uI5YRa7`~>WTcar-eV5#z zp@a#J9!KRk+wIXGO;C_;Px!V`$q{PU<2B-Hgkrm$>N=w(>iZi?Z#p(D90Y}omD)$~ zSO>cnR?E8o0DU~(E6Whd0T_{%T&dv0mG;ktQ!PkN{VP7kNJ^qywaY8bTUdIy1=E%& z?l1hNDbJz=IMPN|-r8n|SJ&?@gHNMxJQrhO8wd)bkJ#-=f;*h|ZXHJcwCrB^Vy7OL z!n)>pe)**w9clMuj(MmmQWYXa5ho^eROW^9wP=?g#n5YQQ!lGiZN__3g8?a%w)OwII(?PeNZLA{w~jVHvy!7EjNlC zM5xyT1%b}ZO3y$o1B8EG8h-H5q!q}MYshaMCPy`yf;>G25Z!}YZ6P_z^$&&ukQaZd z1@S%rEIx;T00colJs}Or06hc(z(dquPWb(I(h-Pj&?a!QEdneCF$cT?2sQJ7fTa!G|!I;ivb*Gq7?ZgxFdIf1<&qpM=vmFg+YK ze<~C>ACb5fS3rM$J5_|-*m=JQ0Lc3&Ab+{t-CHDYZ@4&dIKNo;9vt@r1$(|&@t8>m zFVWyEY?RxZkRf=W^&x^?0Pb>PnAoAWut|!3T&R8Ubz$7!!A%2u`E>q%pkZjBfZ*X_ zkl}a0eEvE9`jsLVFOY54{k;;dI9h;v%ke8Ls|<%9`=a;03@E7o>a+;({1WN-{lq{( zfFL5l!+2fPWN;9_@_M`s*MAluKV3SwxBdX%HzT`aKlc2+elv&w-^}80{eDar1l@)R z6aepkI3c7G7$6Pb#20`3@qS2E@9mwxQ(X6P=Kc6f{`{qYejUH~7Y6L<*8TiYzZoV_ zKi1s8_uue9Lw~z*eRK(7e~J@B^!MrrrzJp7VVhS2-Gp)g;PqAL&vosL+jy53P(i{k z2zvGWW&m+)A%Bi$#~?xN{RMh@akRft@K9}kVPK{lAcpWk+(00~q5uZ+@(uuS=Z;Yz z!6ATx-vH~xDf|GJf9{<4^f(7U8bA(j4{%^SbmX&n9ubj%@6Nx$zahc+h#&`_<)?QL z{Nech;6Loge!<~?V4?utyMKXy1yF}a7a#4Xf18ow6Mn|v>&Djk3VswI=9YMX3DM4W z(cXVedby)<=59(Vp4S5MM0sYmM&whZZvlUrYA^ABRV)-?|Cybc| z6K4!cS>{0UCv{mfgOqDg;c6#X&P~P^@S0E>sv!%$486QxK1B9ps{+FM-9#LMt*f%> zlTPei>#WgODHm{~sh0xW^oMvr%JC}QLlKzoc2WupR+?R9c`X2EHC>LKKJH@Cdf7_$ z*mk%%CAUmDWDU*f6H^IQI7xrdMI;}%IZ9CEX#sJt`W3?Hu7cCuf!LEd%yAjy?P15K zFG#qBj4h*&wi?#jCoBsKI|?kiPM5S5y*zhYMmx!gVa zMfwEni>YDf^CbhdU|tfTtrM2OS16xCECXZuzUpl;lL9~1BEX~5pX0G4+^lteaQcHv zuf@k~vuZ?$Y4u-V3-gVC(1G@`PTtZnx}{llo;|K=V0knWioej@GZ*w3iDtZokc=N=JQV z4=T5UioT-Vk^@^=p5+8H;pQbP25fYu;%^(g%%wiJOR_rzInJ15kZ*2=Ywea~TXXNk zRK`%X*Z}A-_3}Dh-u_uW9s9!<*iE2XdL$ceTiykBV$#CQZEQ;bisoz%TA>swFzmwb zfI@Te(&J}ZhU@atWX3vo?kRrUV;^nVR24@29b4FKCCwlb^m9mOR}dblLBJ1!_3^I* zll}^D?KfE@6~J@?+D*Az;wd)uQPV?C*eXjZ!0et@@b?rs_1_}`$e6cNepo3h1yIKt zsDouz@H9iP)pA}p70FgnLEo(=L=P!tEOsSfU+1joNCjra``kR3FGn#nBY6f||vWP=i9upD+A9<%Lw#-FW_Dl?RQH z4@r;K*g|#{6IG`1$zEAN%;d!by_iw;>W~YAq-W*&Z_6I@hM~unDBz;%2c;2+2lAY` z=ZgG-6@|;ZBk;z6#q42IO^nV;Ifvmmzm%pmn5>;Zu5T+Hr;)J%ky?57-sdFu*TMSW zB`7;zvU6R+7y&T~aWHYVUuR7xhM;q!%{jWgxJA^rgx4sNmTR~jR51ghZ5%~h4k0GJ z$NJKaAQVc%mQ#;8Rp!W8G(1S(W!DTuH0DTCC=n;97|Mpdo!uFz6sl(UY&CiuR9{VO z!GmNw>vF7vvw|)7`oW6lQHDsL=vThhcw5)~=IOG-pWh6siE6P?jRu)lSzXrSwYs8n zL?O+b0y3s=5GP989W&xhiC|D|Ri@ATe5r6764xCUA01qI0IE9)=Y!U%-%XGkjU*6?o;HDJigphG4(J{Mt#jeMR^%lqlJxJQO`6Za1 zZf}agVq~HFGlD)xt!F1}7lvwjqv@%B&Y7TT3MGn@)V-&EKC)QRytHaH_8^8MQ$Ql7 zP#}4!w(cl8HyFm^U0Qy$TvVDsI5HK-SMvgB zvai-GD4{i?HoK2~eOsKB>p5SrJJcf9@+(AO?-L#}p|wlVRq2?&kVN&Vtw?(0vCVWG z=stPOO0QP?Nn3{ZPj;XfXiCsoswc}%xUpdV4%|!MiH$zsd*1G(r~LhqaRR~Rad4!|W|br6hqrM~oborOU$-K? zlcwv)>$V<8)o3#OloYIqxgC;~c1$z9zT!kzgJAty^}%jd90Q6SmXFU;B-@o|DG}KU z4{CyzIPf%6twne|g=Yv+|5T^hTB)k#I2cI36RK%f*UqGIhHBxCoh{`jVSWjj9sv0B z$9cb?t^*QHb0M^xw!Tkf_dFjs#fHO+T+T+?E`Vy$n8D6H>#dg~ZQRSP$Chf3uWMmy z+i*``L1oB_Msd5jbP0L;KoR}bH=_ia#Uw#SJZVI+&*LvJbkeWk>ofI;XYZ5u{z+LsH$?nach0%Ge)ZosPLhopV2lzetMz}=ET1?rXM{$X zL7FY??rLCXYJhS~p^;ZGOhqm^3 zq+5@vkVdiq#FuoTEx;Q|5v$*!QlLuC7tlOjo3^~@q2)gt@KD2=y-iVc%*M4fQH-O= zQl`*NbQ2RYHSiLnjGM0HJ|hIxrB}Tn)ln@Xa`S<`Z-P~>t8;f1I>Y^5F|;C->rph( z2gC`MWJ!C&q#xy|l`(|-_^c5To7mWi&7N?!*JXZ&1(>tALN26s9<{hTo$GbJ2-qW$So0hwLaoxsi+HxmvBB zF)^}HrQN1{(Gkcbed>_Ahk8JS)8ED&IIy*KW_^=SUt3s`s0MQNy%pyY#2_B3^5W%T zy>)X2+lih9$;xb|&L$i^(`9d&A*-|_m^BDSkm_zKIU}tAQ2#ZcHQM(^yjPf(Zvr7h z7LV^ed-;k;TR@f%#YZix1*gwSPNs;_TnS@DQy_ zVZTz3G$B(;7kd9U?SSU-U4aM}perGrtPk`-n5ei$qiJGyN`0{%#nQo3egg|`8+VAj>f2Zf@&oUhKb>VE9CqGKwl6CY@|Ih(z-&fjgp~vHto5mmVH^(8% zgj1^H@eEhoNM$AU9ppAoc|pBbc<{Kw-Cqh3yga|Y4(f}YC(8uhb@(_#cihAoV|gL+ z?sQG>voSYyW`$l{Sw-2Mq)7#-F*GzCkXtDKGO`}`YGjS~Vo)oJ-L_2eupgdKW-uS^ zOHk%EW8N!Iu(5s?bh$fus8en@lO~M^CH)!6fi^aXNg+L>sMqJv_J-LO?N~k8zt^g4Q>nP zqy~S=!{%i~OV<1ln%kReyEMy)b#E=bjA6R1yT^A4Y&yxR)~POZ374ahq(H=Zh&DD! z^jv2TETS~Z&o9=^3d?z?e@*C#_Y2tAeDCFkPyfH^(6S~Nq8$Mleuevr?X%{C1sQ-Q zH?LDvC&ewx0KvqsaCwQ}A$CMqj}wF65$Eb$+yaL16efSL(T$&fQ6IvR<;D}-OAzxYW+d^~5;=BsbGuTf)|d$=Z^%#LFRQ*{ zHcxfR3Pv4T5CQgP&I%{cF@zaq8T^=+=`#@AIEzM9z#xQ@80L%y27AdRx*=xvd-fc8 zY?~1VA6+(qz#ih%P}o5$xfq$9`puk_xFMOC47mvJ-Bs&p{be68OC&DUul_y8x*wLE zzeDgaL3M1;slG>Qaiz3w%7=`X*TLWOBqs|0JWg2M3ERPU4_dN+>Uqdk(;am-$pWAc z;hvOHIY|C#hBKweBc4&XZ!(D`gBt>kGGZ~}EXEzwBosF zLNCe%NMNPPG0u5Co?}b!Eyd!tQ}F+0?Wf_*NhjH-%~E#iH|n-QX9|%B>t^>UT&t{V zPB2}Jk;q|!5D_KfJa;p(K6%O89kw%JYm zC%vDBjKO8vu{sW#9Ff7b?K;#?!LgVSHB#%f_!qZ*e#J!-8Ijq3X#Ya%u^{I5#j!pk zTSa?CS`0=%dByvH$?fI0#0r(yb^u?VB%F-iS8L>`sPf8H7w&#JCf}^n0+nUhhz2Qu ziob-+j`6sm4#xvOn7L!2S&;-8d)igZbw#0)hE}kII^~X^32gvgfLK2U7toXrc|XPb zodI34RJ3t@@^q}{72*V^J#%dt40qHkf1pBczaCp~?b7HMVOND2cl|7lLJ8C<^UT8l zD+`odj~6KIiexBodR<8{T~_u({SRg$R<1b({)v>nLTzPz5&WjUByyw9&_-;Nc!}=5 z<&(WK_=S$EbjFNYGZ-Rov^>h4VIeI&saa8=pu^sd(q$PZ6-+JoH#j=$kigYc4?o8}{x=Q2d-U1oKhX79PWS&Ve z2TU;^eABOIvw6D7!<7`PB+fsBe+h z!7DtLs0aC|=_yw?;rsm{@xz>4(4lyDsNUO$r+%bUt3so`48!;{DSNWv?nP&97psJA zA>v9jq^Lh&+0hraG%XL<2oYjvOHq5lSGM@EYfF6e&fkFa>_cuNoB6X>aR5Pk7Fra0m@MXC0J1$E- zwsUsq8u2&&sqVw3`+Cp7kw+kB?^BX?Zhgwzj#q-X_4oT+0|iW5E0Wz_RB8fDM6zcU z1}t`=ID*MJ$D+%1SFymiN+MQW^tatEGEJxnMU!rz{pQB^n`lLn%v)dNeLwJ#D5QZ>@?0?Gi@>%^$Ct;)>L`jEJ7vKMt-uvM0dRImYLk}pg?;c=xs5#iAJir z=f2J#ZMp$QE>5Dc0u(vsDET+|YCXbRy)APPh8~Eur6BNrZNU}AzGSpHX;97*@QQpCzS^EDBxO0Xf+T#hFPC|z zjW$Wd=0mPPQl7|d)etU}zet*-n+c2Jv96_{vlfqIAvckZSg+ZopvF@Hvd^=ZsO%}H zP8Lkf^+T-b9<=PZA7I2Ezwq@w%{j(?0Gn!j)(~l9vB&tBoc$Ny_mFPVBGPpg$u=#8&$qCOG>(+ zU9;7XJ~h5|DJ!U`6OT_*dFE}`fX2scvLhuX8!*Tgt&ev_UAA(iCrey+tc zVie=;VvsdcvQ5Ul@4c{z#O`Q>uW>D)Rpp+j+MAN0j z`AwYmVs6Bno{|@l=Z&VGD~YF*#h&)IDf_UbwPl=A=jv1De*h!l$%dsB1gPH)eEiEU zD4sog&8}KX|5hgx5shY*eei@?{-X#Htm*7ls`ob7jr8E{M>QEd%XweAe|VicA5!GM zU|Iegp+(x<@F88ob$a$t&q z&6YX6&5PCqhD?eUv#$C#^s(%44l?mL?1tr`vjH~=pD^|{e0QvAdVVq@ypzKox^`9V zR5&fmJF7S*iPb5J8{CUl;YZ|eXz(2ToxyQd+rBDr9L;1pg51t+l`wL#TyBa$n9n$) zEm~u_v|+!hh1i`8q&NEtN)qPxUNl%(CjFX$hz^~l!<_~5?>FS~2NSQ^Y@_2qF>Lhs zp~P-~CH|upT@F zegEic7cdYkr!1+z@GbTEypxj*42FiY!Wg-TW`|f3MocnRGohJp+OR17_scq{-%ws# zYZiXGRRq7}maJ25k{xf`1l|+S8}`zl3@rflsfh626zuE8Yw1E=wT98In9}x%UKV*1 zs%MfOUJ&T4JYQAc{~{>BLs1N-rCo$OV0o3 zupgACNqLl9I^1MdS)ooQrA}gw({vcfVn>^}!yY`l!lG(kc1%x%4Q{pKs)2bg;cHqV zVMv^)k;3p`+g%kU7&2QA)QT(Jd1BspKd79k4~DlK#Ta|J!?C9@r?OYE9KAnP z51sn?$QoUA^j&uv)N>nqP@e;ojfx$Rgn@1XYq`6uccM z?@zx}_b$;Giq!(%M(|X@Q7}a?8JJo{ZE?fF%kAkH7MyhQV&ZHrU`;;WO|v7w#XO{& z8Z?kQUzcU|2o*bXx)2_@jM>*u!vr8l2BO1b$wWG8vex7IN*YrOSwtvrQ`Aj@8e(4m z#0U5o1V_$ZX%@->b4Y(Cn9j0D0@^sq6gyNi-a2xTSsJ5S4N@ z^EzIa1tn?9mD8~+<4w(xt&=iw_cT|%!1CuoQ{77G*nYWAOVweIIx`Winh67%xrwz^ z5`-4z@P_0UCuFFL7TLz=j;WV@s(Iz*<5j@bVDZtXVUGXFK7Z;#skJl@l62u-$Fv(| zB3PqVYu}#{^d~K1_58vbV`q&FS}3TzaoTsBFms+EboPi&$ljfa9QLXl^20PR`8}!?~Ufg8zawcs+ID&uO55ro)A%-eFSof-ebgVKIAnqY+1`kJVY$o%Cp zs7H?#azx@Z*}8;)hgROi-iB9=nD3$L#xE4jJHjc4T!u99^;JM@+e@u5h$ud?nAn}d z??yZOsirHXs9E7vnlxUjI2`UJs)EAI3)VKM5xcS$F z;W`WQBiUtuWw@@@^4Q+730;=*bKLxrvm(98m2j#_v7l4;Sa7NpTSnZNOBI+0y?D9Z3n-vH}&_#t<|6f4TO<&J)9meH$e1=_OM zLbGtWBXGzj8E4f?!_Oj>k{$;)d(Cr+>P-16RRVQLEtn5Z88fhqb8^O^8BaiRl*l=` z=SO6|Sg#szaxI*U=zPo>M>V8k=@&yU)55B#U#=N!pEXBgPZ_6F*Zg!rQ)D_K`u)oe zUW)A0!qu%1>;^%hD=>S{8g?ccl!&cbhg_$}0U=FO{>v4)E*+o`!|ItW&GZnB2;2+Z zgZ9I@cqiN8!zo@`J$EaqUo)zA^4?n}r1xQxR?#Gn9Vb3N*#P<^MUhn+(h+>94Xux3 zq+V}`Un~WeX?QpR$-_-0Yq^IRjSrTED$9G&6QeVt(DTLkkKBhDT}h>O7f0E9@$0+5 z;wb@jjS_^{Dsd8IN^uFH=wNs?Q(rwoB5$qV6Gp*taFp&>n|g)ESyiG5x){y44>}c{ww|JW$5U> za=gJeiD08+5{OlfZ^-+0R2vAp6YQi+qYu2wlqw@|Ep;tw^9=5?MC1^RH}&VZJ9&SB zc+~!S%EzXk*ZtgSFCdLEBFQ=)2Nk0Q$9rINuCwkf0W#{)s34OZ&EfQmTxKP!=!mxM zrXx0b4~rr&nG^DY9D3C9TMcBEhtQW(doFWFgJawVstP2tl=)j`ALa+US0?am9IYa9 z;XC|g|GHbWW9jH&e25hnwU%B?rKCKvS@{Kt2U8IGpWu%F+k^ZM?x1J=KjJ$EJSKWJ z`v0IF{~hjNVrOFf|20@fD?%{+E98?95K0oPKNzJNqZmo9PxjD4pfd*QPnnsF5fOYU zBxxH*qZpBQR;|B!r)I}>gWs3FdhWK~e)rsF{kqS%&p2+sI_vg+er&%E`pWN$NkN1+ z3YQ<&3DK9a3Bk@e^6N+MsRg8Ea3a8|j_Ah$C}BYY-ald%hNCU{68gPK%ew(#geHF` zRs@Llhl>I#v)z{ofQ5oEY1actA^Pzj7ZDxjAp$@HC4VP|4dOat?ah!8<%O_+3=LY( z3n7N-f}9Er6kcP8Irvd*;7AMYavI?63$gjVF#?0*2gMHO74$h{&ENzADcQND5(Xb0 z4)cHYIsZj*4vK-a7VoQdB#()CCl|)a}k^}h5S8(;y$6-f+a}E1%#!(OtUK|}g z4f?Mi7VmGLifBzd8&$}YYxzyQCxBH+wWYnbCMihas~~-kwd-?;OL& zw+z!iS0qM$5Vy^%Ec&9XWX)Fl1hA(H3CR z=ls5&JyndG5>Q(kBDa6x^&f26s|RC%Dle>$V54F{x-VNIC_e;Wd@>;*fX!dfVgR}i zRyU=KCswWvNV*qRaFD*XT|8)j&M#16K)N4Rw<4)G7@TIYFOc79_5tKr-j7tD>z(=L zukh<@M!5sT z+efaJoa48eXP2uz(dC*y?%2GAK(VhZ{hMx*zv(~$5M7#mM(uU7V-qR8eGbl?MOFy! zKc#!)%<;gXR*I-Ql(am%gHx2wsKlL@f38-bwa~R6;Cj_`ELUycBuZ9(L;B!oA&Tmv zCMK@V1<{q10Mh$+Dv=cbHSs}<#2fa4m9)Dj`A*rGr33nF@YonzRk# zpHy~5P%*)QT1SZALiVO`Au&+jO>62j=MO%xQ~o2G zSl}v4#;N8R=sAVg@hQinO|QP_cemr73d+sHvKhipwTQo2)(utn<5^ZMuaGvg%{9N- z54H(V+XMQ)oz6eh-1{%o83?0pgZ$yG7vM2l*L=K<-8iJ-TDN50S_Ly` zAfGSmmyJG0LSOHQ@Rm?Sg%vUrlrl?>_mrFpt>KB8A9+MBd~#eq#yR5}iT}>|;f%P9 zsjC3sElukBnlK;5T{QJz<8``U?v`0mTfgeNDjUVAsycKdpum?Gp}&szR$Ao(K5elr zA?a_RtS*8wMD>)hC|hR;BXQh|IMd{!1x0RIO>N#n+J~MTG3yfc&Qe^vRQoVXr#Q!} zEbzJQk_=O*=_mPI-w+0I1bI>QoR&j?^f1Q%ajkb`Xl&3{G%&b;A6{469>CT#w#jOW z+ma1AlO68QTvYluqmjr6OWO?^VA+5af%)2{;ELhFn|fs%LrmS#P>C$H zoY-%2w9k+$AL#h-L@^sYP8oH55d~+92hu@QX^u8PK{+P+*YOHngpi+lo1~k1Re3y( z^;{>JmP0+`Ac~#F4&O_+i{w-Qs+fp5NBmiv!VK5fylytG;B9(r!XC4Sn45o!!%>H1 zdG&HYqIr3x4)JcLTugoOS}lS+c{$FV%B#VK z2K_22jIrPYnW=ZxVrm+f($#xlhnE#)H?Y?oaus1nFMVgJO=1zk)R7;?on))edG`=0 zk1qu`V`dkHQ{l5I!~K!Xi*pdTBtx7kSMJL1K2UR=;AZYt%Hx$b{M?YWZY6ONIig>I zcOcUPV-tuFTU7BVmM;3uUDd{3?KLr6x+NK}lDjKr8=HYL*qbtvRViQ3a?PiGS)a}` zG1yj+Sk$ZAtjthDm<$->VH{&qAtfa;$OkW!)$Js92MKocVq4?M`;jFhcyN)qxtdjDtVnj$4Hx{6j;ijd*u%Bn=g__2Y z4+%BTN}45~o{o~Cg&JL)SkrG%tn4Vr1?P_UW(|nKUU=xTw?+_7)+a(>mJv+w1gQ!L zKD4$(zdw4$WQV{x`>SL~NdMfD=VC0y#Ofl}aj0QYM|``X)5KFclK%zrD{O=!~% zWa8)N0OL9G^``Y8+usQ}&i_2FkI1(H1q*+N74~U|CyP(&Q~s*K1c$b!S;BHz@cZ-j z4QgI1|NDvb56R7CKsLTCH_179fU1GL?)pk_nyWh`&~?46lHm{Qjs8qu30m`qNanst z;dz!7_5uQ^23Jt8z$B%-S37<=3m@))9s3?A5}}CM*6E+j35{C7R4-WIq8(qU6#EJp z8hJGh;?dc{N*ad)^+IPa0=FXq;Tdz!Z}rUyB%F{?WI>7WrY>FfpqGWD%vCVx}H(| za(!&G1I5V)RWpkGl3gBr@23fu;j^GTe0*U&(;Pr9Y(~&M!%E8-5n>f2qPywjanCa6 zf;Q6(^scVekx?_VT{g<~j>nfzM6%dnP?*76_+YAm0ewo~i;SxwOh%L$9+5x2*M z<5bZ0FH%*Ws^Wg9{S*P?Rk`qw4R7{hwq%uU9Zuc6_ru`S?v1~qdW^;Z@wree6#WoY z)?;+_t$b0YrfWF?tgEE;^*oJ11-J%M$v4`4It0hL%p7WGOk4;}&hkdl*WGhW5_e)QHzD@JkK>SdV>uam1>H zgY)n`;7dl$-gfda-=Yu3rk|N(x9}_$u1>@2NRum*q*O?`W%#Z$%&L`NbBfcVwC(f> z>yK-R^GIWj7w~eGO-rxE?ct%Grkg}#2}zF)(?CVZaTlYh8zsjoQ@wLiWq3@8iVH^| zteGYhr9OERDqS>$4Artr#M4wawiepZa-x`8WVOHb;QLH<&&PlQ@Zo*wt(@eY8hl~} z*BVji5PAL=XztDgYn^ZAk?(~kKqmkTz9`$v%3G*27fkmfI_<-WT=6{1P#0tjzsr;5f(7MQ|OMJ}z~-9NZ70Z4TGhmpSK$9MQtSt``Rq z6(6bskX?Cnq1=diD#;$!xnZpp@&NLXiGeO10jnvlWlnOM0<9G@@FZtl-}i~`vW&|t zUP+E7SVroc7?%l^(0wo?!NbQW214d`iPVZ9ZZtjU#*~u=&PW)&mwE|Je@O^?k+%Im zWCu4tR&gr%UsvHLN6yC4BQ>b~RgcX1^@GMD7$cFnzFL*@aYlIsteyMOV@(?k@{bGQ z52!i9wl>3?L_LTK5*A&ar0)u@r>0yW(r2nu(=+}yv9{*G=?gO(s5u9^C*rA(Ldniq z_NUh9$!}coFi@?WuhzXseYc(g6z7|y)eZdL%d1M#ANN&2Ca*=F?`^I)N!3Krld_jX zQd_AW3;e$~`5d-ZI!*_6uM+x{D;OPGD4cur^Z#y0Ya#An0{YU|mPReZmRfH+h}=xpTUX|d3OO^LRZTb}Q)kppOn`Pq*T<)Y^|OF}tho^$l-oc5rS;T90UAd3C0K zXK4sT>TIn(JbkPdW@pGrnU$&-y$&Y|R1^Q8I>`e|j;=YhvCwSw>dnN2Wv1AuE^IBj zNyOiy4a3EcylVh?YVQOS>qO+0TgkZAVoojNr>Uzw4pci%7V=BMuGvV9{Ux7y*LI|7 z()g9-T^VVlm36aGmg%=^`eum3ss#vVRP9X%u+-{rRG@EG0Zy6S*Bv5cWPWNFGTZrB zn4b3!olmSHrV&dlmJ?(8CgaKG%@i%K-d8;fP8t$XD5hU$cylEi_7!Ck+Lr{wKd9oE z_TP&v4^F;dUy-)&TFq+>it`S6T@aVYQAmw#%U>+BI_rW*A}(?PfeUI8N9C1~vrDIw z@7>|2(ych$mX%54AXt9{;1x=MH|F<`WO1VV`bXTCRp1aiK05AV9l1YFJDSO6Rx?R5 zUPfqDwDz=CLFx0{cx9y3ocv{avng#EETu`MN#2Jfd(dn?GNLa^3x?hg#tB$s z<3bqdNF~EQf|L-HHQn8UPmvBY(-~!ta&%w*DM&7GsH6rOExVJeHu}kJ;cU06-W)3$@JPxOwXD+>eEb5u1a~6-Ph~u2JUTpE0}DtluK$$k{+01qSsDJbV!)$kU}j_d z&+@<5@#q;@82EO*gn@T$ z0Hvb?L_1?oOJ_Sn2ZZMHc=09OSo=*htS~h;0*7z-dNZ#rwLLill_W4Tyfm>jF}N55 zd^0gII59ikwEe_?l!a-kBLYAm zv@C@CNUOdDeH$&Vi|!7e|NRSSlxGSOm&w7g;V?Ik?hB3n%P4fICuM1UBqn+zLD7u#N^k+hZh$f z9qk{D1MqeFs9W`{zdbjyv2Z=BbRLTWa7Gj)^p4yk|NV;cMJmbHH-fy!F9>G@0A!Yy zz6J_Gh{@zX#TOV$`|+DQ{bsALPbxY2TQB_+tJ}vL0{F}D^=ovYp03{Ut$O22 zT8{R8DF?o`ruM}P1nJv)pc{Fo`KyQr!#&s=U;;Z}QX>-5U=jmb0$|8330CMkoLmJH zeMLQ86>VgVHT823_+~furE3^bVgib?A_5DGyZxP-6W_e=yNqXKt!HRvV*OBWN(I2} z>B-Hiwl})3uV(`4HU~V#Q=|nbQiB`0IIpqE<|75T#=-6Z$TLH9#j80y0G)UEOZr4> z05}Kng|7mTy@zW6Jm>uhR}Tc}G~gSC!$C{|i(h;ffb4$Xuy@0$zLAH*&EFV0`fsHAh7ZPE zoHzN9eciYH=`&g*fI0MEgs)JmtgBy)U$V_3+OIj*@5T+$?Gl@o5|I^OW3Qp9pMhAH z^xt6I9jc!JIN%iD{ZP(I-Zy)&^B;wh-?FWf*?%=NmK9(2ceVnj7T*xwlZ}gYOm$5R zbk3jfh2Pz?-kT%e0bJn?jP=a*ujSHMQM&AH-?;n1*6hUTQDBANT90$y0^jF|pTUkn z-M9P?)9Bbp*;6wM+ow{4lUPJ-ZL6P*yLqhA-n&BfnSW>3Pvw2Pw<>h}hT=Wi{&#UE zZNG3owU@?wM!)(y_r5t+xURRmR#q?eqtQ`X(a?ISC)Utxz|)pMn>ZD3_1b1Gqv?)h zfh#H}+a3M^ZO=o7t_BcaGQd7*7@`Q8hky9%C(o7^O_RSoYvx8_94<@P%~Pq@GfVe+ zO@lYETIlHUb3QVjN%l`_#l-FLXq4u&r32p5@dMns>k zyD-&&+xSsQE+Owj8su+)?~xjxW-M(NU0Zw_pDkA`#qT%Y5#KW{%VDQilTbk+PA6e7 z_QWI+G}*?Cr@Ms!`8yrKhM%iEvl&Ky!+aF0QiZM}x2K2>@|>J8`U){4o-%YG**luS zEs>5d?#Vp;ny&|_`m1ugPrywzMXnnI)JT=9LY;>vmz3-|5TTL+5&`kE0^%;cWyZeJ z0|ULb>K%fqNr=`zjCO&0$z73en+s&F_azoHEuN-2#uD0ZicpBW!J^M999gg*%64BV zeLeVkm{mouT zR`_Sw1hVm3O;B}-)8fzL>Sd5iL4zyUesGHHqPvv3vsCmZ%l<6)&0txWw+&be5s}5q zjOgNZ?#g!$b05U$^;~)(Hs_csW%DDr^O2}aAxmP3Lo~1Cm*#bf$VLKIrU4Q@d)~zg%BKX0rJe12&fpYom(C-GYRy(ffq148DgKLZ&9sv~LM` z=vkusfmwC{>nOcHMpC##e_)9iPsP4&p0;YArGsQm?%LU9kvTVqUucl}GQZoqT1;4V zjt|B9@-UpDA%WLi+fELx)Yw{9XWeu;-^WD*!DT4oMj;CzI&+hG|5G+BK7brZoOJ%r z_ScDz;GN6Arprs~Kd!I=QxfFr_4g$yN5)cid0D7k*@28L`UCPK5hqcUc;UUeJVJcO zJ^d(dI6M1}b9#P$>6p=s`cE`nc*Ll*I3}VvKziUGyM}sdrc)6I`R2oI4T42&VO1dM$ht zUAL}A=YB6JW_407(WhD`ByF81_blAnSW`FmFb!W@GI(j?g{xvZPf2b%4WVOzPcR=baWkYokO8XPWu8$r4c`=W--a~aljum2B{p&W;V|D4Q>-z%O@`lXoxT}o)j1iNy(XST% zjOA$X>qTVwP$W+8t;2hfb|Qjrs~*%wr5QP5qO|cm<^Eh@z-r855%E;E?$3@Ad$ECqOZ^A zI9k4O)D6Yd{uM5DxN_oCW0Huq%P>IB&_u zx9R#TouzKkba%Pvr)f-@ z(iOMF+)vQ`5qr&!=V!p9X~WCN~S4#oOb3TlbK zohkMwkpN2NH}J2n*stdL%ObHDGxJw3YD`JpZ#3T=w>vWgAuou2x01q;pn$=Or2mO^?&9u zDkmEi+m}elD5P^-+Kjr%Y?MpOi4K?m-0afzvLnWXYSq9(`71$x*EEkHaXKr^aUqe% zsH*ld%|SHD`#Okth!jk6Rp#}%Rdk_MjwT?YBQJ`J` z=K4K@$#fj9w8LFAiTH97P}Iz^);*)j#!GuHv*%P;5BcW~Q$>qZdqpAaCa5Fx(uvds zx@okb7N*EDEiYZNymLmkbuBOW)gwFUnyaLawYP%PdkwCwj+t|`92KW;`y66uqn6ADWpcVaJF#hypSHXLKtUyD` z{5}m+E065$*99l7M>!4hB%>5k$?Zd(yMnSF2czpqC#XUA($4s+=_3wY+N97;8u}O6 z=J}(Fr{z80cjVL(2z(ngLWvgqExLcJbpuI#dweeug}`(oP&c5dnx47mSGOkf@V8d4 zJ*oc*#&_PbKyw~VVhhinYub6i=yHe|sRxwrz#DKClwS*l7_?>=$;*&XdoJ%5J-`S! zWz1ikls>bl-BW^iv<5FE6(3h-DSW<7LwcgR-q7+sprtM3&;YOy2XKEwqJjo;R| ztmJSsTJp!Pxd}|jF6^!{I9<^A`*2*?BeshXh!wB<VqRMv(iYwa%HIB_pPact~ybXv-95W#eE=6GZA zvF}^5p#1cw-_fElbqoyo>gW_f?USx(^1Dpj`Q+Jz)ip{nUSUJ|wKgG*d8lh0x;WqR z)ihQ&EL+ne+xE1jOmHR+9%AInQxqK8L>5EYf470dS zjTsXd%o~;q5*pMxh1s(>(;WS9?Pa^`JMlH-drNyF=n%+a{w0_A>M8`2Gt3*$0ewll zAdAk`-AK#lih5gmgZ~P*ivUA;2x01Ci;RSsqV4Nu0WF_Y_Nrc7a6W<_o=k1qAL0EK z3TN+WZ}eWyBB3-B7w5m?^>Fzl)L3CvoD>*b;@6|VpP;X51}=3vHc1po1`fdoK}=3n zZWOs=D#g5vsytpSRZg=~rCWbnOf6+toXB^@DIbR4Ky#}5Gn2BOyr5uF9|-SynTr0X zMDx}~MTWJck1CT;%ieiKZwl$Wodo545Sq1i(l5&d<@#Dl((78RL$Wsq88uxlkv;sb zib;w;@3v~t<|9SH2GcgwH2 zo)Gx~-?z|&cw!PEU3_-&N3fIFg2UcB%l?_9Pph zT!3t}hS8Uk`)Z}to7TwniAZjsGslw^u(4DrRJLR6Pj%0~ND9o3FtsX&7(T3IZHjVJ zKGm3$<&)(ii08Es6TsMRAHz@r9{+r$Y-?BtL6|n8Yh0a*KF=kv>!vwiJJLlsU``)3 zF&IsyLBI$nSQWbJG#-2%hk4eG%e~(OR>dvd+boR;xKqDibMzg|*UqP}q!(IEvul6CW#W0q{WeS~ zDZd0r@|C3?Q@2BStZimdvgOX64QP)4JX(d>?TRHHcUxLz)Ngj6xxcPyq9%eghzg=f zp0;w<@JkSm8zm0wE(;sHu1*^_v22S(^ZbOlf9jpw&4X{lFehV9m%u?s{Jf6q5-U%&#CKBdI%#dc}- z04g;NtX;xAXu-txSgyF;8!f0%<=8C0pybb5bR{H3{~W}-W`M8{>LA}Qp$SU39STlq zT-*k2gR7Wj>c5JO6Rlql1=J5Y-XJW~sN)(((CvejwiHt9YCSsTh_VTYf;zFt{upSN zXHj>e+#)SePh6`tB~mX4a(<$x7B_C@nH&eOt&>P^d}XD$IM8#a>ECxG@pJ9a zG!t3{MM>Z09I1HK`dRdq^i21XYg!&8!RgK*76?EK`BtD|P-3c=-RKF2qw^HDrh?{% zMzvCp#6^L~dfv;;&lwi+Z&HuxT$HjJdLeRJxh2SnuM;NggW%HYyr~Yv z`23XwsBHID)W6mD+gR#{(ArZzHK-%R2ODXx``N67RGFcjr*6lr>2lR0XVl|N2$6qq zulbG17B>t`(`T<6OrTuAPz$Jtv|%2ysp^4BH6NjucIIsRTEHwuXuvJg-A`qWhDnqn ze>@_rQ*sMt?8+aG5orqdu1JpNL+0`4ObEibAuvZ%c}6W76IalBmocHpqi+-X#VNb$ znm3#xNR}|>l|Do*O;(U&Eo`QzkbT>X%Ot4F=$Z-A?1aw`2R|83@w3_;WtIM5Z!b z8`TZLd7WWBZ+{S_~7VoDgTt5Me~bT z)^9n)lRCbOtq9hIIY!ny@Vj}nP+1T+@Ae#=ApZfH6mt`>g>MXj08vR2;BRD5 zfABfyDEMH??{48qYDRT4>~H@9@uGj-@Kbw%mgrvMi;MM@2EPcZ48vYOdY#e2zHD+3 zg1>Asc-SkJ!H7|%6c-Rt5FV5ICXu+Izkz-KzQ`WKMG z;N2R08DsloW<2sYB_Y5MsvAFP=OzG1Rpg%24gJd0HuA3XF`c6e#v=!4qWO|oMW1*z zP~ZgYVw<0HSYN6G&7v$Tv~qTR>0CC%p2RQLBy|_4W{RVmpgc2$dbK61Y>;9;x^XaL zfHvjD$r%)+pZLsH3iV`&4dFgSW)S&E3F{!*a8;PJCW&RLHKtTTNBu~hN^`flh1wkT zA@W4yTW(70POB$8vX4pMy2a2}IM#rfnJEXp4LZ-h?lpmNDw-$+x!eX6c2!bLOlQOt zicUzIZEQh7OjSBF8%l~Uy-TBsq_>pM1$SFCx^;aeWKxe|R76wmCNW0~vyxZ;pa+3{ z=&(^nJf?C2cHs3BUWxc}6SFOB9epYl%Qn@s=#w0OE*}$xwo81(Kq0x2!>&O_AnQTt ze{B4!lhde>{K<`C@Jay*w zv!gk)`8W7gD)56sbpmW1XkTtG1*zjj0jFKB*8?Z1lCy_ppO`{xWG)LqLKJuRrd5u# z`U5(+aX}rc@d=;5S|O{2d$#zfZKV`HE0^FCrU@j2h}qDjeU5dbB6c6t-e2Wk%I_$B z@4e5u?H_vhXm}kDAgpvK^ZCRWG3p@=7xQx1+h&N=T=B5eW6|s(d#LVyWR9KlFppI~ zVw-$C7UChe6g?Jk2w~ z;#O+8E8luEt?ToW8NPt~WhHIS^JV_D$skVf4URnTbxSa1H2= zB>BK5(jY*{Y$)rjNM@5G<65?_fcmd2HB8bWUKgExBEo+`%R9I~Ngcm~StNaOl-qf@ z+~6>tjUZvc$L|DOBS$nTLf%qX#wM(blECQ}M@MPV z1*o9fIQ@6n0-K|ucE3|kPKVG=hW=*vddtvnp*G>`|NfC$zWA$+ZlVhaXn1y4VBP}f z0QMvCu7q_s%0H@LQQIbq$9Yqxa*NYjIE4J=Y#!JXtI&%yGBA7KaGT{ix(_ufH*HsZ zIy)waYxz280VXop=&S*jK^hs|aWgLbfhU|H5P%0x7i_D+BP5&R{gikb&+DP2iJyp{ z3YrX0qMM7=4Hs$njN?8}xE(%Ow*AyF4!n%~?@_a((z$usCBO{&PROEuEp4~VzrU!3 zuxb!@!9>e~*Snmh*CaA5b8&OLU4%k=hepT1h(X%iH{btvQ)T77O#6D>?K2lde?)hs z*|19Qp!=1xLL_HT-|xPb#6)ykW0twS0A@bYT+2r5&@>>H!?m8!2m$AUtBu%7^V3dQ zJ0Ve=yx8A=^Ww?^t>74P9%ZkH8T7@jTV=y9(o!Ks19mH{g+tyOS!z_Au&eW;;10ig zyM6GCo)BC1Y&tWw-*%uuS$!iNrj*Z$UFKhp+3Yiz?#K=N`ws(3SHeqju!*9EQmm3{ z0ZK+jtz7yyJg0gRx!c&-gfK;dl;ET$_j>IJz9L?Fs~@LssnL)kh+-gaf4o;)j$M|*0*@-`HI*}Mb^DSRH#CD++`a&I1 zh&7L*Q~zAM;>+btiWblCRvxie^CM5HjSCT1%Zt_%LgS-RMTW%(w6?kMDS80uO^I3w zuaTsh9wc*FpdpXUhKxY@;Z_5*MN$tDy(KqDn%K_>AxjNoBqr{rRc4B^x;U2#`*5mY zjGF~R>kh@4#QuaQLN8SQbvmWQjB6EJxCwW)O5z?2;XubkruwCwJ7hWKOa~^1l5{V< z8sjqAeY(vSt^FdzL2rjoTgNA9{i;thf)(TgGcXO;YvC9Fq3MAU4x|?=vk4YksbL zJHUSKmQ6pw83COWqo5TSAQvD@a@;OsA=HN_@ma9dz3aNeou``jDGF8zSHlkLP!CVx zW9Q@dR)BO9;*JZ85!O=wHADZdsHK%!l9=oPNgD}LPpzfM)k}H!=r!}L$gS|QvMBZsePpPR&B6YHQ(ePovR8ED!&cj2H_$Nr6?hmsmu?H|z? zbSmEfZN#^(1z^K1x4g<`Cd&XAtO((fs#l*AJ%o#(q_ioH;naV^f) zo{Y;r?JO_qUY(gQ@*MEGOwhYLU=>oNEPCree%yXg4<^OuWg3}OA|)GHEYy%nDvFfA zaQzU84C4p)51(e4Fh6CMuE3&|ZwBAA&%e;Iz%a;vVnk|BIrzx>1Jz2Z-E(w|(+HpF2kHsw6Z7GZEPrF4FVu`-HqOvLv7`llDrlH1OF}oMK z5C$bb4EJ6u;YJ1_nRs(ofjv`}V40~9kGrIn3ppL6kp;F4@Eab^yZKK!biey0pqjtt zqKL9z$?tn$k4FeVrho9B>K+gBmDZ#ZeH8teTX?GcyxKh-6gm0t%Hi9m-%*s&@#yx1 z@uGm?bpAPhcq+pbWYCmYZib~+dt9TySaYmNq3iGwhQ-e?WLl602L)dy+b9cA(UoUh ztXO6)Cv2*x*BS*<*IJ&BO})^rcm<+lZ`^1puYU|FjB(ssIV z6bT?t6Eww$75cAz^+ihqu(;RBnNufl96qAVp&_RFpn8RI(JcNTdIrR4sk3Z=@`p2JX(QRhzmwkE7-yB(|7J#aWLQ;njRbqG$Vnw&U^ItdS3@DS6k>as# z#g-wikk+lnvCFH$f+zisLuR8gwy|a9Fw|*E5dk1NEEOW56v<&thECEl-=W!*_GiLr!v6q_(wu()$|a>i1Nf1*Eeu=8YWXSIDBUrve5@9*e@dvQMX_g4aCB<2-vff;DH#Yfy^0TWHp{;cc2?A{`M5}VX&$h3R7Bu@Jar=*jJ?vO74W-UbqV6H8}!{`xy@;>k1x(`P=oS4F502&LL(Po(;2)ZQHhO zTkm7rwr$(CZQHhO+n6tt%`}hF9G? z71Ai5`3b*$C#@t<>#K-fgrM$#(vwtk`NZLc^}mdNK-tKK_nNVC?*|qB72QY9@h8X{ zpS8u{+2V_Z`#QB0Zal9QPs-XuxoXa!qe=|~&F@>TE*z3O<}(gvhD6a+1|*hkR>a{BrX<( zF@uq5tRoiJrHG7bRTzPciMKj+Ww!4Y0re`rRUyaFl9o59F!m=K#+=jX zkLd7h|NHpuGlNuPt(Ksa>l;J1Y@ce}=W;X)=+5|8ytW;%_M6eDTH>yI5+(eikR@f`6&0X z5O`MB$I|Cz)QaZGFx#5q{H4`v`Fq8IZH7)G+(!=+fEYUcm;Qa9>z^u9z&(0|%#^6g zk$#p;RhMN)bvLnok+OR=cDi6!s2D_X;KHxLRY+0URlC|OYDc3)oaoSz=MHv?Q`_D6uz0#CXwRHDOdiMm%z!CSRH!bQw%-uLqet}M{FlpvCDuz{vZDcJ&O8lqqu)EG7rXep1d4daEVUTGYT2H&I*@*{K#CjvqvuFE4UdC{YOqMGIW+DFO zU+QaNJf%YkB96xNw!=xlZ$;@`z%_Rn9g{QDUlJ<07Os~K>G^tT+6LDk*@wv~y-TW4 z_<_?4-GrQK?l!RD*7f<(kxW@7I_?(wsP14k5_4vnmMzy(qRcG+51Zm_hnR3PrwA?Y ztR-FosXks;on{8Au0|UdX&nY8RU;vQE5+xrYq#x~rjB};3=*gxd42FpOtF0a$<0Q0 zP_?H;D-lb;Yg{(_af0r@GghWK1!=%*N>JOIDy8~iA>ylsHFu?mT2sVPW~mF#R_pk1 z;Uo;8@@V%`ekDzP=%{VQRGR4_2ezCZm+$D|m%+}^1dQ=4R(*&5z0@GQVle$+Mp(zwoLpj<;dP8GFdC> zVJtNB!G$y_@O$x2O9d>Sg(9P`h8_Ena?6ZpN*L|x$dSBDF9zmna8?*Wjc^vS{kH~|ZJt&cVGJ+YGN<5yAiSqRX$ljc z_;vU4+VdDQ5yg0@fyfjr3@_6V^S1^Oy0IlD8YLsed>Rzoo;xVULA-Eb^Y21g%VDiI z?@53H8t&w9*>F#=5p2V~`$6RK-l-T}i*R}VRe7Q1C1#Oa9ng2?7wrJQlzxD3=3#fB zcGAPPvNBVCv^f~Mc7uoEb*7)|_`}&Gi@GE!*pBG%=(pV?>Ss0S>wzJi2$#8|++-r5 zx>w)mo}-ntQ$}cfXYm>+Ul{UK>=2bvu3J9Re9CVAq^7%?6elq6AuroFYTtg~BO=|j zPall&q{~Pea$y-D?4W0-;ED>O6Lo&3Nm1hH{Zv#inJMF^YkdDL1+5m((=k4bP6fRa z6)!kJaHmSnu&yCDR!(@Q+EO79hF)6)CpGcx45}g^xm%k5f+q_m4(&;v!dO#|`Ec(h zw^M$%42(%yg;FwopK72jU+k)@b?uz?-m?RCcRvp;<5O@R2j9Vo^(Bfgj!Y-fQ z7$+tsipL#KfbUcZZyx~SdfL(%yzlUmVSi5NEgy&G$r^S_JL{hvE*4hUWh|?A0d-fB zlN-Z09wrBxO^LLL*y$4rrULZxN#Wf&&u3`CPvuP~u;Pmt8}-Y@(j}$d13mkoH16&B zrT(yVb|I|rY=+r-49b8%uUbTMi@5N7P#v*W&Y%zU6K_Gn@#d#pzH8{0?Vip>pK-<}|ynzg=K`02($|v z0~yu=hUZzZJe_ML>|<7YJp0SHnF~HpIe^@@Z2Y-)Nh0#T_prYAk(vwq}2U8uZP_abwh zR>M0xaJR0&?@FDN`Tbh3^}%b3lS6_S2_4a^vzFxcg19oE8sNezGJx7 zEk)Cehj{~bF;{~B_b%w3OTli(m6SN%COJnH!ta6amz0 zh+4UPEc4&G`SC4PdA8;+VJfkrbeX=ghK z*YY=6QGDGT86zA|uC`X%n{g*Myt74abq36;*o@HDtj6%T#_|;A5Mwm9jf;pU zuE?{s&)4>2>kVb-90hQXu>nGrBw|7v)?R~4Wk>8aJ1oNkhq_oWBQ{z~D{z)x)GFC& zTctNmN2)|ztwT}WHkufhbXuk>fZIX>Q~Lh%@Ie{H)NqBMBSyFZkUd3$*umM!H?V>{ zk7SIAoTd&mAWrr+v5mdHGu%6aD|H(v)W&AoS@>$Vk=X=HVQ5^`yQEjG*SKAx!;4u& z-E)TT(JW_+NI{&CJVGOLJ8Qo#p{{=8$mn)(UwKKBbd7?q$2BKKE(Ot91VeBI)czsvn2FpNr-ejRhP7=ja@XzxH@Q=x6_)P*B2a#iqRJ?I>e?1 z?Nlwiq@Avw(tS8gL}MWxdt1o|d1P8{9;?(^kF&r5x4#7KuhoCJr=xUmm5uVqmL56A zx}BMy3jxc%_vy-Dt_tZG;<@FArMyR`<4CNpoWv9?HiJKIbcyOZs-e{9+74}EP+hZu zdz>3iU=_<0)WJahX>LdN$8%6ka5?up3C@@iH?mzD63+|?~@ z(X{Ww8l?xoob3Q5yQ%w?-Q4oZ&`I^^PmMmcd)6nor=~s!MHyQ*;hCuS^NzyON zqI0=@uH|*TM`P=^f4{r^l(rk}GniHCy4Z6HMjPk@4R-B?U8=gzy`kHPV{+c;+Nko% z`>f8R+8gx@#LmyErh~6U7eB+d076f+Dh!`yzG}Jp3>$CS-ntX<$5!GO&!!upi^B^7 z95k-daXEtAbmr6lC}Pi_R5}6yhk<$rn9xkCwy&^2Y38X6oBhql$%f;LK?V}Y2m~_w+~5Zpex@i1EvqD zCbwSCWjhxKirp08X=AxKU~b&#Y$aP)+_5qS+-78U9b1|rP7ywYvy&_)UmNveZ4dau+l&00Lg-fKB$pBD`cj)a;e_p9n~ zju2*c>NGTreLXh9q0NBC=cr;Kd5w?87W+9;U`>wi!ipKBX)9H38#xAs^s5GA z3repVrnM3N)@$e6N`n-4lk&P~wXti5S7<~L67!E< zNxv&J&i*vto2!B?5Q8Go5oWaOoR^PMW1+qw)FL(j3|kTi{=B(P_&B7y-C`masmw8V zMfjc}TpMBdcEL6vW3J_%;EAuP?_mi0@TKgkoV=$wFbA7M>*WaN{ndma^KFILxj_4+ zde>Fk8{bS?JFBU%YeT$m-<4pxfSW^EQZQddgX(|iF2*p`(YE->f+EDC97Nz zaJl=f#5Ul!+UIQmeA=1-Gc?O{tLm=k@{l~y+NoBPH!2w9vK(RyXHXsi6sMx-v}_hR zDEAUeAL9T!UB`G5k>f(b+_%mFBUn00Xr2c^R7b+5C439M_)M3ztn3X@S9 z?m4JaK~~Z%D+UojGye;xTEEbtVZ$68}oS1HMTwd_$wt{mQz zcPs?=I3nBbZN#EM7c${zs7QPDxT+Q%0}6G)ZJtoic?5@~RDc{?rSua#$s`#gGsCp0 z=PP(JD{n}sh0@PE}z07at+ZU>>PE+gaRh0G7oa&#Xq^+GX@ckVQ@Zx8F3lkdwii2&bm$lDmH zRJl_Xe|wigZ9Mz~D1}Xx{9n`-`~RS}m>4-({~xCHAGO8G$o{{nEjAV=hX1Qy`v0W1 zwia1o{;R45=H>=*dwV;(|6g-^TN|){i$KFMK-&&FGuDynbf@L_!>aPH$xW1vm zDTsnbXFJC|15>77`t%lAk$B6EkW8n{OJnHfhj09|KbJ*@ud^0}*0#1^eh@0ZyO89l1lW0z z@mu>|v%5z`AbWe42T<>A$@M<6kpVb;l+Ua4yl~)tif?cSAPmu80y==AbNpdgeUvZw zL*vhOV?P9Df5k(1LqG%`HN>__E|RmWPe{!YT}2%SNijy{9}&o zyN<0DWAlUlm^b+)KQ4kl6=>^o_%>;EbNSTj4~rVXABFE4(d$~izN5nzqWv5HJ?}VX&@rmi#(dln_uZ{FS zm&<289kZYKef?A8$Aft zzvWT!rP38el_YKK-A;)cX>Z^Bq1_K0e4a)69XtP6*>PsAbN}f4j)m|1w^)#_zW^Hi zV!Zzrufh8V#!q(iBK`!Pl$No?kNUj^$Kv4fi4il!pUa02{kXS|^S&U?%nZ+ryuM=M zg}jSURT^Kb2P@=$`wY%}4a!oGbv2dyBSQpIW4r{fL@88D9KgX<#@NL?To7TU?)-%Q zA{2%mEd_KH%sg$P)>=0K+(x0R+jqiKRyGea^--C@_V&2V@ z;*_F0OK=c;#GN%;hV&(xiASixUED(V%Pi-t-OVzF zUH3#&wgFhE5!=^5Q7D$1ue=%tV#r5Y-eQ_3O!iQ=0BduSpqJrZNIhf!0~&?I5>cHB zk0tcdFR2tKZ2=BH&Ioi1sW^@46c8$Mb9a$+Fp!0wUP@yB~9MaR@Yr7@^-DP=-VT4dixN_a(tWL&k)8b zd7#~SuyI9~mX`2Dmx~L|A=&f|6^5%qjY?GlI`Ywsv}O0H4P;ttNC8$0@(qg9n;Bna z5bG%=kEfX4)Im6WPUPZN-RWiZu8!iUwn5GDVYUw&9-oDqVA2GCOGpiLk+u1|dOM*P zlL}1*O6vm+tVJP5=sKI%yr_&%6kKH7NFEJ+?gK3VJD9=Za;BNsT#oM*lMo1(5aDh;1+Jv(-(W!)i7N(d)R?}%HzrD| zqx=Qta2O8n*%uy3q(b9{ROnm~16Q?oqTcEq)gJT~0kN`OFSEFUoTTUjp#lboEOlSN zojS>AHH?2s$4$z~2h1-Yg^T2x;s9@a68Y=Ijs+{x7&V9~fmk{f%EzJYa52nPqLu4( zl$1#W_s>X9j_K%0F+Rg1l<=7Aw5(J0A6o+&jSbKrLBjC-yLI<0Cc{fz-WjdGV;@&l zX9t1ireJl0pm|Fy#ul_OTD<+L29QF2f0g=Znw7G`PHkjlQqryNwBVod zIFhA=#AMc^ZItFv6Vu+89i$Y`uq_g`9K-K0hKc^mXw@$JHHA=2D^ZE-(2q##DRVbh z?)5N>?Op11H`ks1Op+tRZ% z7ile!@uuf22=$_FlTpy=>&4una^bO^OI-Yj5p(&wpSdij&@Qf`G#kl#9o-y|z>PCu zbQsuTPkcsH%9VJ$B;5p$QA++7Z{N_$XIIT9|IvZ{CWLaLApXo*cg`VEOL97J<`;%@ zZQ{wdu89~>wAg9Et@^uRH=A0t4p+9z^+Z=2Wc{zaPT$vaHBn|R=Y#2IF;S^pW-8axl(k6v%yXv|=)GH;stwGIwxv4*QzQCt-t=xJS2=Gu& zg8ExGC}$ufO%4_>!bq<$VfHdcax6Pg7ar~z9qX!$1`Ti#*Z5IE>5C$7b}QW|sF%qP zYl+_0V>PtC`7*thkU%_InFV%@!5ZIaBOGf|*;H%D#x1MPMzQBFQCF6Saq8$oiY#L< z^1Cv0yN%s6I{G1mWTcNa3tjYA*VJ3Q_@J)!m?_9L^XOyo_x@8Pk+iNI28BXKm=<`@CJ{8~f zMsdb?*j`=Eq+@q5@WNjnWW{Xw^NFyWa^+OC$A~w3py_Bvk+gN%ta*E^u@ep>$Mb72 zGnjlW))_o0q+tE}ICR^wBnPU_l*W#;6q zT{%Z*!<~H)p%xIS^<5uBeFR_`PT*CHWfss5v_6_C`#F9L$uct2(YtP{254t&{KGOv z+n@%cZ7uWK%yW1JU$Z<+6ZV-3;$JNx7z%ZvKHk$_sSjaO7`JQawXno9#fN_@$(c7OSs|~$!RKWmhidS zi0`w5FPN{9Y{-@PwfY-H7u;a+CX0y|{eU^2v(=TOH%gJ~vQ!A$mrAc2I2Iv<*v&tW z-SFRt|4ZI;oW!Cr_=*;kxN}&gs`CHb8Isa*woel!{x^hwAfyK<29dugmKKZS(bb#_ z!$lwbkL|kxpDgCHv{&V_a4&aF4f`>@L)#u7*!w`eq8~_Zkh7yLJeL?VFpu_!k6xL-cH-;-Htsc_1NR{hZcpQ_5xHuWJ_cAs+ z0!_g|?MB~??MWT;8)7KG{TSAGpMQ$k5-nkS$9Bxj63v`ch|&iZh3(C(H=N{a@__sn zeu8&kaENT;UC`#hZS|1$is;evQy_OUc2d+l5yYpEAHk;2(phSqcNMV9_|{rRtI_OI z&N*e^7#VFnlsI>j+uj!pd$)oA@3O<6LYAh(Ge|8nNopaLUCaqOlJW45yNL3F{?SNt zHB{=6gllq>*w{KRn-v2rUz?f=-^PC7xR3z1(d(ec_nQ|jCXC*Nrvb^eUi9YApftvS zdHaosSZ6uClu`o<0DXFADT`TcUHgfTiVy$V?0I>!sqvZb^5BJr*rFf>@l3xc0296%aaYLCK-laK|Dd3pC6&`4%P+RZk(KkU|4nFhw=#IjIokbo)(DlWBq`AJP zrH|ps)Kbedigfe*Q?`nj&a7j!!Aw&ax(93NL=d#N>uByJ>;R>p940JKycV+`SuuSZ><8!F9^()cfigvzM1u1?#djk zGJ)Ea!p~Y+WqAY*JLT=TKJfl~%x8)Sqy%21l74X%4^UW}53D9pt`f1QQj+WDLOqg} zn8Mh)(pf14BA4Jp?B(NCcZ4!k6rCQ{w2GJa^;5ezi}?Cxt0VF`5)-kSJv3caE>?sm z@h-M9zq|9hW4Ae#Gh1XK->I+Foj2q~e8`#jsWQ=34I-^vWW}tE8QkRBi3CAu)$7^2O?9ZjdD=T+sx=gdZMUgTZ0Bee>27(`(30L_QYcoNE%=@pVdD1TDSO65Qp+dD zQq&xA#!`#LGUF79wR`scu6VD7C;y4El#@c0Kv=$16ivkVvxxIE8fTgVd>2;^y!B~- z5j{@)vd!;d0=Moffvr${_WQnJYFzNf-X!P8e#g45r`R zN%Kf~2GwFTz|zmj+5lAf^(BSn!e1jNIoibq%QWO&R@AIQxJX3VLol?5pd8610hLPb zv`4Er>?m4>!?3r{yq8M0T%==<06@4^iQDiR&?Lb@s%@pD>@&uzBw@}4Id0N`eDE%e zh>To5H>~T2Cc4hwoaHAv3}q!x1}$a+@kxfM2(pbKQQikexU&!1-ZW(IO!}*Z4O_y2 zF8;ffF)B6mf|`d_D7XD#D5l|8ZylT}oGX*8)JS&cF`91%7S6tF*5F~T*>+B`DdC(1 zEtu3r5iV!a*5vSLH8v1;cORu|kgE(u#X+EhiZi$q)>Axejcn zoLV-|+?IaOB=7(qF;VdjrZ=mGEs2*x#xR%C-?F?{;TZ%c*%;o3RmPRqCKT;3vw3Wo zfRwIDOIsx$I9=*Dl|uc}OK(-V`Vj*gGHGcIJjt1i>nX?{Akbwoxcix z(888g{wp>+)*<2Xfn9z7#CWB>w<8D$9d?gaBK#?{kaWr}QWI}7hxuuZlrD4ucAjA& zyre?IaXaZyA#Q=(42Nue3ZcAHpfIs0TZUUk_b!t((3BX$oZ9TzHvXW$`T*~thZ-kq z^?Ft5dxG^S#7zISL#)UtP6WtYBZ-U_!r;p*EOzl3!gTyT|oFHN>d~r9v zSUqUNif+MP7L1}lD-e8J%4uHDF&v^x{n<_H3mHM7deq4CG#)#0cu(Lr6+w3)(aCk` zvz+U=9s*Tcw71Gv1@=od8}c%up-SUTZNXs-=kvb`G}Eu-R-@0RyphcE^}V$=b_fQ2 z29^2)f_J=9PR$rNiM6TwmrYk3s^7)ynQ{kh1Vu9-=gViVgDmwdd=j~e^H^W+J0mSX zB=kNDdq%IxZ zF!I-=(r}?2W4JAP+dhuq20AqDYi8%OS_t%f`+wW(I!l-+)z-y9BA#A0cV(*UDOAKO z`sKLuHTuz7bik~JS&LMvZ{5kcWw2JECVtGpb)kP|wa~!nBE2iD3D_}iFfeAXczox< zBdK(eZ8H0i>6`WnkH`rlqWaa!m5H*gF9l(JqT*kTDmxWmnF4BGK0o+&K$CqthOt#{ zXS7Nx<$JJ4SPGX2NXBytylA}Ns(?hXOu(?9TF;1k0tQ{+C2tl`hzZvg5&@gBUa;+S z*Kqk>+A)#bQWdT*qtY^8P*616a5`MgwE`rBBVRUUbmR7tP7qyOfd3B{Eu>yql7N2X zzSmYo3hF6UjqWyQo45>B`TMv?jPpI~v2-M~j=VGT>;W1#R%p^4Z>lD^b-=Kw!8ptP zyf#5AQnK=FUvhi>Pa?#N7*TyV6qRqT;!472sgj4hs81}}7ggsL=D&FjB6)|!5o0q{ zwQ`SM3w)t3gI-SlXYPzQwBZX$UZ$6K(UUF}P10%rqe3gGOi*OYB~BKP-KgIF$d1^vgo#glo7W}&S%3xBaEf62d6j8f_c3tNx`3FYoG)j zdG;wSaB7WVz$X-v*dyWMN7v+$0}0fYoanEJ3X>VsjpG70D6;_$tkbSl+&Sgz<+`DddvHG6OWnhZUq-tAIcdO&S6??svD_@`7- zo*0jPEb)DCTr5$fn0i_@V{6bv7rmtPAqe`c3C3`Y84I>BRJ_??s&l>KujY0SATZEq zaq*H!C)*x!$j}fKLSoVqod>sZ9wc{XP)Dh}Ripa46PIh`8D4So#?}0-vCZ9kljB_^ zM%3y4J!MT5{B3_)F+I~XKjid_)2dF5qLch&WN`a**iEyIed9bwVQC%czAgd`(wQ=+ zi8m9xf^@IZ2YLz#0L0T><86`afkDm2ym;mO?R4t1NUDycc=+Z zI>4}|7x<7Q=MMoCc7S0V6}nmrV)Fi}@3e&BnIG6T7Xj7)1rVX6g$!)RwGm6uN!Z zQpE*WHd@*m7-l3#i@#-ZLo1_r>v$b+f*=B?mnxI8zRrbo@P!1MqW2**XJHjRDxOu+ z_iedTQ<|C5oe`6E=J&=jlaF;>Zz5{^mm&YbEtdR{GXh2eoFrlYkG+HM3B zGST|v!w}$tnB&?cu~A`$*y{xLR`FOA^wsc^o{iDFfnYh%SyN+PSLayQJd1MB8_6|uPpJ8JtDQ?D9JTE&S%jr{t{VM>^Dpbj-%}8ZcIM# zXa{CS;Y~ZhS4>~(8MV{^czW9NW0)+dy(Y8)cgo9}Zk(B4Ws#V+G+x|K&K%%&X&EV? zAU$uUWk7>tTen+TYQLR@AzI9Lo~CbxuQMrq;@L@Fvl+Ud2!R+|Ph0Bakx4y6ZB?t=W3sL4Z z$D?13*0CJwQa<4Nx_P#Qr;B#*&u`c+5NFphw|pLg-cAZ{h_tDYNns9ryanPuuu#Ta zD;k$(g07)mGBX_Ey9;u<2_=`>M$2v@J@1w>cnp>JIXi!D9%>|-Q@#=R8)s!l;I;x4 z;_|AWEeLc~mO79H)Y{Kw z^v#e#l;msJ1hRx+&HL{lrST_A;WJCo?=NSS1stTo6Y2`phfjZVWznR4pJz55K7vx)Q<^n-};1zqlaZ3L${^WTR`9BMvNjv?5 zOG+}z_Z-)LL&Hie;4woB$MhP}_@@@VV;%}NCP1;|Byv{cMfNO)z)o?))&K-~@#Jkb z9T6JV?Nr25-g-FT&%i4G+sgqZ#orD+O&YR6Q}N6 zxR;Bl#0~RbhO#i(F7@Uxsi9>rZkA8>C|suRUlB=HT@x!?E=y!wu~3B7ScOrPQDMcW zf$tkEave*G-sRl9LOMYq=pQyA;lRW1Iv+vwwc0VQrUNCi#LGC@?v;J zmpnakzqLoJ*vB+M!?>Q#l#0{T<7FkICb z6@aW%zcl7(FdOsb@ZqieO5}+$rcHb{jB5&VKl8-jbPi9j2wLPNYx0zmJDqN)K&qRZ z4Wn|seVCDOCE0maR#zx|-=P66(%g@JqCjv2N|hbg=pw5lHIpeh+`^*Op~J&l>{zWa+$jSpQ~qhEvn-* z;EZ%iT{o-0^&+R+JZd#2pCnF9SsjmewvnSorr3Obj;{sVxtc+V#d`+G!9(`jY~STL z*LdVU@saH59TKDcPO2cdY84aMu2};N! z-BN~{k?tc?4kn(b5A7v8sFrWtEb6(47{6_HLxn;YIxv=8PUKVrNBvp4+KEvR7 z;1ge$r;_C?4TyseOC87W)9xg)o>g2`rKQMtP8hEKV*C)jLL;mPRomv5czsg5yFFi} z_sTEn{_1P4lmgIEF#3j>=^?e>GC+b+riaAQxVg@&_uxM#goGVTDGSuw8G&Y zlgeT=6i|Ic7&K@7*{>M~pY*OTaocExgrpanZ_DZ?ppDSjyG6%D8vH0Q!UuWhS1bN9 z>lDnkCdTfVp$EBUG1Xwm7yIotLc^GJtITD8+`r6^=HTLTtXyYX#3Rx_4?Bbt8kKzKu5j z92(^sHYwWVO(cs>FSV!3)f|8toe|IU9zS#(NoRf;T_+aNrAn~?I7gfd0hWdcMj2%> zy`kZ5C*`sp>sbyy>M*PRMOXJ0IYzx@rztFLY5rlI9pySIE|5%-AQ))I^wrv&`|kd0dKKP?E6u$4Mm&1Qm_ zGgOtaYH$q=B9pjD4f}_Q?`y+pN@@fuIob+pNVBD=mZNb9a6_NePCdC5hO7DGu9Yiv zu&%4vA!w2Q=?EuZ!m|c@3mm_6K6xF5#ZXA^`Tobjmy!2JT-K1MwaX3)SPz}Hm>3bO z)h?C$ki0ztA843T2DMJLA=NqL-i+FIoTGb{nBbk8yPsyUc91OA(;0tysk7N3jx#n; z#Gm7Gz5AK|!Ly7;@tQB}ntwYtA06!)9i`jw?=wLH$7d?0=4>dwBc((RX2IKgb z4zDoEEYa$dr1iT&o*1gcgz<4?rWJJWt&K3^>HvM|k13mURK&4R3%=Q9R1#~Ls~IH) zT-~}bx&el~5%-XWdH|KCR!;XFEpX;uZK3nS7E2fI`>XXMX}KQVJRILwRmQN6^<_?N z^zvH6`JWDjr1>G9plCqEQ}Jo&6!}OF;8y;FQibUPU-jTKzgL~(FHpswuHi+b6DzT9 z3%lY0B#oB=^X!s%JtsxPAXko_X;zxEQ|%}t0t2)pE0+YKWu!xhw2pi-P^gMV1ZO+n zGd8#ul9c&5hk9-`pljk%DrFPcZ%1-NTg!v%e}K=n&9Td>@jIxSDbNy%JySNI0dv2% zLxgWh7IX(iBFDrm^X~e4S%&&;o&{%-h>+d2P?A9@z<%y)v#bSHZgNn&eMrQOq8xEO%qF)p{~4vN~9U142C7XbzOzsp2{#o=p=6ycT`Ku8}uLexkm zbbzbh0jn~B>8ah%LTziW?li0Bex>O!r&VfL?Fu=fXRJyDwYj97m#QtOc(c-_hg)D0 zx+zkX$?G)e=siLlCiSLmA^fHW&tsI^q|-9;e&mQ$oeYWz zCCe37XDR^hj?skMo<+kX%V}>>zwq_*1kDM>R&CHBqce^%K1dTr4`pj0`{iY(M$25Hs?lej53gmFIY1MxC*8X zegpOsl)?$|neQSsbmgT+Yx5-c&;3L# zkigYd)UD3756c%^h7sR(R?`#1r;seWEdP4=abkdb5={fm}elNg$sw47>>Fk$8ef$}{#c!W(?^1#3kheHfYm1slRnQ*))lZLN8f?9ck0bQDz2cl9QSucdhu!?(Ri9VmApM>{i{&b&_X+g|nI;SZc%3B4-gW zjX}ug~4pSx^cuFW@)s6#1osrGPH{s&3F~~mHFFR$*|n;5|2$KCNv`Qit}#8|)DV)S*`$&_|y{gX%|VPXY)$$r?ZtWwx?uUK}j-77>NOfg5fU zwgAGrLsRiQF}2qgdF{(lfF#Fa|38eKV~=Rzx@F6@ZQHi(UAAr8wr$(CZSAscyY5aW zo$gLf=iW~%?>|_1=9pueCY`Rbg!EJFqBgIsHw7h*&LSO_~7V=S|o8FED(wZ~1Z&McggSXTxuDxfAM$+MRjT0XK@xbvv! z8)Osv#EKDv)R*&pwF^(!qeMBTx>@HIznx+chn}`yCroZM5YlHJTj&a@?NfU%qk$kk zujjNw>L~Kq?V}){?qyA!6=K1WX0%Wu1++T+YoFm9%jo@u8nUCckmJS$WmY6|IK3ia z5=Ykm#FVPEcaIMH#&B6(s_$)3&ptBORu26f?sbXY(7ci3msE89#C3VqU5M54<-3ML z!K%MLROXxq%roZ7(U@Ojt%F;Z@a=kdjFmLR#HQmv8)j`+V753swp(h zvQx_%!Sy+X9@{}Blw5!4OzV8Zl#i_kxCk^n!uaYL?1Aa+h)YV6&O#q$W@>vORAI0= z*Uk1bILKNtLQw|}z@v86FYds(b8^qROXgfH!b`YiwQfs%oE`t87^2SUy;i7L9Lr>) z1%TZ42O2+!Y_1S8|FQkXtnQNR-~(@5OFDwi;e7-7yuiAALuCIm66piY&1H%y#syzq z5Ag%X&DwP*E(cikdExG#xa^4t5_em>kBV`wJri;oS?*F$Py!*vs>*2WW3P=YXk3nv z`po2tM~O?j7vgx1ORNN10x|a)y8; zIy7EZv|`YdF5{zh;P(#s3rSYaHG@**rT&4;eNT6BQSnZWkzKsPUXy#;5z|h0<1+*##)+(TmWP$f-sn(*+?W_&^S>38BLx-)lC>7H>^mx>XaR3pZ zkSU#{=#OL34(2P7<(N%*C0hhllzo*CS}bj0twL=Y4VM;Wh3G3O==#Y_SE97)r1EnZ z?p!ow_JM&xbwHbNSoBFVu1~&yDiM$e=G*xr8r6mdEva>q&hL@$Kt}0OEQ7_Dmd<4K z-FkjjRN>{jsp{Y+Qb|*t%As~M9b$Dmw8u;FkrH5ji}Y4?n^);&ikkOJ9>Fa>(smI` zxQIOdx00FC)^b%$5bhC|{IYoo&YAl$qp6QOEM=*9(Q=q_NJ2b9F{)|ZT-YWQ*oPm2 z$yApj()?9giaSdw{$BWtv_?wCd>hBj;10;lM{#$ugo-+rL&6rmQJqnbf}PP1P)1zA zO9Jz;cnvB6|3?zy<%B)5Sn3ybHU(#$>9|ViHacK=|sb9 zcy^cc*YaBw6eScW8+!m^l;4^QuO`Wqp-vwz*tjRwyMR|mU^mY7kkN5i+<@gY!GsNN z{okDxJMkyDwuumpBQg35%hfW`gN}-xE6J{vW+-T~mRf9W-@g$t-oerxu!|nb_F+B< zID`43%?=$V@!$E+r|^vS63hC#WxY@%h}eJ7l|d9ma>lYKw@Zu;hcUtazUEc^Md6X( z!>Rd+GebfQy?>V-OUHn9H{6ET1D4bhJ-*kit8*1Dyrykogt&}xO|PRGI64%Vpdjp; zw}Las&pWGe?^1N_DWD(7ar(k)3?_l9TD^nVCc7mlCl1T#`~zZJ0K#h#=PX|uowW8q zn)u0rW20#Dq$|$C9Tlerr3r~joWk|@u`$CaI6}{>`NWtgH@PcH74OvtCPK89OUND_ zpt3AZz>b8P?1wJPj-D{*IWE6gbau%VcK4~L6oW!$uGEzW?iN~^{-6{i5&QD`_M?|= zj2_D;WH-XmVTU^v>=h%PJNU7BT4jK=;D;-r)DXD`4MJBuT=Tv8S2m4Lq@-jgJ1IyH zn$@}4%OpT^dw~CXRBZ^0_=p78MLH#w>ATt2VoAgB=ktQbjsg*`duPE-GE%PLPhVF5 z1O@|n8~`u_(uohft2<5rtw&ep1LE5IXysgKD?+AA^97P}J>~uwldPC7Yj_CU)yeMO zQJ`-cMUf=@bO<%eEjEWT2mb)e?2D^m;_D1*t~Q6Ji>|NX*3|uZ67nJ^EMk?&!-@lx zk%R}zCebm~G2>ctLXlm69j(@x>jSG>VI+1c4~h4*qfqVq6;x-DFA(9J(alLdbe;7@ z6Hbp>TC+hI)&>I3Ty0|k2=TarT}-)b=;XwQk~N7+5u3D%ONz9$*ke?z(Tp51$V(G? zI)w}eK1GRMo{x*FenV0%Dxy|PVT_N^I85@;e79QT+^MGYeXNjQ_tgsl`@lYSy}X)8 z7=!Gx<0{7R_SsyiG5aN;Y@shc|H=NH{!`!>;ixKKN`Hvo+-fxp<$R?yRg%j{*Q+bE z6Zq`%diS_!bU5u0PydOptn%Lme=&W`G;^pX!R!Ds&+Kl8YSxpE3Xv7@V?}=>B!%gG zT%LG69c*RZUp%@uF!tCR@vtodHw_Yc+o_p?Ehy6~o}+OMMs+q}wAP5>1}}p(L{A4$ zK4u9_ss%if9n$(IfIqiLc)TRltZED~1;?R3FUmxc6aXdCe`fce;Rqq4Z0a4l0J^7i z5P;b;(Ou$cQHZYpT(wNdmDvZ!NG)q0lqY#qW-yIfLE8kAjrM>bR zPSAR9Ao3o}dwk4{N3LR3%fks~P@9=vNrZS8mR~&*J|C;MQ>aJ@p;V#5587UiI9LZK z3TJs3Kn-{vuCx&TUbf-Sk;Dr&Nxh>HE8vOHad=~Owo!UrZR!Oqe+d-4hgoYRoc4o2 zY9d}OCpvOUHgGRy|83-Tmt0)uD+0%U++a>&Ur^mbpLVl~iGjlX_~$$#@(uGns&zkZ z-~;V>hhk8$JR3qfvNmE_RyE*bWB+QK!;aXx(y?ds;ipSMoTaEIEv}+k6TO-Ia5PVr zDy=1&HZeF)yLPEm1+8}=;iK1jD&NAVv04}XT2}^ZkhJQehQdVUVH9+^dkM_d}~i0V01S#IKUARb8w3;4IL<&a)R*Ir+05YCOI+D32i{K>+)7KnV=_9>qtGvW~iIR&1Il6 zgUo`dc1^Sl>E1^3<&~=R*uGnf8X0=Sig|e|fqesTK$)dEo zHb=_vl9Rlzh1M_pawD^OZZ)Lu=P52{B;!Tetp1PK1-WbukNj&%qQ$i;I}P|qR-7#| zl#E#*ovOz+NMSyGY>_|$pOL?9fAZvV()95+FaF7P!IvJY+GI3qE$^p9|1~4r7$G(+ zeFE||v1MD3aqme*o}*+4RuEE^G5Si;OePkW+l06BX^qK)8!!}BKbDty-^pyKE3;+V z-W0MV)h_2Zd0*w>C0&XK`J;jVqgbIX<(Rp>$CfT{1-+80$^9c!=Vq@@kEFi>Ce07<)s5MR1OKN;)Cbp3x{WUn($4jTkt!cECH9L>Npl zIr`c@^W_{bALccC4FbuvD}pNcMgor~*5pk*A7W8eJLPvWbT8Jo>4S1Hl1cTEQlPzK z#j0{SRXMJK!rtk@bQyI=&^!EkBpv^)wINjU1TExVS^PRD-P;xQA~2=&7~@S!$`Y{? zoNQA<92_?ByzFQC7 z?Q3h~7KUAkN|rua_oSQbbnJziGBt-;&*nn4Ku;$1XyRLO1?N8uPApS@v=DZm&soN1 zq(3J>Z@R{%#D>imj-Mk#Bk=Cb)T6PK7$%g)WW6`yP>-drn^U}kXaY+Gekt{93&>AD z=9WZ0)#~yDH3O{a-^TQit|@{`L16HZq8*>Vf!nT|`&`c(Wg5iq@UQPnNqM~jv@(k+ zFc_OL89@aNfZtvT0=Bu?g|D}Wx^^j{wTu(8rrVASDb;F)Z5`t#Z-fvRP;<$98@9SO zF+P_a+|SHaa|s(8MNgmq9ksFm>4DnU3ZFro3soPrCat~D7YM$9RPFs6_!`-@3R}H= z0q-)Hv3S6Hx%tNpR7RGQuEB5M=TP8FdWT>s5|W!eckxVXR-{AlPq}G^8DqoC@B^g z?Q=yb+hoTs$>!^Z^FDZi4%nz^7v1~EE2O73Frw>~<^?LT_msa0yk;@=p}Z*hZgVf& zyH#7Zuzfej1<-X6ifcoITp_UmGTL6A+U0xZ4}8G{EZW{xAQ{!`{2I7g$ts27@;Ls6%iQvbRXY=1qc=h6eF8qQn|= zXEB*p)>wPUU`5yr+rIJvKTMO{+o<`-X1{M0tSBJ~$T?pS>=@T*y7I=x=GM)W`8JGP zAe~5P6Mwn|9}^05^Zk;R6h|_`R6n=aRt%V|2<}O zf(-@VUVZM=xb0I*o_oeBV8jBfM>?(ZuX$ubk0l+-W9nxF9w|{Vv3s>4T^?EA;ahdq zti)xbP36%x6$z|WL(0oBMgHM4LIu_=n#fdM z4A9@Mv6D~!qz1o=BFO`_bR!j+?_7{9U`ilc{vnx4aoS$iPs3l-JztXxI*?TcuYlHs zTU(*~)RTLqlXM$j(0j*-gMYY9OI~waCb9Ij?HyA~fPlM-OgR|hFc8{g$E_|l#5nVnOWO+U z=L1OqDv+_&7=($0fG|xMb~kgUcg$5JW-Bqr$S^i%dCK~6d|Foh%I?y2OJZ)}A*tX_w*iwH; z_4M#-CKqZepBOrKrvzqb1C0pkt)D>6$qGCdzh~u=c7npXxXES45|4<3 zS$)T8bq?mPi&RHq=m_q^zSb~B8n{cf07e${s%b$BQq!4|B(~0 zax$_1@7MpmD9gsd!TP_{1O)%Rn;=F7R3+J}t(5!EK|HX;+Whu5Y$6i_aCAQmBMZc0 z4pLzFzfWS}qJ&gfv2z$u5WyDX&+pdbZr5s$)#}H|=0AgOpI6_f2cIgL53w#N!xmg2 zR2ZQ<=$n5c04XjmEFu5`#V|Ms6jFU7mM|h+JijfFs&aT3ISO3TmmL5pJOo6*17#2b zMK&A`*!+_tAOr*;hzKd@FiC)bKLG;8Jw3seFj79uLueo%mp6bc2h4$Fe)4LN*2c%(fLh7b=S-VOr8-f2I8PCWI|tFbr8Kl+cn{M4=w zaSL!C_`x4Q0S>*K7vv;j@-8rd5D#E^AAlIv#y=Mu8@nI)&50cVkT1Y5?KA1S z2?6DW8q?Sg-pvJg;47a&+#h%u6lh*~aNNO zLEz5-0Duten;DP17koMPVA34&#eI!9G!n|)F7R(N1PBO# zemO6YKDa~hAjD5?tfMfF?`HY2mw*possPF>2ta>cpI@Iw(HUsykoMP4=$)8wz{!>_f(%GAiQ zTKb{dmtU}8tpa)Dr_(mj6i|>KahMW%FSF&>A>@&% zUBY;BDeG`Ot1k;-1;-CFd@2Snj<>QK5K$380(kg%d_c=*3TY4o0)He5jDydpzW}~` z7&rk^fcd6yKpg$N5Wck<>KOfTlYyTc1N*ad2;jqW3dyXeAcg%DkCh!I~Tp53d%3qS&4Fk&c9KFg(J1Q?!rgd ztX@0lYsK{~?p5hB+t#ME=Wb~r6?`kk)IPx9&_~-(xDN6xJ;LmzvOBHxqu;JDOA4s;$o=t>AS3=CP& zv}0$CSEuow$BWUR@PpQ8Z?DMKL7`LmXm3P)BWunsJd5IQ1gG8|M6WKW?6+nnWuzz- z?2cLIf2s8c%4PxD;QSmm?kL66|2iaO?+MLlYCE$uOR1d&)2u#Q6S!u(EBg_wY44{5 zhprHs+KXMp8DE60r_-Dg)5g`^LCYh*twT_ES`vINYw#ZEy#5T*eytwpz%0HQpePTV zkzgK0MJzOGPss}}ewS-+A zw%mjLUuq2H48L$HNFa~NQ-IMk7cwq>K8hu641j>F$k7j-DxA7WmHfiYZmcBuFD9!D zH5?9z03XtL?^Cm9>?p08Gqmk7El>K6X_lzsGr!{NBIa|mb3cuVS9X0#kHSjoWu*#{ zEU+t2W@3|+dA-d?(mpCkY7TN-vlNXZXl<(4>3B0T~+G*wkJWx=L47<97!~o8$Iz3zkxdM*Z#}gXs&_wo9t6HE9M1 zeGK^qGKen^m3)tpI(})p+wYYhnaYd~lGxu4*Bi%O2Mub?8ZxhCZptp(jzT_G2;W=n z=vrMDtp_8LS?24)`=;IC;=pVagG6*04e#%AS!i9PTYmC;^s=j2c9))e9_#H_r=~Y@ z6?PRHw1J1at{VTHsx&44n!V! zRN6r8+G8z4uPxFmFI2>L_^@Wn^dd_=;#(11VeXlppuSPmIy(0WFB-|uMIy`CPY%WH}{aGT~YcbCQHhk z<4=8nXBLIL1`VgbMc)b2BRe zR8yc;di$Bc$33!e08m~>rGeTUWBX&FlJ^#MH;i8FAxN=~iNPd_b* z!YB|+rp10we`#9}zntZAI&yX#d51Rkl6@M`^ZIF9ATbt^`GFWTUY5q?aYu^JJJLbv z%$1<0;cYb7FO|?F_7(08!yEzZhqW~3R1M9KH@nd8h#iMcO4mvH4a#_Kq)tfDA@({+ zLr?6FB$(8`(s2YA?TU_P_!~M)QK@i4Kl3YBC~O9gf1K!!JMFOj2^I%$?Tb$iJuuR0 z29;uHGqT)XbItR_qNAMO73C7cO^9tKlbd`+jcR7w7F!d6vUxk5HsU)^VY7-P1)p1C z&FB0Xk57;in%LtkP00aB4O>-7Z0z}z+fV34%@mvNJ$LI6GN|zSEiB1nn`G%D6p$wz zO?onI93(eA^QG)5i~O*N7rCWCW6W+SvlNjn7B9{jH~_&_Q0+hL9_N<#2dcpi(z~Gj zx~lR({S*uKk=QeR6H_19U4%lgvfkvf{(z!z?FS%qfj~?4@p3R)yyiDA5pc zaZ}gT3II?Je)jQc_kE(avU!W|wRmznx$gwaV+k5cE`r~>aVgitzW#_=6+8|S$O^9= z93ZgRt8_q6Oe)WXLH1r`yu*KrdV;aF50@GZ%rsgA>GRLuILMDR3^< zzSb;AOuKE7%L;yi?GFPixA!^)9usmFf>K7E=CX^72?^HAA!1C})sYl@La;O5NKamq zD7}6c=N$>Zr8$i1GShwB!_!n74#Nv6DHgtGM98XAUY6*o_26?5s#&#M@`u;U$rbN; zMxWu3FgU8V*p;SINKi=N6YY`DcFBe^TQp4>Qk*EpMi}B8w+jpT!@;Xr>F2F!CKsZ) z5!x6ep_nJWO#Y^7#U^^`$mo2p#}8bQY)EQrd94F;Yl1KR!J-%!C;99?bpA03OK@T= zZ`>7-o@YRGzq!=?x=(mN5M{T3{B?#g?~KVo2X3z?_bjh88rGBo3Xasa!9W`4dQ={k z3db<+pxTq8>D)BkU2P0XEayv!+6j$|;2eTBgX@-IbVGWwpq(;J6hc6{m?nl&nXZSi ziP}|-{e9w=NLu!%+ldA_4Sx3r*m>%BqAMKwTo;9+QmfaR3i6X&6{-rShLG{Y$xs#S z3#r3L79ij0MF%$+Z={4=Oq2a6m4|LD3vzWtxQz{)y)$SBt>SI#hgZBt0)ug_$C z4;C85;FiChM6lWc9d)uiw%hycPiipN=mRa~Hch<@0~!Wn$xnZjLjB82Vb%t@Qb~#$ z{&dhwl7Yu5Nk4z8M>s0=8k?>&^2mXQL+)f{_$i^ABpg$r5Y4(=c19lYsP5i@&AF)E zFqDU)CpGY-ECZ;eXUZl?Vj1Df#>QT!1n;Jm^ry|*KS7({m0C8l@(rJvcAvLim~Z>q zXbRI%uuII_@pT8C2 zW6}?Gmqf+$4v&t^= zEA~yj^)&Fx`Ns4*XDl@*yqmJi3XYs^o_MH1%_ICwBg_7Q}d#tox&N! z^X-qW^+xOYjX00qnz5<%hJrBLA^25@wh`+pLeA)ngTjz2Ywx_3*x~{o0I)1U&0rJq zX03!>X=LC?Qi530hmT-uisp&T`b`swpKyp#7wk;K@i{PCOWa>6dI;BO%6jE5B4G4m z33`~`ovx_g7?7IcI%aM2Z|%eDW$%c=? ziIWWAU$Li+dJoLW@3yY^oFsXmccLmcjWU4k->lPwNPrvf!>M;?Cp_k{rF^-B+*KBeT*+}z}G6fXsJAS#9N-jY3lR?pgD@Z zn7o$CReFqQ&S9-Ss%@7g$5NR4@`dlvW!Uh*xqpkYB9^%v=11|QwTA{Ee!eX0OkBiQ z@6>}@4(>{5Otj91hZI85u{h$G@qFs47-VFn($PH7VyD)R^$gunOC$Oga>?F(P@UsI z7OaNz39^=5Yur4pKTv!tWcb&5Gxi=ghW3J-wAhfz zR-?>c0uGf=i3^;T5{=O=hjdd3gRX81q_wN=QhD?iGc@E5hz4=AW{4Nqv-!(WNn10gOo(>F6@v&zZXcm8<-{h%+{AiLc1SS|6mEB zyde_cNh+pHuF&4B*NH1ea&(k!Wz?gS9RWix2!^xnN5wwWSx|FhtdeoQ67M!!@STpC zJqbafxWd!H@m9NAqOISUv|c+^SlQ2LW`SB-#l;?V*5^ML! zkoUEKi-#mVjBbh^9xI@7duAPu|Azu?s@r;Oks2m(NEwdk*jxBZ*tY`?pPXL*>qaE_ zbM^C#Cw7cVp4np1+6DqO|KHfM)&y86&6MJ6gUjh@{oGf19i-PY6HIe69h#$*p1U-& z-%|%r#VS(M_EB4EYwk{uQ-Z*RW~O@{I^osNJ7AKxwepeYxozz@mSk`O%Q*MR;?)4E zd_G9tn$zr70c#ir`C7_N2rC;btm5}-AItTfrz`fh<@S;L)=m;mUC&`1rEHI16*tqB zHa*^LB=WhuA@LHC>{MOlOk*uEK|5;%coI_`Zqm}a@}s(@oc4SZYO!I0mFF7a44~XJ zT`4=4f%PoJ)Ks-*G@7p#jZTnY(-23O(NLK8JBr@Jbn^(GJiltLP{U}%Ih$LH$}w4& znf^Li!ZgKk?g8tFe?mO^%qRUnX|Lovw9pp&E(?1;^oz5_=jf6(iUH}lSx7~~kEt0a zMCj#xNY((JRp@~-pxsm46gRk0SEZ|Q+wr=I#8gFlwOMl)eCk*ze6{19Hfk6f=;`V0 zJ7qD5NQp$X!Ya*8NL6bg_$$6~O{r6gD9dm7@(xtpPB417}-mX1@M-7VBTYPBB@TF#%;YkpI^Vs5ExT8o36YHQp= z?Nb_h9&R5wN&+dO@T)fp&hcmxE7#-T)XJpFq3ieyhcKTF9u{&X+AZGR&7pobQoBQJ zWHW!W4e+zrR(NUr85WzdPdiT1O!5-vt~TLFR5$H`mM(G+SaKRE_wD=cZ-!Eqhse2& z{PZ1V=PrSAbE%BWvOQ+%y|@qPRC4M$8)09N(qPZW^P;*0EHs5$7RIx?iw9{yx|+Td zX5W+JR`0jTg3VYP%aXYnL5`&vfwkqS;AW=lbJR};c)wD-LlquX!l4XfYad*HGyj|N z;aH|}Bg&NbBskr2Jj8S!U%gvpaYVZ*I(P2Ezv?}{Ww zTc6|i`_jWw4o&j$EVdwke7g1KAZ-Z)YM1RdBbP!|OQ*_K(nk#tqf$A*3wQc_cxl)? zVJyz@J7tFUMql$!2*axp?akhy`|o30gWb474yIsrZ7@L=sHd#OP#_|uV0oxSI8-7M zrxk{kX2Qf(C19vpgGBT@J4=J=mcCLj6cuCp>C$=v=Zae2b~PT2mxepYWnhC!S+TK5V%F zb$um7R6K~VmdZrwGbtl&UP!RCA8jtxd5(`-u}A=Lexy`*Vz21b#R#N9@YywMdZ6r} zb-#2~7n`C?K=e${bPHL;PLY5&#c`qEzZtr}v3{aNt9_WR0@I+wCt}Kxf&SKEZQ`7I zATzptiG)|Ye*mY&rP;ct5QoDjjHJsW$C_8-YmZ%bNy@Lw0W?P9KYOgT9#R6sKu5-E z7dFy`ax+v~0K6f<8`;rqHAh)Tgq*L{jC}5wfVVE&XkB3^@i8*(lbg0{zH%EQFXuhc zj?ryxdvRt}I3}-x1U`qS7q%ceZ6d3n#5z{0{t_I$%=7ZWN`H1f4S63MtOwxkN;Wdj zd>@$cM$Bcoxj_x8N1>EO58tNBUTT6pDltaw*9`-#<6=G1;yg9zA03MJF)9`Nd~2Y zK)bXahCj1~GK#LSge4(jtC{k`$&}>1N|9cN^ITB3&$xBQqL3nj(tt)8CeCHrEhq## zkDVYSx5b+n{rETE-rUC{rN$x_^EpQbNffLXK1Bz=(@@RY@%0yaqsDCKKZI+HjQ=rQ zWBY%?HOBu>xW>x)KMvR2z*(|&*4PkjKo+C}wa72Z6$`O@UjJEOji(uyJ>dt7MB*iu z%OQy&2rZFVB@hbT7LbDxSSQ&j=RSMqK7Xxzc01QHKeK!4dggY_^wxS-?;NqRBFZ}p zwDl2Ckf?#sP}9JdVPysm{M*}$%iG&Q!qe7pVnzFZ(gnLy8Cbw#g(iQ&1#n@54DZ=s zDbV7W1qcCk^gsYoLHd~<^ff#j90Y{4wQuYQplIRE1-|!e{R1fSql5+-2y|VN-3YL5 z_9I5{A77CW>`_7b9UU77`vw93&|_fTK#2l@DO8hBL;Dp{qX4ECXzw#v@9`@^P^vA6{`~wDD$qw$KwTG*P{6zmHRSqJ!T<|@4s7}7!2*XW(68UliU@Z5caY;eZrX-A zj(rF(FaX#I^y?T%!0-*CpMwblzYPI0kTNVsU@eeqhLaadjj0pgTOEZo<$h~*AD`qoWCGLi0Ui6xtHUk#QJyc0rpXa0U`WB z28gt~llQ_G!=rfdYHW+A z@H4*4i{ZvOKly2bWY@D}geKV!=H}jkar*5UgU5%32e=x(-vS0c;Lr1`!MS^K6edIr_znHdtiuplQqhu^K64xU zeW<7?0P@#Iq;wDv5z@o~_$A4p@kRWYV;NO=%VYW>Rs}zg1v>Ioi|Q-wqkj1m1_-yeS_c zDKQ10z=DMZF$j;@mjo6#;7;2)0OXs1fq*PpSpS9qu&Yb47b_IxE2kobgzzZ#X6UOa z_&a`e5hZpw@@)0;X7s!BtHcC@2H*rL8(pZ4T4<*#&W_Kg)^kALxaDUQ?)LX0Az$JS zC9&ZoYy9;44oD9MTLx0E@%zgQo;y(NhZ@bIGdv+9gdDYU=$o< z*Ox+5&1Ydk%=gc*wh8IcGWjsm1DYc6KDN#d5B~0@$|$IF*blBIAU&6Za*vx>nyf07 z$rFW~J-%on4bnAn9^B(e*HJWsQ-Z$e`grYvEw}>w?KS)Y-;e!lK^74R)V4$-4P0wZ zTDunu63gSXHqg@G;E>_ev{xHhRkEH zN!8~}m>T&pUoQuED5VY08u5izkl*s#^i#JNwWIy1!J&ctcGt+NLRHyh&ZHXe*T5PJ z@AW}h*-_Iv9@1gG54vWxKG#!P2>CajHa}tLCQ|Kw39iFWndV{-^C70PQ;`rR6^*6O2TgI+P0hTH^ zP6+a5F1;Db3I*)Zyu404-tX#&GEGU*N-vM<0*J21+wlp>* zk&jhN!nUO%Bd+78trhgAiHT(_OrBz@_~!ACgC(yUf5w#9>F@If%Yg&*D21>z>;7O; z&`5%-Bl?Z36Dz-5U8k`n^&|FJln<@E+*gPL7gqPz2r^iXXCA7NFd5D$YviUzu6Q}a zPm3Blq2l-CnS%eG(#vs1SNC6PWsxnpI?oH5zMO_i9Y$t;nmxEoa&!F8^|tYMU;6}d z3`N^tmC7PKg?PDX0-@qNhge!Mo)-N=+wuNmk#h9$8 zlwyt^rQc9C1(nG>-YPvB5kJ1nR4*q&3i0D~;*K9N(9vGcR9|_<(yLIPC|JU|>`=$- z5%hIDRnm<1B)%$y(#lCYk|i5AoYm$5`0FCsK&?$}2}^i(Y!PFla}z&N1~} zGAErPNdjVZ6`cLD+gdrfUsEYFnu?4$Oj;s6(II(eKel|S5@{VuDV_zzn%YhI{HPJc zyB6@N#I2+XAO~?xxMuj~>bPjjIBm&ISp;eyaZt?1yVF34UHO+^Q?xN;B@es^CdDhg zYd;A=#xtB3CB`sZ8eJ@*REOI2r@vNJr8nk0UaezJUTpN9wO>vk8aCIDry7&IG_#Xk zjpvuqC~`d>!>;hUx4Q5Qs>wic_18Q7z8uSB>BXfg@e}6d@S>ORf&9`x1fgb3 ztL8>iRp4PlufQ39#pedK|9V`Xdbbi?VPmTmM;Cu_TsQvPEy9A%wd*P8F>voX$n2-$ z8&hpH%J(w9TNnG%uxr$-pT>FoR{R`t-2?h)ke4S*BbkZ;F8t&?!MAx5DSJ-udxB_% zVz%g6f({+6*sQcT?geUS0+oYQ7`eRPwMb(?!f*6eCoD3W9twK9e}B{Hk-%E&)`5Qf zV5qJm->;8Ki59JMiuJM5JC0U%Mbx~ny*flN}Hy1L%G;Cb4E4x{oUV7`feRFvgXWlJU`fm$KCZKkepuo)+?!Dc|7XC z+^AYJLw%OVx{mWzplnTq*i-Mi8LGH_X)wHpvgEafw5Cj5uW=PFx%j*%D|5H3lI5d1 z3paZ--^-^CY%BVj(T5NEE&D5v1V^F$iKDRZTv>hip1a{jt2c8=9ULs#izXw=mU|d)x*C?Nc47&Nn>y}e(7P~`*GV$(wNdSKVBxOK zjMZ%{0-e zA?~}Ootgfr>jig!TGvo2(#z9TQkkET*}EP|6nkIAf-A?X)?$A{0A8Sg_|+RCeuwEvjY-9Mk|rn791X7F7rp-H|?#sc#a zGfIzDFtIb-zAoBHWKH*64<{Oeqx&uR??mnH22*Tkh1F}9q%LVm$NhV*p2`j)#ETrq z%BOWAD-`ZchO2ho$<*7mu5)1%0#SO(6@aNDgXf&&NRFgf;vcVBj0<**VZ(*7y{9h+ z{BNyICWcSeEhRN18W}S z?e_PN=SIbs@|YKHM!Yz?_1$!}{lIDbOF_7qM;%`tDGwV=4|GERyK?iH4CiR8#r-NR?g3g~mCvLuOi-TtTL{M+4R`52dW0r5^ACT2#;HgD#noz^U&;HD4p)!md zoZbgT^c~W4R#{wUo@(Opm9F>WMv_7b|MbN=x&lLkFlf~mTCr0dM>QXU%W{?T*4l$3 zzrFF){1SFR>dPn&ELRL-rppMxItJP;&y3$7Z zJs;~9orF47FMCTbrx1XyE7IXyodb3Hr{|ZwgZIbl^An3@2goJ>RaH zluqk6#l}~0ZmHpgD@Q*E1_G;_dM-3Diy|S9dpA7?SjoxOdqNX31 zKIewJw;2+hIO(-dm^>fSZ*=nhe6m8+3`MUap9*LfN}_sb&-r*If!nANtl2NwJB`{& zTE&L;_hu;<1URWI;4X2(kq{QRE$*{9+25xr$cx45i8bWRh(8f>(zt;3Ca zaW3vdalE~Sf}**PI(R!$sXyKR2Ya|logag)Un9zj>ENX85%qkU3*n_zR%Nw(ZBB6pEfhvhY2cZ5z} zNx%)9e`99VE{29Va@dhVYHX9WENyE>V=Sz_rQreXN&{oa1Xt8cxuQa^eJ(aL!ZAI0JB;ZDpa$M)rn>j#&arR4)JP#cam%dW{FPbB5C2zaqtAXAwRSwJDuK;a z)y>v==MwEhm6vjBtH|zrk#e7aZ^#m5e9S?9&n{@1eeJ8Yy3^2!IUA*o$y8^*i#MO+ z)hW3dxj;!_PYQF33zu8h{w`&THKq_Q({ugk4aknQCNA=}ac&I%!%Bj-P$p7J&Z9!+ znrY(f9GUTuFJA*YW#XMx9e*_aYw z_!h4}m6OIP-ZH{%C<#?;O7oS5gZ*-pR*&vdWn1Z808inCSVBoq`z%+`mtZhCd^)(j zSo_&F{f^!0L{EK0we#2!h@+g(zDI709sU9{rb|7(F5*$EK- zwIXC>?}fo#eHxe{f*)d>VcR)y)O7|95nw0W!ee|DQ;(Nq!boo?Y{9D`RHdx$9j^bm z{6@o~%iZI>(`rzzG|4_e^dxIGX8HMwgyadWAOGmnITI8^4}UrlJbsk%Uhi;;!JT@qUK0lD`(2L8?cS+jISLCV#2xRvOT^2PRu+?kXXRZ;FbhQu8Zux|Ce^(1ooJCK<+AT|*-$EdOG4d11q4nS?|6 zZvn>L?#0EyvTsL`6m57{Vvivfb({XAUA6)gUIIUycbfGyjJ2 zHTiKJV3F+YB)Q2L;vf)TE5wPo502=T#k=>v7(2(2`!T7X-Dun8me|cF2+GvBxEA|ccfM6D zTEaojxmas>meW~}DXk{~zTWTND_oALpl!+AHJ@ErM?{xL3(Q1Yc(?WMgmXZNo$f3uukMv}A3~K7NGt}%}bLS=aOp$Ps zVgz;lm?KRpCD)=Ie&Jl*Dt5m+a+=-FMhNDP$fPEA%vx4U<`%gFpm_H5Q)P{4+Ke07 zE4~W47S5fj4<@8&^(-i=Y32vlp>L817S-#A3?ds}i?%~-X1f;kRCXPWvlbBHixuop z^3mP0!m=n3Hyk7>@`J`x`xEZl4n`noyM4d`Oo_zbHIF4x(p=`bv`Z+GZc7_ZY%KOW zX2>?o(wE$|5Up%{^Xqx^ex?hn8)@=#8O}x&thD4A!1K!WENRQ4_Rqlpa7>*1wt^h7 znGi%r*FkxonXyUL^rMGA8U+?ylaEsQ%RJIw_`DYMF$EVGbYP^~w}8msa9w32@xI&M z_YF;7N?CGIRyOA06kf3MQt|&lvWLT3yuM`FB!z0_a@WS6?W$e9DbFS$de_QDgXQ}) zYn+j}-tjB6_2JuJtb>9KoVjeP$?vNViY8NP4ch~P__OjiUYq1Qs17cFzaP+Z`+09w zrfaPp&#X&z0h{zXQt_LE_Y@+=m=?fyzh1ps#*N1fyd2F=-vFJZ&{n1m6=6?|s!wi- z?~ht3_baDBnQYAGZ3RPKo1-S5snyy!x<{QN-nn3Y5w6cWse)u#Nx5%iEx`6ncLDl$ zlW{+{*}Gku_+QU8e-ECPk9EqEh0-EmNRhW7wFxhd|!vwm}aM4WZlMPQY%d6L%S0%&Twv* zr>LaZdg4$ktUA(y$5r>YSy&S0cKd8>h@UPza`sNC(>3YkV5Y`MeS$RqcSsQJ$k!$~Wldm3f+ObNZyh@FC z0~aWsr1Ow*eGPmB<`rV!=0SPE&GSDf|0SMYuG3925XipqIsy)X7fqyMtYRy(are_| zcrD~TJ>qb^znDBuYI0&iCH-kp%VVXA93^Ha4cOsoZlPw=lnz-pd}xS92;mhMdpLXO znUC;}D_)3$<&`3lKdb?ShcO{6tvi9oF~{3TYRW)#e=Z+%f{nRSoMlr+t}*9Odr*{l z&|h&qUZO_rUl{rIN7^8EygbA44c^_`vbRU!{w~Gd=aKa3pp0zHWTcczfJjk}$4^ML zz9Uxi2pS=XP zm(TU!M-CyVF*i#?KAyU)ZZ~?|hf~rC(vE+&o~m;NOPXJ2!y8FT<26F>UH2-7nW3@^ zmZtNLZU}{%dPwAZj_vE>+zoo}Rq1}VIU0`6RLy6kBf_>~o078HB;X)rLcVNlwkk;cK+dc`jko^$@0olDm1o<}XB z8enJE|7O!-lRK?c7`C_-cVTdqAz<#tdReV(Cu8Kxv!U4-S03xJXf$3T`2!E2b+e9C zu}ZzoeLkb%$eUh4^PX~VdXtsr>Trk&ZrC^4ufnaoVHCX%8g4|n%>HNJIysnUI1!gQ zCv6TM(!kN3M#?mh5K+&V8E@G~B(0_(G(qxQupt;5(Hy!{ZV{;7X$$I;Y35dyzu593 zY2IoU$q;t?+6`o9te(h=V3oa`nlJ|Ri!KdUD!Jaq@UM>>!|aNlnaL7UcCoNI-0!md z$RsgL%=Qu#8ec`v$Q0rNBfH(4n@dajvo#})t*At)CgiCYjZQ7nZw=F~fWS+o0V1`U z-^N4|E%T}~nh}>cW@mA{Z!EIV@3F6OAQgY2G%~N{@f}P=dh~sK7q@)hZBQ{w&UXWk zb52oMzjpK-wpQBxGdf_-_b}je&{rzs~-LpT^0?_PkMrOxmBjDtdDcE4;mN+qS+Xt4KiV0l)QaI)E^8>+S%kuXR4#t|fwilQN z5A1s{VHU!AbO1IkfI z2F-&N6hgvB(%M}a_5V>+?#x*Dyj2BufFnO9@*!J=Jpz%DfNbnT*9G(?oWr>%F#>^R zmw1RZze0>a|m%YBV!gDRtj84C;M`p!uB zR>OHLri3DVw&qmpYV~7~C_sz|{4p;wf6~pHTwg}4r zo)4e^^7rNaeq$16p2R?KdirAjct*ajET6zGv$X%le$|un@My!_ouK{=bORIV4+ISj zEg&NTa`SD5W5e(ukNb^W0n!)*isI)IwO!K7{q!OX9LxW<`-9M=QDe#Jz;<8QXQl** z32`6d`o7aIdxgLJNWW8#{ElAz+=?!)E5nW0tn;tvzAse-1Lh3lgVwmetw{1EOv*5aRBi%4u@1POnM|PNC)j58t%7JTrHhyC=3LENWHosKb=L^N;gbzpumyS4vA=n^`Y0A`kssauqCdCZUX|RAdMbtD&uIsIF_Bn zG7?J_U8FE#PIUhhY*EqKGk%ay@RxD+Md`If{mki_Y~iIzUa$Ab*ww8V>Q|TYIVC17 ze6O_ZapCyit>+ICRu7>P%U>u#vbu*N`5cPoZdITpt=Fj2qZs+U&2l3Na;lLdQ)QX0 z+Z$M0MQbc&vg-y4wQddk5KJ~G? zTYK@-!nm6@4qnKIaR_kQvf2X;cz!?ChzXGrfh5`mT(4DKwIr6WawLo*66ms3uE{1+ z`+R!|qf7J*7^q=MMP+*kBPQz;8XI?Ly_Q)@9R=9={oNT^_HE{s0vt53q;=W08S5{ot5T2n+CTbdN0oF zC30)w4%-`J8kCJ47je3Xq@_siGDu>wT}kU;t?w<51v-Fm;ZzluQEl*B3kLGCP&kgq!quRnJ8(8SiotBs}SRCi?8#B%bSACUxP zNxfgr-?qm|odQXi!aRsV#zR@1qC!i>$Bcz1+?tgZ!NdVixoOtX1nX}BgRa13SRPIF z8-vXmea$#|=5gzDh{k{W&aoClTYNbUBeJz@0$-h%0gd8Sl;ejQG@nDWc~;BL;Tah^hTbM0|vA z_aiUndzaw0?gT0jmt5D7s{n$Al>^;kY^bl;EOv|9V^1WsYb_01C612Cbg`BDk9Z%B;{%%OOD@7=a)f~80kM&w%#(+( zCs(yhOX4#e8!bA`1=}6HT1csma|O7U3EFb_ zM+_{P5mLcVW4t1q!Da+1$3bwz6YLi1${>nzVQ^ zEapUmnM>Um+7BA&R&L(oIch2W>h`r&Pue-B2M}AKttS=PTDn^oKh_<%W zWmw6zK%5%c#*qXO3kVlM#t(dCpY1#|&BmuKc*)qYm-&bm@ENk@4rDGVQ8dB>yH;#i zlaiIAWarv#I#eS+=Wa~4XIK0|$!52~&_rWW{pS$;*ZB!dw4fj~yNbg^8rU(W7p$$s zZ4OBoOTE43_1>#a^AeMh)w$FJmMl9bA0vE09&qz1kBN=0yLVl7TAobE^_27VuMGPBh14qC3zv$h7klzI7h;sI23H{wz8%Ax??&BJe4p3~%Ivq*r zEHRRV0E7bU0JJ@fMsLVZ(FjIh+@Z_TTSqYDL+Am7g@Vm$lIvbLHm|aUz|*)$#2Q5T z6Gt*J{Yf(TCc8TZ3z<++&im6V*Tguge-deTvbnVh9eRMoU~}DAhe18P5Q}2c&AA7< zZ)d_RK@;=e>-d6x&lpW;R#tWgRCjxTtz1ci8C2aQ63>GpcnHEdI#sCjm681>2+vP> zgkhiItL|S9y%u%D8@W+t4xY!z$zfOpKat20V*FlVle145u=3K+KK(}So8riF*tDzZ z0ZobZu4?Sh7`u(j1~G@#&Yc6|Tp|luw3waE8vK+>^=l(Q#Yb{4Gd8nBr%R0-Ufax4 zz4JfZuT+Dn6H_X($&p-d!(nh4 zd;d1}Sbp7tU~$OVh!q2aZD3x&s6-SOi1X>HjO2$E)oc%r>)F%}I}Yq$c>Q|wzF9LB zS6kY_?}9Pe?sZ!82#OL{jwza0`bxhjGwn6@#<0+#i{LSq^FYg;;=cVUqDz-3Y=P(I zTza!IRA1cHF0?BTaf2vX0 zD}-S|*_p~fqI5YT18kmivIC63Y0vG#cBE-C0notd&&iy66{D>H-(hcqmx#lm zcQTR!_QQbdOXBF2Ej-8+sn6n@>haFQ;n9zeU8f=1COh;sawx*dRl{d~gRT|A>*r^R zTFNCnDYPv=!1W=PW6Tl{+d`Yb(U&_i6gf34Z+@jHI+F4|%kzUGPWMaI{eJPdbE-;- z5iOZ$kE>kDO!nY@UoHAyM0;W!I+sdkQ#annuof&&{!kczAY&m>yD6bW-p0 z6bODV(TFvVjgt-6725l&G74s%W;K}IG!2!2nWu!UFYG}n($346VYVJkJ0>|h`!Xzn z^l7|#GKvPVb(*$emN*4H%xmO-VA+t&V#H%Hab-}QQIH?Xpi$wL#OHWue4B)obNs{t zRHh-P6JLM-7&axcxtaeRvCwG`QK`<9%ev-m@gZ4+eQ%57>;V+&Jhj{kje<^OQA4sd z#ww+Hcnvl&P0&P}v}zla69ruY;411P4dy~~EmAD8t~))8x1$uqkQfn*;`g{qBx!DY zbk@?^G%{%1?YY(usEV9UriL!}8w0D{hkd%cD>hg@LpXl{mY>*^U$ZSqs(VO<$2a4> znuZ5J)0E1takoi*Fu$BkJ+rrG&H|u;Z6Q+i87RKodrDr3j6}y~Y=2c?a3&Fkm3U)w zAYiyC`m6ffO`8()3j|U4ZmE;vt5P_U_*3&#Y|*Wr%k{sTt+X1cQj+rU)yGulK3_EO zSR-^*rN5PQX{0P=7MQJLmLiPWwXqCwpC}C5(ERqMvNC>+m1S{YoBXET7!L%{CQM|fG(#T$XHu1Sjd8MSQlOLz9_0;IRAY$gWimMjaV3IL>27feSq%xAP z#$;SWz%va~O+o9SNgmX@-5C=0T!H{U52-F=z}w-D&gPboHT{eBLukhs(9w?GsBIR= zE|Zq`HXLwu+PbI4Dkm=VQ+gyq7IO_~;L0*XSoF03! zp0k3vnVOxU05VElV&}b=0uRC@Nb*cpHF6LRhRa)a<2MpkCgS*cWHS#v=#oV-T)=XL zKIr!!S*(t7_^gaR)UiR@g~AA=Ix#A7wIb%l4fR`1N(p#o2xF^D5QBf9DYY~crs;PvnW0hT^;S=A?i3`EL3}r&04D0#s$ zK|w&vYFtb_n#vFb3s^KO z_5ehZDJP=MsMcg$!m#Br3CgEbx?8j`2AT(cG?7DAV;rYr%Ct{aJN#4o;G1Z=stFz8 zZJ=8-_J3b8ttj$Cm!nsI$M;o}>SM`=D=)Lv?fdIa+q60V6=Q2^x2o(1UZmC+@)+)9 zA8fY4&4Y`hRN}d-%_bGOj+*XyM;R&7@6Qo=%PBj*YSXh0%W#)@(w>+WZcS;vFG`a{ z=kBkm8Lcj$uTbDw!r_=XXkmxbH5VcbR(jbRT8m$wf3YKG^TkqUm$(AOtSs?h6axsL?@ADRQn>up_U zgp*VBQnv7oRD*EEnJA}(Ek=lBrJXbF&v<|=)C}DAd{JlZ=>~9R!k;!!L%EC#_T+M3 zay8Y_otw$|jboZSrIT)P`>R@Q+U@81T0XR5K^LarvJUlk`L`2 zT|TrS1OxR5SK$7{l4IQ;P{T}A>CRL9PE0b!UunY`lVq(Iuu4+`1i5Z8cT&XDsJK;| zZft1%%g%gP-$B63LdcR%W@sOG-~RM=S;UWs0-ulQ@1#eLU(j})Y|VB1tfRG{4Jf-7 z`HP;E12Mf6_FLnzsMXp!Z&{9A<5P0?lS37Mf++9hxQP=~7>oxxjc!F8yRvm-)XOd}34Dt~IBEE@Fr|2A~xiH(1M8#qGyZv#?CH_=- zU#j-Vx%@bsOZ1LmnTH~SDwobcS^1w|Raa7Sqicp+a|f5ln9s&^0n1QzR)8NfN$j<5 z_oXus-%uG z3CmwZMuF=vKH?M}|o1?oIx5D`#_VHWxnecl_tI3W7RiX3TfI@VF+U@>z zZqI=Q5f|r>HBGgbBthLW5XmL^s$h?dx!Z@sk~%M5V~H3M6S|&LtEZF>;F%t`!CTDB z86ld~Reqkfrz6u1M7N#f1%n|aUu+}$O+i-E3;`b!OPxPYmgu4>N;rj+!Z`3M ztwiqOfr$<%eB(u}8g4m@3aEG*83#@psWtCBK+n3!Id0Ut(+9QBH~R})8`%8$=)kBm zbqj?B3Fm;;yRVGAp?oHSj_fagxZEQ6ypv>p!}cr|hCVGF-Zp~fda+D~TBE&~>=!!n zm|Sg%-6AG;Mq6PM(bDQEWvbk=x{QgeO(e?`T=am1C*F;m^t_g#p+3LvV$Hloch8)e z9%25Q!pSXl4<20M?-aIYQ}aT9@yaV||L!vQ`ue>oBgAxJHn@|F{B!!h8#U2h6rqmb=|cu$6g^4tGC= zX-Pxn=AXjzk)MTS=q!3%viDXt%1*sZk_&fZw3kn;6#^zxw0rl18LCjE-)+Ma-mhKK zLXR;dBrGQMk2>dwWwz>vUG}%w=o@3!{7>V`_sYpC*b|_0uqj%7@obhDSd|9oUWU91&hXS<_lpgMylu3;^es)dKfoaTM{!g_v5*nPALxpJ><8g1_J>L zAW_w{J^hC^#}T*rnakG^lvpQ=94N!dXwKbhalt;&S4w2>@Q!FFhWOd7A<>$1=P%52 z2y3wDULlaY;4Uw(IoVxQ$~`mg9#d5`3u)f$)*G*Y8S-?0$ubPG8iK@dqB;J6nGI$5 zsKX@HWwbe1JuxRLrCTW@25|5&Kawq%r5xST3_6=Nc#)y)bdl;h56Opbp!G91mj6WS zSpPGvWBo5a$3)1=$?^Z8bde!8T8*Gmju~0w*Ee>YO&jFxl6~5HvYU zNJXYI4>eCjxFrQ60gD2Il30-J5Azn|uzjEN|7cxC^V7viPi<$;NypRV`X*i|`M|gw zrFa>d`_13foYE9W9Ayf~4`H*EeHG`LY6 z8!H0@?4mFcaBDXbP&@|^DHUvDA~*=Jp+MfGo+kWw z8Puzb!2adebBsR7JxG6JR!i=6$`{|2;8d) z3CfZj1EhZu>~}0I%(I7&)dYnT`@&gxI>WMRqbkl-Ua+~9F9DbFVCH9OFHZ^9dF@-^ zhp+-4aVH4z(Hz*HAXk@b#Npu)oBpds3fN&Yql6#?PEJTp1_I7=16I%r zk2;+JDe=Xh)tlBcy?_%0#-~ICg5!o@fkFr}?3DnW)wiPrIskyf!@Ssy@T(OOBK1Kd z^aJ7LPur6McGl`mDKDOJyuNbm_59(Hr1_D6UheO6xwU8pvlJwPcXn>{#Azz54XcYw z$Y0D3zd2Nt6?*)E3>dNf>!L}KfItFBf&ctL@z3)+W&|7jez?`EUzfmwA-wO@x#0U; zYIr6^ zd53@T`_Ome7`R3Rnb4+(Qw8^=tip)@QQidnq}345z@8nyTh(wu|5XTL1ENiu7*0!| zZjSA^@v4EJL%6U97?IL;s$Ol_-^zTGm!s!BX4Oawnp-zzv1Hz7uDc?sTVjnc1V>mf0KevsW@rX{1BgIzMSQUD(@| zNn(;s2cL-d;i^8eh$wK&2+g$K-GTa-z{I4iRas2w%wESCtEaHU;r#)yd&<$H^5K~4 zdDL{mb{Qzzia6UFV3u^E=A!#+>kz{xVnJ>3800MRuV?m38NS!o(8o}^{z0I(_h788 zET_p1b7l?tB@7nr-9 z#ocaX#$1?4#oJ@0ShpV3MIs(AqR4Rgr87)NwGQ6+gNL1wEqQzz4V$pFb zta48#_{Ku&PNx!3)OYHQ$9WMzDWKRaoWk z>PDE>+T9jf0Q`2rM;KjAjp&eQh2tt@I12!Y`qOCvpX|!5&e)`X}EM8;9CCw)0=k6zu!$3*hwE9d?PqbrRr7U$J7vJsXG*tc(Q!>BNrJ6x*ta)pdm;i_hyxYgCoSE|MgmW!dyz4W z0lI9>IOEig3Eb%>4^fJ@{gTXpkLJ&76)7iE|KvM%sQlJY%16kF6}ByVJrigJ3FMvO zMvX(l5BsNP6K`LyV}uHl$tzYhSozKO0}?Gu3lYzKG1!h63gZ2C^ZE6RUw&+1fcGyX zhF8Wb%g2$Bu~3!JSvu5dq4uH62UvP;ydFMVMYqH8mbCy`yRRtLGzF&Z zL)v(DkT;Or#<|L;VQ5{<^U`q??t$8Iv7 z?C}?|4h$f|i~{yHe(s2*2OxuMs=*xHJhDcWa{-JJvZX&7`8_@Q2n(SG1?^= z?NFPjxOv43+YLZiwI~2q#7NO)yvIA1U6#vJ-S;;c5mSkas;9cOXr%NAwiTv#$M3kr zZqE48TF>ZfxkXAr_+PBn;2(my$XmXh{fpr2RUUS9B(>N5yC5$SNV!dpBLw1EUOd+O zec@qQ^1|oK2Ug?|Uyr7M@`$MI6$?J-ZRy{1`q%PGc7dc_o*n*a1?+9lnoY;aF$Rdt zegxM-uo=JF^~=`V4ywN$qLh@F!mA!YU&RXoy*J1e^6#39%p5EN1GHScaczzp!>H>s zj+UUx8Gd0!foFd=m<4?He6Y(-18t9I7AB;6`v2*{|JU>IHYzXkRbYpcf%#GD@?J#( zvSGMbQ-`>XR`SsRqrCHM9&6IV_PXv_#nXhNB8#_mW0+#mqvAnQed&P-F{i^{k!8O!klVAGqAgD_49UpO8qfTz|?9YCW9%kWn_i*MMK!n5MC2Tbz>T8Q44(rDJ7a|o?|LvRO|r8f7e!;_-j`&c&o`hL$w$RFvr zjG%1g?2&5&OSWabFw(a-WlKn9zrVG6vjCrC3;O>o@Tfw%G-Y^WAd{dm%S>MNsovYY zqz%fLwN&-3HPYZixiRE-D3S(1TB6bb@~ya ztp<(7l|HiB;4< zw(U}w_y%Y$FUl~eC1~C>MCWRhq&(GM2ub6wJkqImRD~^oJsxV6y3yD&F;3VC`whxE zN>HP$&UO4K>VdH{P%YMOJ&Mxy{X7=gJ1e;9$e~O)>GlW zrQ#u5ABXrW0nwg{+`@^KJOEHFQGq2_U4KNuYTn}D7mbL2;wR}jp_v}PH8yZL36du& z%~d|#b;54u@0yc&y4aplLA1-k{;zimc?_1P1wfl za=o~_NY1S*zA^kRizrr~Ws=Utfu%*pu7V{L3^rbt(ky6?R<>oFt)fke1<%eJlLim5 zt#SrAYING^7}iy&geW_XgjWfSXtt(Ho9b=|H*)dj*NYcRX9_RB7``u!z@=j`uK=@y z$i)s|pdrJE(-uxD)tC1?05#hc(pNqqNCT`^u^i4H&O|C2&GR%kFHeK;#{{(*f z&nMp0Klw_qbQrWY&?BQ6Z5v#R_>uiom{!U5ttF0EE(DKh8cJIjpr2ub;Z&A^8 zfcz=Qf+a>X6lVA9St=|u`SapV%*0g8#M7}ZE$?xGr8UmZ`z`5?gunP=G(8mJv%(pHZ@Xx%@ZrU+XttrA+pG&}QLJTHv8@REL7d ze?;$U*;<~@pzM9F177>=2u%1u_v%1c7dUjHGnJ@BEnfVu7EPmrt$4vuB)Z|1%*SgX zYF$#x`sc$^bAeMYuJ?H}!e$h33XQS}Ubfgpdw~G{L!{jXw6%1xRGsJYeLuxxiaguj za#1tTU(4==BiefHIpYhAy|7-{m2KxmqzHSZ4d}JT(|N1eCfUP#7_+eRhL=Xu>r`WD zN-myV8IlYafVp91$O5Nsn%O+llCy}=P4Py9`Da#-nPuf`<0h}0gO!_H6yKTV-W*w- zAwB+yl_%EHB0xosF1Lk}Fxcyspk2=KdIIxO%Jcpk$5hAiDFlI%aIL>FgtOVZ$X2_- z7pUM~S4N~zBP8NED_>?duA}Q|w73|Is*9YKi*T_ydVq>IpmfNd0wdLWON`TuojCo3 z#anfKK+*v!j3SqRoO5#C&gQo~iq#k!pGT8r@$fN}l#S;3EDntMBQyb1OJl~kX#o`$kuGTBTh(USPB&6xCojM$mO~ zm_jWes=Yt5Z-laTGzM_HC-cO9WG(6e^+T+6@2Doj*qox5 zo_vRVillx!xj0h3BX0<4$z&p%;*hI)Y zi?GA<04%(cM-c;-)TR=>tRLsElgy|QrP~WfTHTKB+J6lBWeW=Z& zTcD-+302M*xK1fgo1Zv62O`r51vjE>l^RbsLA#t)wo8%@#X2WUuc3ZtTdQGIqAC^L zN)s16!vrkf(INgKv@^pzw5QsG;peC{EfYIyDDmlEio*syO|e7Anku7-gf%U2Vyvod zk}?T48bzF`pm@%DYi8xYB3!xg=2q5Yzn=`}kCUKeC*l4P1)U01*rp$To# z^mL@4sW|V&YA)Y}@_&x1j>k(&?s!d9T>z{;$t-k|lg?4zSVK5el0h_<;W3T}qp9F( zO*&A!qw_kHKLfrXh#XRtvYh+;FBP-Av~tYR7MA*jD?VaZpdZNOCbwk}tL#ajtC{3_ z^_~SiW^*o#9gNGLagQY}C=0MC-gMxpOqOFUIh=C1ODl$shhq?FuzY1W5|rwhrC7=& z(7)$N@*GvVh&Ex@0!Ee^3V0>z-wXS;{gK|b_Rs;3GBsw@2nK=!Ob=oOpJdmMIC(^` zk@quUp>Cz;88vlEKK5&UjWM(?Jf}qMn}F5oh8^@yRu{fhM#^ycN8rJAEe$i~1TBIo z=gu3ikbpmot-1}at9J;TB~2FFnG8IRPY6z#We0D{I|(`M5T8&A`y*|6nNMDfu-M@0 zVhWf#aL(hHTnmoS0y+kT(1;M$!&|EcTsMa+m z@!8wMZlm+X1*7dQed2z=auO*U+q)w&PJ_vZrrdqVMtwUwrv4fPy3^-V>`&?e!Vepg z6Lbn6QajeHN%>&xu{0AobbLbp7FwdfWRyqte*xUhKVxuVeY;XIJvN+f)I9cfaUK7}z< zqKO_VI9IDz{DYDj9}2o`8M^fL{%U7o``%AO9NQ0s9^l2OOFbZH(^>f9uFXOe(@$NQz- z3tsdvr5&f&%80F6f=6{vm}7JYixgk|6xmL)Feivo-^FtJL>eFVucTbWpJ?r5>aTk6 zT*={r5Z6e6iAIguLNJW#-F-*yOkZX@;qoBH=RP5iTPRpd#KRl($Nn$6z@SIZF>kY} zQcmuVidMVvt|^}N;ahADC+~8HDpP46Ag2EdFC&MiZsv%ruLf`v+e zMrJ4&F#>@g0}B%l6m4$4NkpUW*QO_L0PP*eiWC-oV+zc{0}txkNHM@+ltzdFpW(~- z$3qd4($SI4%;qOIn%|RT43Cyucfc-lmpmI04V8p_-5EP`Rr)QX4 z`xWil*f{|S(iM;8C4jgWYkx1&7oZ0Zs>xtBlsny5wCUf&JO3H?E3#$Sy?+x4Xn8ld zNic7-9vPpKV*tL-7C~U?3Ur+gYLVdPlOG7_=GhvEsBX4*;WOsPoQrt-1=m_2epVJTRV43e&0AuuJv8n`-8=MGS|usWWzgMw zN3D4NPIFJXKd=>AK!{kMAIVzAk5~)!)X&x(8jc7u4h0hv9SW%$qs-4IY=-q(u-KC zx$j>i>B!A~ODnq_#9cpBp_73kAP39W+khi2ufAC-%AD_BziCaStx+jaD6ezHk?$vJ zs@$$0g2u!`LNaP-NGRw@;ADk={QdpRX9I}8HGaG*mg0xx?Lq#~O#a3k`R*V>N2Dy-w%^+R`W}FH zk>Gj#fH2}d59qryM2%Aaan_R;94eT;DApTCF!ir>ZlJf8CsuORxQ&j83??}AtB!P2 zJ$4Ja6#>Q6^gD#v?*h^HUkz-S$Vu*ITn_>L3KjH0kGGcRDwhc%;gy!ompgIo+3Rul zI2A72N6OznLxVq3GjRWgpaq&G)TUzXQ2tpY#oPVN81*N@3L5?w#@WXF@TXskdRW#H z7XuNtMO!O?*L|3>q zF|VkE^EJl( z86LF^zZaW|C;v#wtdB2w+G@KE#q@7qQzSMUM?rLf8>{^Dj3$ujZC?hCo7;wFxn&b_5knFp`b>F{(}h^r?-l-#Gr{t#rS*LvYz3<37>n` zKh_td7}ZhIQ8r{so;1$5R7Yz9d>fyR4OP=%XSrOTpy=zn&gia-=j7KhHEbLz8&*^I z$7I5XvhsE3%Q!XpT`B@MdiY26ri)jq=aX@@=!D3~j&hNfu2BeZb7L211wE&ga#tLG zoBC(H%kwryz~cLX{2KEPuhdr+wr4>nxjuVF#MO8W5YMHP2@z#SP-$=TdDo6^vx1(-4C>#|>&45+@H|$t4$co;-@x(yE`w@WNg&^zRD#Xe zB%PBC-Jl_F6IiL)%CsSID%({oNI41uZkx7uUu(zlV{Us_V&^zXw+d>=+)U?WqMf3=a*|9pej!&a0B~3>A2TwSy zK>BGzlfB!NE(hEVVK60$cT&e`h}8;MLbk9I0eUiiPTSCmM5%(Z_OlGSkK6ZP*mm4($fmcSbWqmIW@OQsGq9cs3UT-Rc&dej2zM*hX7IQ2cvxqBo!s6E>4>pYm7dA5>D?;`KG zZnDPvDzms0Jv?wGev->=$H)>&eYZ{0lnFmt->TVI>o_0yXWk0q4mrZx(gjmgBp;@? zqjHtudDM5lsJgvL$gwS%FA#hOVB7C@L3k$46Wr~^zAzn8_g;1hMz~7y^dle zd{$s$r_2$VVwL&){W=<#RrW8Ue+bebYsfp-l;@PLETW>q8*2IWui3XmBR8RIsl`;2 z*IiVJBh-Rcr3+Gs+ApMURA^ujz;X>(R0n%mq+5eH{F0GnJeu zYcfq#)xTtQ=(zSC!ipu7T&4&+JEeJlabL-6LW@Bh%fI_wOivse17A#4!Q~~k^2VUT zsN|3sJVq{i)Q1*RxH{eLz|$(%<5>TP24cR)AHf@P#z7$o7)q7h-4kLY zZS^3rtZQ_EZnG{TB>vO6ys~fwxnR2>>0zUpCe+y08Yk&0soq?rjBvGTRz66|0RC*3 z^~EwhW}JB7Vh_<}0$Ryui0(D}n>UsPiMCLG`av%C91rG5KhSn?8;TI&s2NpvrDwQ^ z_}|T5t)sVY=Z?zYV7UVMgq$=-pV*m)2+pb{Jq?S=kn(&~pKtBfyH#y7&7p^x<4*2@ zTppFVIAh6s`SaQn@~4u+*pY`+ymuG})FPko&=gy$FWl9+$@!_3rNnVs4cP?o#56}2 zg@e}Y;di4Z=fysH^}a-zb0OIRiI@9??Y}Y~{Ko@z8Gw5AmO}MfA7}gJ4kG|qj)uT> zVjjKfP)1G|hZ>VpxXYJjn8>MjsdQDCpU<$&`yo_{h{~~eXb8}vG=E>~3lh52-?X0k zcJ5Z%bLv}fW{|(8BgadYHYeAblgCitp33viwHN}iok;fTQr|GF(nv|t z^GY((P1P~z*>Z4*XAyc(-4ky`!KR>?Z$6bml2?atadhG!)fLm1lefC(<*l8u>h&&Ju}wETmuKu4 z(e{YRWt}?lV6Zp-ZEi_HQj$`-;r{^fU}*L~RYoSdWcMVq)nn(#=HbXLU2}~#wAAK~ zvY##@;hJ%_Uf#DAP;E4`^!9#rT4gc+fQ8j|7VJd+ z9cX6<1!{uY3|-nt;-#URZ74e2y%3f{DVTe+*I;gZtHYY3XW~KMZ~dTA^(G>erSY7B zX~%|KU9#}0k9byBY;rb+lez)&cHvgF0)$wbftm$ak7kv(UpP)#B9>$7YkW zTRTDvi#kb($7pwkBGLSO?3`&R0UF5t>l&pfx_gMs#Pk!8ny3m+G;6qa0duxaRro?H zVu7y(Q0S7w=CqLmeoHmwRvnT0HYp;slmuiMCYom#icsT4z>_(Kr={oC##IPvW_A%# z6ZnXw@2z6JFwR~s{aLjX;O8$s#zo&i9N5<- zgMKh}&je=CD6i|KtLgcC(=yoccmT=o)DAjnZT(S%VkXwxrjz%$V6~|MMd?7|ad3Mv zNjUrxPrcu4&A)6YKt1yVZdGb8>>9haPhr=2K3n9?2Y){dRF?AM19UAUplf{9VLSNm z_Dor2klYWxqPK}#byWOv2D;)_eqSNT4uUAePYqloPs_-dn*nsZ6MZd%Hv{+Zf*sw^ zYI)ohvXsMGuB6H5^@s%Utv!6p+*`Sk^m5%f_o~0o^#ye+LY@(`?Q^Y{q^H8It46{9 z#?irTT;3sRKEzd-mykAgEsg9loOh9FWVzGZ3RdacZ`cXfG%R)rr-$pLd!XYg=9KNg_ z^bc>Nou3(2DdFhfQv$2$ceQxFD8$IvKmKSmg-D%Tw(q#;1G3yk^y`$-so6LS(c!G)L6O{(-L4n$wpP#O<1khisBPW zlvPrMelB!Rdjbm1(#M029?#SO4^OHC?qrjeoX$>+XMAMTlU8HX-#I= z#J#|f_-s!BMAsV?Fx$V?O36E3J{(si{#Nx;uF}j=rH@f?WDN5UxI+^mr(sp95KC<_ z6nkxUW9D#bd^66yxtQ7AaKHd!! z=}kb^O$;PN(G}b^cEy%_b&>M!xz6QuR~u~jmB{^R;FCq2m#D_8*gjD~&DUeMWwd7w zq8V*n3+g1FsjmWFly&#bmacr!?JOMyo!4WSJ#3f_u1yms_m>1z?xAH62sOlMu;f_U z;LCSmRCZ7X*!JX5j{|1|M!h4NcO-HK{z7M1>4v!ML;&n<2N>PEpPYzYSDR$*ETyK> z#|c{m1Y3#t&h!(WgP#Diwey0cF1i!9k5&!sf+l7hghxKuZ7f)&dz{t!3Zih2BSU*7czI#Jl z$QV{+`jiZEwGi3xD1MOv?8n^JbKOSZApgLg#8B4mr}#?W&NHg{^CL=n0} zt=ZN1YIJzqAy{RfYO(ld+bjZo*!G6Xl6Cwd);AV&_1&vm`s+E$V0v6_RJe=_d5Qp( z+nxh_8y~e378l7{VMqhBjs0pDyzuF9sd4I@1(ylJ1z$Acb+tslB_9$cxJR?{cOfP< zHg~YwEf8%Sfl`!o(t^CJ;;k@c7|+mAKJRM>`lwntXDP@vYy0n>4ykJVv^6qU0;GiM zigAwN!}Z*P2j#SRU{aloe}zG(%HQF&0yjMuKdImO_Y$XnGjbxdV-HE_i%O?{^Rqn< z?{F*4HwKI}B^V%jZ-9>!rO?13_3B<1+C$P~XOka?^B1@-XwxK^F0jJq74Kj0UF(!9 z3TCz6pxrRbFI<($+~T#Zu(Q@HYo5dcJNDpBab-6t)Yi!z?#o4obhZ zw_ihiflaUODdU-%ElZSY8vs#-6#7iw{+$7GxP5EY3E5HOq-ewmGMoPLPe^5nc&^h;Vc zCHJ%4sOV(Vg6@ohR;MyhCGHZ@GE6<|Q7VNs&+|n(^P2(R=-B&r!?h!2%#?LaA!Rkn z+eRSF3U`wW!W{AsKAYxWE#*1h#a&yTE*Yz`>ba5?cw7=RUfqT!ohUsG=q{IQfODu1 zG#%Vzs#uH;cgfS}&u`_-jEL%6Uhx~brw8}rL&VV+m-0{1d&AJzRUL8tBVQd?^n`6n zFdQA0x8@KeQTapgt>(SrK3oWXT&ZQ@)q9B^&2f@(C&0S&vJ=>POz5$0$lG<6Q%2B- z5sg-!NL5(v%pjPqK;~}W9S-)8XEikQ%-`9>aRJ&qmAj;c2%omU7WmX9T1Qae<=%nx z;wR`Kr2@+Q(>98xhFXL+R9k6RSU@8Y3f`@)GaHI}pFjiW$(N@@(Tcr4CfrpN(b`V7Rtsgdjet6AGQI@gad**VYV zP$qR?A76w9P(JhWY`&pr^_=~>c0k4q?xo@a+j@rK^1t|GklT0Mv`&?J4bd$G3k4|Z zqY4w)*kB&zA3X${2$4Go#+0@%&@o@(5)^S38sj_AI4Z>Qx^p4(LS1L>_JPJ*jjC6J zVJ`Ov)~5^A?9=arMehwVnGZ61Nf()jzlxxdIxgzK-6rT$a?Z>qFpe~A4&Ppns&j(c zdjZpNdH+W9pvePBmo&&|iKBG47I@{?7dcw0r8?Jc7+ze_r(=VJC@B9F{W37dx2|t{ z9xsSpYo5vx8;g7a>ZmZ(wC%$&*7N{+2}H8yPUF3WOcaCt@YqUy*DY68Wh`<#9jquE zikh*d8rL(Klw03XA5h{yd?d`4(Ovjk zite~s7-xcJxe!9Wy)=ure1{g>>fx~hQ`_=cF5R7ubrK#LFQtb%Z#WZb_O@>fG61+J zTTW8>w~>oCzNuFdJu(#eMakqA6>r>Me>vI>rv9xY6gO@f^3J$kD+X2b58fCZ$F|PT zFjDqt7;|8Eq;s*S3gL-VgF3c-zu>OfEn%oyr5xz2#1YT0Ce6xAHp8iIkv^FJB!?kg ztuNA^$D%@cFNQT*7jKiuFj|fHU2%+@qt38R<~#AmfP}P~ zS@2wbQl(MgtUCGL!8IO&p`1Vpvi)({Ie47$uP(mTLsa60`GM9y?iZa+d~-PfgCNVt zEYc$~@APyuG}-&O70_S(Nv#W#&EFp4?()DenHsd{mYLE?orKEyGiy7CZuhw+$$htI zefm(>!<=e{$w%J;&i9Cx?uEM_p`AMU z6930+%fHPdk^0bArd2%MTy`^);ijv59hc$22l`-&q;`cDF*oi=rJwqBn~;;7uJ*u_ z_!<=cWSmRJMLdq=2TqY_#{gNL9^W}5<2#;y{B>Wm6FA9onCPp@TQL|CfDXr0OZr{f z4zT1*GQ7sqq+glAiz}ZFhomte4XiG3=g0Yds6}`%ZV`m^l1&NyQhcioPb6SI(+Tn5 zY~r3NuXO)0*?yId62AJe;GTD4*F#)4CFTO=O#$=#r+!UFOKFPoE5oEJ7JDtU>bAg2 zl?xpBYNO653zM3asFQiQeIu0b$g7UV6E*3=V=sS$R6=s?M(eX=218(c9nXFEnnf#j-iv`_tHdC}t+;N}j*x2M=(|*N#`+bf@gdrxP z;RvugF(l?74TB~J#W3{1-ciNUYU(P6e__o=V%ZZ$s)u1xg9WZTHnK!aF+>wXxJP2N ziFRE-m3@PC^Ndi=4Mw>Z_+`!%Y+fsQEfw@+@MCHS5jg%D=Nm(Nc0>3HiRV>O!)+>y z3D+!wfDq%C$mc0x0%E=^X%_d5n2x2t^q*2V?*By!$HMv_Q#dY8mj87_+`klV-tV0Q zbdH)Fltl<xal~|NS6)Pniu|2_k&+PAO z&uy2j=ZnnC_qOZv>S-VSZB}0bQ&uN+tl=NkVZ!@^eL}G$LX*80(R3i-@t}c1@oFC* zN6>gEU(0es4nF}SButh=-w;YJA)=1p89d;Uz1T)GAo_@8AaoEQ6EuN`Xu?GPWYC2- zj6}ow$hio&V!a@cLjDYp@FOa>6~=nESJ0FeczJ(&2!4nt8G~pE3oBdzxP;Il0Fpw) zmi|A$kKrVdX+(&n{IMa!{r7LarHBhJA_v-NWTZSiJ%12W(IM?$x$0}d?F995gURh` zwRTYALB6mv^&$lZey71n4IwfCB#gdSCYhqS7(;pSgqVnsmAG(ZLvMrzcCJ7~ocz2fD8$=Bh62XJ^-_8;RNiU}Wfi~{#**DI+g4V>t2o)#ti=w)vh2KqP zpJ8H$gMpCTuT|@LQ)ix#bSP~Yta&){(0p;Ad`U@T3h1e!9Y)`g!UDaDar}eo zTk2hhq{szweD&k``SV`}mtERx1OoSC=m*}80yNvAUp?wy#}Pq`{<}@&Ef8F!0H6`b z$@1~GBH-skpz(~Ke}(41KEDhj1QW){r-MOEQ3f=uu#ySA^Xil*hq;t z5MSTsZ`ZNkxP5+RuYOJ+J-BlZLL`12LB8+bh@9X-LVMq!(3y|D$S)55#HApg+e)-A zgp)YE#?Xihen2-zq(B6u8T&I82=*fHD?Hj%!N7q0lq7@P|FZZuT6UzVQ@4#IP=Xjw4@lTy*nyL#WGWKubv!Cu7gUoNm!$WDOvelthV1V!(x$1&E% zt&Yw5kR<&pMfR^764zh-F`@_Sv#~99l1l@tXqS3;aT3cZy1ILwU4rhsnLC=ssk92$ z2P&l9OujLkyZJ3G#7)R@jp99|HH}7rIRzy0~8YG_WSjF{jRppi-p(Z4|Xdtki^ioeNxdBp9VZ&mKc` zWMASw{r9l(#i;i~n#u87u+p$&puku~#lY$)_fhEb{3-F$%)AKWc88n<2XHU~M5E~m zmjlg;)E0nLnU3zgE-7I4qxzj%ER9qj?)V%IKGr0FYh%F*j}!;iyYR!Pws|}B??}NS zQ)T(@NEJq#)m3}rgWfxD#agGesJ~9iMDyoup`7hr@D`uN-g_$MpGy@bgZ18ssVeF6 zve|Tb(Ty1KYuo{zNMLIRrR@?u1nb%;#N+C+H-B4MZ~BJv^&d}&FTs8{#5!@`RpKtO z&@jf^J;Kew*~wI78=K`!S8Zq%A`;sFi;3=jDOm`=E>%#3s0r)9FEJG~4>vBEBVUZE1MIry)%l1q2C3U9VeK% zDaF{H+zslF`o~m`7GR+O&_V>BH9L)J^52t(_FE-gsXayecIY#(IN+KAZB^hVeV%q2 zxFB=2w<%e}83JRMEfiy#*#M@ypRo)zjc8#f z_W12OYZ@8IPuLb{F z+A9$<8%&hraG#PB!CZMW z$jBCJePg+`oz*(2FR$6i)8Zq(uQmD#;ww%29t3CSDlLEBH+$8W zC85lV@Sc|>)luYR7^wFxG`Rfs#F>(Kv81A9B~{mzfw)5pM1Z3$SrYO5Rj-0->tGdO z8NvW&Q5cO)%KK^+Iu%inX~56A28}bVvE;&(=4G3<+Bn%|UVm)|;+1&Y^z@DzT!!cK z26Lbr-1WH?mDh_+a3&GPTQ!k1UUAi5x8}*TXu-Z9qk;-?P9B%sXi=l;+NzYNXzFnL z;wMPAqEGWS8DagIBZ=dsVyO?C06wkk!|1c zFcShGBD)w!khNp=Ty+g^Qn4F1ZbN7wI9@2hq&KwvWfjzsa<{5Qif|X&0y2?QCXWJN zq#xYvYBl`$ePF<$v9fZdcpCh}ROY^esaT*jhG7lr#$C!?{=r+}sZ;}4nsRj;GVZ3@%1%v!AFg=~3%+t(M(%o09;Q(-#?2O&I~DZ^zy~!WM`rxs(G_+w&`w!oNgylydcNQK zri<&WbTZ_wGam4g@YUiW#!|$goP+QxX-qr{ieFf$mhaMfh-!}K0*j=*D0ANO7r?iA zRP^J+#9LKqh9#ljeR;pSRc_|Xei)C?SR=JNh&X9BX+~H`CAq|uzsej7J-uI_seiWR z929*r-WzPwbUz{$b%OG)@!Ugg{oJGz!2sz~HubXJi6vcZTFrtLe$3R4mkGUDvH zfooVODsW+pvlR|a+ILhB2|Aka!aI!4Yv{TOdCjmu@cq#kfZ2$0!AFGyc=~i!m-i49 ze2^g>SUCT;$a4LR!QvEV(A&O);~@*R&(>?#O=#<`zWFQlSnE@GMOZQA&<$aI>2r~Z zsf<3fF;YY1mEQn3py*zGQtaUMbedsV1lc?Zo8!Z71@Q-4TPRn+$t}(1xxIXCenebC z+!av0xISiajdq7`khGU?D})xr`F@&LU3i zTr^Ctj*F>=^GX*I#-Mr;QdWP{05|oo7KX`bSlapT(|6|HhB_qr)?;5NM-5@N+(OgB zZ-lKHkB4m9walbL!-LA2sO2=y7cX0nh{Dc2Gm`mpO=?yhiY%Xs?YqE=^!{r(p-St4 z&5s8PgE9O{Yn8;i%)qOxAn!vJYeKZ0dq#djto#}3`YWID&Vd=^fn?eBZFg?AJk;{% zKCyzLUo8=V4VBcfYR1*MjFtA$VcCjAM>7$_?k(FRgat;8q~8tG>97@^{F3)>k$0Ru zirkmTn172M{NfD+ab@}I&JH`T01MxJrd*d1hf^OoZJp@FwQhP_G($!0f;dZfRb-?} zzpnYyYD0`e4#u<#PH3F#pTweA%i=Xq$J9@XGsjL!)w0ip1N-eNaW}mZHb&V8ay8Xo zn*{lYJt2N;jC1g#>7I9p%&B7E#nF>FPrN%eci2}E4Sxs_vV4y@Mz#59Da(DRUae)J z5FZIwbnt4e5U@67W$!9RV^0gix5+joA|!$GK?LlE84{yS&=?_p!V1Vn{_M2Nf472& z_lS=cdB;Qd&3)bvjw3y&3s40p(RVC0exD>BOxkb*IRgpDc&o2$&8JkEG_TvCc-Wa^ zM*g}LgNtvJ?S?fnB5;wZN|1AUAt49V9eq-DrU;ia>59Yb+0eEsewweH=l}(IM%WcA z6pTw+lY=>TJj)E@7p77CSn@>dP%#XXAV24G7x8agMQ#(bL!x12tVwtB z^aevC40k5UssN`|jYhW9o_Sq%4x8;JJZmXw)$uODv2u!!T7AFYT2v2Z)EEC zY?>C&tTl>$pksP2(o8;gcW(Am%U;7a%g0kb5*v$gzO|GIpo!O4mCD{NM3^L>S|!$u zutnP)XARm#Lm1u}5ArK5D`s)v7nv2Nz!tghlb^;LP{g}NHFY}t$Pa#*#beN$$k`=D z$*A#1<3D|x`NhV!N=2%jbbC7P@aw};2dgxVc5H}}o2f`)(d+h$-@)zinUY8HS}C}D zq+Jsqwlzq=Uz9{{0%M6S$1E2Q1Ht*;0?Fl5v4mY!vi@~&0fVP>u ziNb2q?=D=Ey0hr1{_QRAkS1M$A z=L_fc@#ItfK@@#m`YI|;!CxX>VY4Q8_!#1xN&I8}hIbKwX@^I#05u|_rENC+;k)Dhz z#`}fJSHED499Ov4L{8ZRj41kg7FD$UMdBeqImaeQ|MDbu_Ndbgcz`io$eN!k;IqKj zOgkZftJX-gDOUTi1F~6O`{ZD{MH}9M*D%XBTNz2DCAImvDb?AZ`KM%n03}+qsw>=S zA_?h?ls$H z^Y?y-98^fHDQgf*X zzLg!7<{6clkGIqo`|O|bg~z_Dl2|Pw5V7Cml%{p`3O>+frPI_dT?oFU@vv5iT>+Sq zdk1fWwjlv?wAxKDwUuE>E**KB!J`&v`aZZ!Ag|6PBq2&2YH{<{a-#5A)Dd3*^qeqi zdV?!D>D#qEQB%6w1$a$HEOdF+4GjF{Im}7W-Ky|}fqyNAX58{2Yo<<|N$Wrf;S#o> zeY(wzOjxHRf7p1g|Q=);eZf+6Zvh@MTR*+n_Jf z*n_4&ytvj9U^Yx0Zt#>Wy9=N9Oel{)e@zBPcdOD~wc2I(lbp?W41Sw>0rPur;wybn zJbC>35!=ndawo7ECLp?#{P@$QR zQ+AJYa8bWxSpA~bv#&)EIt2O-rOXf_Tsc_iDvqlO5!4?*f$)O{4+Whb}CGQW}LtE6*pbTX>mieWxpvT2M48{04bFuPZC(*Jy zOYJ!Iu`pDQI${qak8_xV9B1yWLpw9fj7*O219$MTlv%B9T%87mY5iJ#Y|M;2+v}y8 zEoJ^4k|{D%zNfQL@0^w=E(0Mzw8F${<=GGF7f~K_co6Ckr9%9;B}w+I&eD=jvBZ>J z1{&lG*cNU}&Q8+e&5D$?0C5j{A*@B=4o5T}_{{oYG$B(yWrSYk-Jv0%R43o%eV^t51dY;Uj#g0i3P&gD ziNg(rk)L!K#a##y&&ER@Z>zgtYLT1MBYg6-f&Yft|1~86x!;$)5cY@iF#i7CGPz^M zezh=0(VeJ1L~kxEJ-sI7)GQ}ifBj3HFEv`RU#R;wWCif>kPcK37;ZOCf{KxCF+IW(%pUX9dO|;D;)9LMTC%vu zKT=H^8-zFG5NIu!Bz(V1{sR6^NvTCEbVU#516vX3nxkDQA@gT^3o{3ip|M%bMB?p3 z^rGh+1IVJH9WSZRua^q4V=ovcJIO^LQs9`3BI_Q&SC-o*tB`$==c&w0CiIQM-$6J* zrt3y2LL!)zF_dx~Yw-WBc=0oJUus-1t16bK8ovS!<9t@Gj1@opwq)DJOa$}X)n)TK z&~jssMj{9EUh@_R_5)rXy3 z7mm8p*zU_rdKM}U9kBCAdl7J=lWDK@IB?!JOX&rHXJs9OXfY~)CQ;fsiJ#tk>(PY; zHx`G&_R*$#*cks46IEr}b#k4X<4wc=-H6qMZbNZ-dll$Wd0;y9l5d`HSbDTWQJFWo zalCYN`oLrk;I$cAO6?JCJh(kyYGo9NIhgW*6 zP1u7!dX=D$^=wu+?XziX@EwN5K;i$mpMoEwvNkX8thTZmz{$>jX9AzM}7+@uBvJ_ zJUw#BKUM9eZ?;rL&`pxEitA#iXB;~hP3k<^PS)zpn1Gi1{Q8iG&4IE<<|k~qnXR5{*YnRWdXOWoXOv?Rqez9JW;Ok#~` zyyjX#fHp}UEA@2F_uO0#<+0O%I^?BM>@HHQhQahI8g_65Xzc6cb`P!WcavX@6ocH1 zhy;ua3B%i6m6y_;PtFads(00WiT!eBmbMDDcFv>?apC04yndgX^AC~vg#7O}EF2`xZ8iWO4;T)7k(^>VMfZ^-Z91BwDmWt0IM}DOF>^K13f%yR zH=j7TsxRg~&OyKQE@OB%-7k_)(zn?BUwx|4Vf*020cqg(@^B?1$sKWYMc(20XsO5c zK1CGV*5>b*E-UDkZssj0n#C9KV{o!bI_@inBu-96CaJeUdo>LQV~aTh29+AuU!fm_ zGocEn{~=FfVg4U^8W9&e(|_k=L@#Gq(Yr#V(!loZO>?oeliT~G;@l|<>YCEmM*|dwE3i6^2=AWPYsxc| zG=QUhOD?zNXI)VCSHADfvigDoL2U1pi_c6k%Vn@upCh}O8=LH=0REueJN7>U4=ok< zn2&Zi9r~@M?{9gYSkWnpaUV>sHOm4UTHlIyyN6sKvV8<@J&1yHBQ99(A;t=yFKZ>h zgeyOX`G-@ckcXT5nv}(wy=yho{x1*Ds4PMUmAEp2UNyF_X{N~$r`UjXkfD$aqbb!M>c_u;dF|&5f;vTS*%dnW! z`JP&vPr)ZOdLW|x+kb0xTYvg^8N^P8G9&72z(o(0_0x+BqUps$>^kbb#YIW>&2B}Q z^T}9%u$>7%I3>2SX{*$2-9Db_;kykZOLb!YKB^;1Z*#b&XsTSkp2LzumL?S^2rnoQ z78`~g#?q>bqpp^%6*_oHmS!dNJ{gt+1BOXPrwEpbhN&C|LN!p?)NX*4L}3XY3%-TT z$aV~!wb`iAsPS(omc2uBW!LJ3FFu7dS+zt4$DdCaEP=;*27lImc)oLVC%mV#%yW3h zzLg&-8@iyn)u=stTNo=&_I723?khGM zR<&H72TQ=n9hrgZmhki|sI0+Y0(VJ=39yR0}PWqYWo>@OQ@njcAk;bb{%k$F=}R5FX}Tg{^`OZsP>J!Jai`1Vll)fOPuP1&Tf}9EM|LA7+|7Jpf`|3YEGwA6X==4EA|Z2kR(guN z_COAA47(%qAktz~dTQmI%;Mmb%wkV!>gI~f;sg-S>dG^Qy_IzkxsiDwcTfJ`ue`>v zfn5i1-6@%U&+)7e9%E@<~4Hz0Lxb4P+VOsC(y&YK)n8U-9x_YS#d%y z{7r+Lm&X-~Z;;FElivS?D9isul#_$?e~oC8x~$E*5K{NKrY&N?L9Pej@y4DBlAn&L zQ94xqv}$yY2Yn?z_Cn~(2Vj2aLB&r76{c9=;NI3VX*BM&SR z!gKFn@A)X%YRss||7_%4_;M%xxP0z^1{_*`+yUO7+^e^I5F~9g=KI=x`y#Yy-r)d?k zVuB~Tm5LCjFM$rJgBH8arR{5xKH6z{wuVtHJKkd$;&l&ly5IK6^;}uJ1LHUHGf2B@BMjF_zR+J7T0;{kHT5%s zHkzoqNR*JYKL(nTf)y#DedtFYai5r?+}`lP2lo(J^4_wi(jE_`jDdx;aStehOTNUfqk!78Hx)(IPPSx|pI&bq(f7}A&MC|e59u(&kc;|X8UDOneX(@YjdX;nuBOoZR z>&p6c{Jiiv?s#8(O?YF8y6iJtG;OPS67~B;8hy{>-{kSL_!Jy_UG{xR3FJS!J?R-z z#1zC!H;&%)ID1+?T4=eQ9UR#{=km2TC*<7z_R{~9`i^El!h1ibe)zVofbo8u_ZF}C zdYIpc8K5*1u&xp{=5#&ukYI3WL~^ip0=&;5ZjwPRvR+7-m$i3yjWfR4PZJxl5pEq- z2wsPzFt6Dz?Af$(8J2K5KN0Kj$!F!f?W*&CHJ;75wdylaA_mDwu2-FX$ZBEKe{E!T z>3mpQUSE#1L}>n(@#J~keY@GJa?*DfC2^}-tW}rSM-eyus)Nu<4_^doy(@9F<`=!CeWhv0OdDHv+Q638FUx<%tNbtHZT`Q;lM6uYNB=M5!CWlb zRBQH9?}KvfZ^5lNXT5MgFZDt!BUie2rf`uj<2w$`niNa7V!93B;2GEJEYBEmHGwnZ zWakL|-hH(SN3<6icB$iCjI85Lcn{Q0c4j6H_J=n;FiDAI9-)Ygi_mA@`k~4Y?7E)F ze6$|P>_lf11WDU&#dyj=>rorcOhB*85=^MeT>R>qGKup%y%d?pYVm1vF{%BH^O5;D z|2g&V;N`rOqr!NuxXW+xiTzJ`GTuvR!Y)%htQ#?zZWRBNhx&h%*XExh;v768;%opW zJ2e=WSyvI8c?*Xg&-#QB&w5Aq-_A3Tnwl~E_h|p~-@o%{RcxkJ_W|5z&;eYQg7dHe zCHL=ZGK-t612}#K=i+}?#sADG=RKD8lKegN=TOZblk#;SBH`l}k7q2$TqBcp@?gGq z7H^C&GaOJACrXd?n9i+EUjmhd!Nq=S?jcyQzRnh8nrT4j3ci1H3HALI+!l%HIvZjj z|C~bW%fC1)2-@&q|DQNz`=8GHzvfg1sq-HF9)Z>lVUTsW7fCxAi)l{AbCs$&e}e?W zoHKf92dequ>6&$Mb4yAYVXRN1t?a6r=Em`UdPHCEY5#XjLW_>i-MvQ|525CFbIHk3 zF+s<~EaEZZ)^m4{LDqIz%>2sbhxVoh;BnKDtLNuIM;@^I;cNVjf9$nn;3nZ8r|#E1 zgU^(L7i-4RE#EmMOHtE4ot(E{KByyzmlyj_=g%dJEf+mnrhmU2eGxAGR?9&3KdJR+ z^QV2&5%+Ht(pq%Rl~xdZ*a?uw@#qIrb@ZwP2!ef40B1i8NE_5X^LQs1->#yG_1Ufs zjv55F;A2c14Jw989GwId84u3o8(VX{1o49@-QG*`Mdz=adH8|QYCLPUYS)AV)v@;> zPbZ6ejHtlNt)9$IojHdAgZ8@T`?AZA1q4L_9h)xY^Ws%8-xI$!43^yFkP%t{ZfpBb zL)k2}3`@Hi+hjE+bQo$FY)lk18nl@?E;|upD@SCwsuZ=_A0_brIQ?aG&?sYJgl2>W z0Yd>*(7%@ckJBm}CTsh$zLj`dbK5@4Udz;foErS&v}x7HhVuW%>9{{?Kl^`iDs!<& zy==1+>GU(x#R0*#P2nRDh`SSi4z0nvC7T(3j?j8!$vjWC5z%f8AI+p~hhxc%*@P^#ms0iGcz+YGc)U! zdv~AcxV>+jbN;;-QMoE>RTf3mx5mhsnKM)=_8vD1b^$M7 zF{1cKov1<97PxH^<89(!cGV5YXM1c~7tp=lvi;>vfz^NarfEQLD*4Bo5__en*!{zs ziv01Wrt9&9LBjOMaCXPS|MaG9m#*?oi6+p6Y;9cs@TTamCog+U8IwS73eeand34wi zK*Gc*UMR%skVuvp2osOa12j_ukgk@S1CR`P+i5$P%eC)?Z4> zAI{$$@HyZcMD1(no#c(Z|RIKaYZr(jfoO zzT>R+?C2%BWd*SBxNP3R8cV#blq-SN-S?N0dK3Mnq_(GXfCZ{ee;fETTPx^4goeAB zZKeSUMf-=6!fb}-_K73e&>aUdBl{1TY6$pk%@Xz+J9~bD3p^nE!qfPLVxsR{kg@+< z{v5_oWw`GVor~p}DV*!Aj$UbKn@h0?X3#9%eE4lvOs!|lp(!+wbyp__;F4XWV ztZNitgyvgca>L-F>pNmZeTIB>K*+x{Ew0!nkii}Z640af(tUA3e@6x%^sj~Fd`j~*@iKxYi24YASbFo_YDK+|q`8?bQM z4JEV1Ft#25*#j2){lDtABP2#CbUsb-7`vHY^6Ajo5Ifn7>=RfqeH!&^5 z>PbsnSrWpTg4pX%;R*`am13kCPd2SO3RL8sgdumFpKPLW<(>X*goowtr1YO#gZvL7JpV65 zL;nj=+W$Zlz2jeqIsy@m`hOw%@CVU%jt-^Ff~vKqnr51d;+AaQjys@`dbHc04?lDM zwhr=qlmLczTAZ|cf?}~8$LNDH*S4-##kbb|Ul1J7d01*-QmuI5OD={cr1b{dd3j&< zKaS-xO5Y<&jfc=!$KKdlmG;x;m(l74lp;lX0Z=eid8kUUQg4$I+hW|^2HFY5Co47T zQ%-KTO*t+P44G?Jmd==dcd9h48J>Ss^vI&pIf;Yyu7_{!Jyn0Bx+P6=0{%J8og!^bv(A8}F!fDW%(U}>!0#{0C%qmz`F2;yM9_Nf_ z0t%NyYYXyT^`7&f4N=ZzuYd^KisZA(Cx)AC|XXSN!IPHWmFZx2yLCxHl~2h2+(Hv+rP>#}kn1e+K&5w=bWjl)NuCKA8zDKm)v}_7|UzK=aETuq)mMBpHb7zso4} z5S}KmOz03i&5VZH6(qZ3A~T6xLltgo0BnmOay1zXi}!A`X21$b*S}OiIk+X0dIipe z`9*4Dx4&&_ZqO87`O`j6iXA<(^vwz2yn?ZaT`2sWjQ(eCF??2*f94GPpD}8-Lyy?@ zqGXH^aK9-WgCjyouo;C8)?#7OUER=E6<+jTioHz$yv9;L#=!)WUa8od~UW7 zN=%b^Z%aLy>f|G@_w;06*oW=ZQ_u5>F5P5ai1E?N(2EDTtwROI>xTQ`%>sbl@wnF7 zkvS4Ju@xub!J&Ln!Ok#Zn5oYQdoyz@u*M=K&Sg7Zrn4k(;^rR;yRJVPDpBroeq3-o zFuREQ?ap6cK_jD|)jdH(P1RacD=?P5JVoPV?7&?}sHM1veWS~U5VmZRWSU#ipc8hg#oP|MPIk|)uliSW1yH=%3 z1|8Ro{KqRAd(@d_9^`kpS`TZ>DpsZJK2uXXV34PGdYeu7PmrgUEt$P%8uOdA6gDu( z^P{WMJ`mYJ9o*CtMf#oMS%&i9>wg7#Og;gFJo*0!@?>zhL9*GhL2}u(Gj($Y&vVJb?M3ekLzWp3RGx#;vlL!2*`$!63 zEBmtu5;jsAV%oQ~udVhRd{MisE%sH!vvSRzqD3L%IFQ^iX+#6q*@X-Pi~^T%KUP7^ z2q9qkD_fTYY$cO6E|IrYIc{x!KFW2648jWLS;~C3{y{&56y5lh-Afn{lK*Id8`n4% z64Rg}yIA4flSV$vs|mMf39(!LBMSK_x_cQq0y{_ID|hJORGyY9A~iq}_HH2$K4q3q z>PsXx-oA7cGZb9PXc8%7L5OEMzSj3Brr%}btL*d$DTfP9H9L;@&w4q$q|6~}t$p-X zfZwA0wIm^_RE=68soc9p&J`|@+`~BIMmxe?a9~vMijM=TG!q_HthDDYtBI8qC;jg3 z(9QMWbgx^iyU%Za4T-BSFc7xqtbd0S+kZ+P3;X{(%3~ofVYLm!=|IUDA$}RSnu^#5 znqcWmG@H3vylI`%4{_FSqSBv(-e2ypkV+M~5hXG>f@WIHwdE8j$V=mr}W% z65DHIPan>a*VgtlTujV4xzyB_Ou4vus}|a+8XUDBmPmnt%*)Ne)Os#WO3rFeQj8aw z1|MIZ)AzOa^f(E*f!Mcv9(V`Nt_W!YlyYeiI)EABPsB8@{3He5#lzOisDmB zH=eVfD;LWMSTyWfRR%Jpge!_0N8SiTHYvEby~*b+OlS)f^fW3E#=L>qfC+qR zNKRq2Wa7za?`T(Hus~t7w$D8#qXvTL!S(ZIb zYIqe+EO-?yuMH;^Tk^SElHafI2j^diHQsvIsfPg%v(fEVe2o_;q>eVndfQnA;czNqngbY*!>I(> zS{Qge7V$1x6yw~Q_?m8MkMbh2Zx|0w0quZ0*>5!i0Z~3=y;oawa9=+rx%NfnHkX-=R-?5IdCDu~!1wU) zIQY-Sa`>!_?Em9vrvmLYgS6V0(&uJ0>)_(lTLWF;NIJqKn zUb+Xt(JDJJNRBeW@$KqSd6ZdcUw$0eHrX>W4KOC_3tlPGy z8rJt)nvT*u89d9))cr#|EV7MHN;x}wD3UboE02oI7it~6zV_7rLj62+T!2YS^q_%r zs-u1Ne8ZH~Q@rNDmr{L{n$89HRw(y~D6aLqd@J$Nb#4{6lzjK(yoyz%&81AMV&Pby zefQqVj?VHnz8Qc0?!qMAT!pWopp-geBbV$s$DizK#Z z=N>?*3i%tBCIJAws;kziU-X;4Apj^HIlg^-m@r{Td(fy*CcZ<&0z|Zv0@*>T>P}V7 z!Vp95^73y>w`gZv>e?70dK50O)W6{&xQI)AjQn9XgB>?J0Xho@)ir7`>9Ri-V#Rv_ zJm^NAt(|NSJFq+3c<+N0R%V-D4*2}pU_cS>iIKEL)en)z!50{{5BLltcencA9o3agZ+w(^$WDb>M5|@5C04+CXpr(7xWfkN362dd|-?8wJKn zFL7k0AS8cq3t01W5W#Uzk$|zq2D5!-li~BsCZHTbbL~%iocy&b55-I18OihI$lmEU z+flCz<(6G;-b4hnhvn?(fv^w{E9HHYOvprpEDvjFbxxLuMk}Z1`AuHv3fJ#z7O9kt zebKNAm+5P>4Ew{IJR=?{j%%0cs)<-h_l(=s15rBnj9TD{HzPQf!KH8yx6> z3)dXpq`SH)lKvZJ80r60J6M_i=L6z@!wd?4^$mf|Vm;-YX~nN3OX45W-~Nu7HF5d5 z^U;4Wb9>fAHAei_#0}x(q@tD)RerJwXjvm(J?yK!SvAFa3;hMm?AuI6YJoSf9V=x#^b zS;Dx;<)3|JdDeD~?k>n}^jMQ$6GB+w)4(S#Iks&KUv+Y+J@DyEo$#a|aHz5J`y(Ew z`n>j;k~;$Q9!Hcjb7N2~9r1>REC(}3+W3A~+I70|ODmD{A2;{Li??b~O5-mFL-a@e zzV`7J2G29~Ol$Q|^j$GGC~ByEl=KpJ8|wU2jxW(E%9NQqRPs}l%EObo7`dG^^$_BL zDbRLmpJBp?D3!6P^>l1<)VsE|leHN{r-ET_r4O@F7c@%CW%wBIP~yGn*Mv9`(3Jb9 zlz-xaixmriB78C1#Mr`S%fVr@7GJz;Iz64|FGQZcBSx|bN9g~JM@K*Y%GSsB5yWd7 zx`OH4?Se=!&fn?BJ@iTW8``t~P3Il#qRX$}JHSl#eu{hxS=NJu+09@XGpYkN>(2XZ z_E7AtpARGiFX;xAwtyLd9MaO*z9qRgdgN!V1bR{&VKQ#|)4K=F%J~52DIuo)8vh|6 zWgh}EPE08INir^0%QzVNIv@i;#=}I6G1ny(oS7}f&#|UKDam1z@$+$&{KzhsKNE}j zrb#AxA|lkoQhwVmH*O*#ryTPsEM`p91m*lUW$|!j<2BKoQR)b#&@#be?$O zdE}gW8KarmcD?FwFJwPa=5~15I~UQ^K3I6~uW-JTaedVRo|{Pc2$O1G9QSw7{LL&9 zcKZJvG%Fm4ttU#AK_Ew6%)G?1w6NfL`rz!h;1ZXY<&nL+UxEz;>JgqEqH4@iEusa& z=d7DJIk5wsGCg_5-8;M@8E=F_wXPa@r8Lr*H|m47&&$`G4m7Z(HuO&QyfnByQFseI z9?+$>fy3H({ad%}B)s8kD@{=grBSi`?l}EvzC7FS6z`lTjss34MiU2HXH4OYA-jcJ zw+S&k>S$k(y?lLH-jE7+D)Bm??}UCPd*3axzTot;q29ot06JpaF#0{4FTYM`E0NPY zXLD+_A2zIza92KEy*Y=r1YH?uQ77uYQ_;3BNhO0HZnql!@|={7BuhO*sz zm6;3x)1{R+ISj{3JWsjGl!fL`Qz!;{FN2YT%70q?<_)n4;@knc3HoV02Q(|g)Flk6 z60(w@6LfMGB)(1+9b~qXVG~4}o3KDtAAOcyy~j`Fx2$@0LmUNd0ty4=_+*g|fxkj4 zL@#w<&FspL%gQWmDo9h1$sSseMrIHw$?>Z1huf8hlZs+ANSmO}nIyMKtBeRKBw2iw zDl^`$+2bjYv!8j)Fr|q~YYIT`Fq4@r=#_GJ7(rE)HRkI`IiIqX< zep6Ud>=P*=C;D5F@5fqo%BrrzU=WMtSTn^$s@Bu!ZmX983RWwB?ta;qCKS1fR-Tn9 z^)*4HV}oio8`AXdR<#M|P_+whOJR@G&q^ude}ajm*sv3SqPc)zZQFPDNt*cSlbYQ= ztzDs$G1Nw3m_I}uSQi5dNN$AIp9 zsEUu*Pzw64d|HK0KpP9MYcJQCs2IS5*nNs*yId zmSX^o0l0xpxsQDey5H~{((!K>4)-0bOCRl{?+*(19Sut#>job$951|sryp6>AAaNS z2&6B(aZ4Wr`X520FC74vgo4(w9}Q`i%|u)?^uUy~qBzJk zh^D`SA~hc2wc&t&xhj#?%8UD=9OY57p%bVF=(t3@p{hyLIW2_2xPmnen9jj#p4kiY zY|;1zo{F~-RoLi;u65sMOR?WEy?w>hhSW3B_c|~;V1lmI_l7q*J-qW|?Hr~}pkJjL z!qcATYjS_FqJex91=*Sp+!ZBf^0q8Vq2XfZs`6~R7Dr33D$bT9A$6=cSnp#Y#jzDQ zCZ3{JsJ@hkSB5rMtW24%Yw)><#{1iMA#WN`We|Ap2P_cW@0&E3AjiKG8k|AQK(N5D zK_uX$RZ0Rtzr#_3!-LEb=@ttG^1<~mb2-OR_My0nC2#Ah5ae#dMqr}yEBC2=AJt_O zYm4}V00UjGn*|BNeG2BS25!B%iw)yX3m*n=Q8&u~itGKL!XGuneUqgEhWRO#8LkNJ zxYXo(#3m4D=57uk*%i?$Gmv)7&jltNrzgMXk6nk?yjG5MKbN5#{}A$pxQt2JPSEAC z6|xb14AkX$f~3yhYx~7lO$;qUbW~)pLP$D3hp9IVS0b394Nqc=j29w=(?^*EdF5-D z)sk=uL0*b7P?XC&uvn5TAPQN$L>bqynRLxP5VvuyX+2{Wi5C1+irk2COa*t3xu3k6 zs;ihHuB%LiffyT7@*TB|t$-sh9uPOd_|uw^D>u)brDEVT@FL3J2X;mC>v$TD`$xg9I523`3xl-^wsC)GB!LN8`6oq?9m&^n9IIP%y zQg5k7t$7^o0zirvfE4S0yfD0MC;@ARA8v_n7bmA5_%$DX!|w<{xRXvlq=D-ae!bzP zoPPB0s-#@A5UtrZ&pjSQ1|8m;+aH+xq=Rl#yp`RIK<{^Un}mM>cbvj&^Ivd6)8b|6 z`#_jF68<}+|7QBj|9^Fw(~Sqgs!%6Qbe9LNup#bds`^LLBREp+UM3q((A%Rz5uNPt zr_zD;r3?C=sw6Gv;HUVd5&HX?fN*EXI)0NWgtenOcki(C94=d z&7yw)l112=074A{)%gMkf`EUC3I}p0KcdFv&Fl>a3h!M2SyVdL4Uz?!01D-O{1q@q z*pn5wg^A1cGkzPoEnnQGs`QtPO`tFw3_7Sq92x zZ5s)}j}{~pRIh5941&=4LY+OZo8dA^4GQNw22^Mmhk2$f;Y*-mW9p;>5nmWAHSuf0 z^q677xxbS)bKu@P?>Msu_|HQ-8by39qoV(a3HN@`0kmp17W~Wm0PUl9miNWX0 zQHHgw#h)_thOJ!a8jqLxl17XS8Cjmx1wF@}2a)dYfff~?jmDv0#pZkQ3%A|jsN~(fm<@kFF3)Y6Keb{z zs}2AfRnAYOH#Cp43ijIdbw@nZLKot+WO&RJbWxqIP}ta}hq00tG-`dlu+8$jy5il* zHc1BBb4D&q=Y6ih-C&J&gQM!=W^BXlY|J8$I4s#9GoM)}oJAcT1B*|+Dr!F3hTb0x z?mH@~KibCLA821TfSmIgen7>);o0AN(Jy^ukG>-iyznwDeMAh^Fzs0gH}Bb(TutC0 zOr0$qj?cttBD3V9a;*)#1@-bLE+%wsvy&OnZ+ALqH147DmRt_IYV*6v}XEA4gv{HckKn~b2M?t?TPGl=zUv72- zH9^ufYK$AgIUz0AVdW*ycUp#K0y7nyf^6f@C<}u5)&XJ0G)iEUk~k*zn0oSXB!|L& z3O}Wzpn~GCXJf2<(Bi>1a)r%GrodgNQy}n-HL()tgO|bNQ6@1`*zJ(DaV==p;VOgc z^V$}LdORy(%~o9om|M4egXSi4feXfP*Dq7PtL(s85uNjipLyu|(3r|R5zRM|(zIeY z!XxMjsYm;@+kYw)9L0Kstm|Aj75ow!$Yice#GOrAV1x!k%f^OY4tC_MPqYDJ&2{n^ zk*6(V2?GgRI>v1X-^pEqDm5jA>}6w4Ho-h^LOff#r)s?vq9cS(G}!j(w;u|EPhe7f zp0;s4C@eCjWyazuwUVw15&BQm90oKBH!dY#pKa-@aon%0q%5SYq|Rtm6jj}QSW99m zpcGYBc6v;vi*@n7d{=myQ6k!~C|tham?*CY z=%vTNeQw`!Ji=inJw0YKBxx1LsE}64`3pAh$b}u^SRkprHmV$sl2Qmp}jt>tjrx7K4n_C0W!)8YOW67F1%_R&h8$s-QQcP>fc@p zGjX>*z}aShM)V?bM2ZKOZbUc!{*t@P1Du`zw3o+?fVO3O-H%7~X-SXO5p6&we?$+3 zOf!J>U|wV;qk=Xv5eVbV(%hBl5-l3qnY|;s3$H58$4&r=LpUL~`j1?bJQX$^ZFqmm z1K|X}Y|&if?YI2al=5}pdI8$~i{+cEr;CM~rM{Ib`+ACjv9mje6NkRX*!_5cLFqA* znfJ$u%*`00NP(}O*_(xot(UG=YBBW$&tG4kvg#v^kymx>)AMBn>5Erb&UT*e+-)2g z+mo1BI<9S7RV7es3UV)(Ugi#rO0G=7B5opb?~mN;O?jU3Ofor0e10x-pXJE3dk5Kk z9|mUN=Xc6h$UwM8fy5KBYzGlJ8|i!9HU|syjUbasy6BET@*Re%w6@!tlCR908ML-$+zoqeZoQ*YCNruVsvTAnccOop!HE4>TfU~nzgMd=G|T<8h9W$~8|!4v4_2qg z8M9}a(fOQrHmSl(Ab$C4y!q%Dc zj?P2y@e|rC_tCs3UmI3>ai^{^U9YY&4m86$rtu=%fQ)cjrC|8}I4XZ*y%Cf~=5qCH z)}0ZQW=8q)$;=~m9sM0~YNb`JEum}gZkSvbHRq``Ok_>`f|>xd!6Wl6A;uKSR_g*? z7`k6$OVa(tP+ZecP-K@4IO(l9-_o0(UG4dInO`@OfhSXoH{*$IkWgI8 z@Ipx5+dgb7paegKT?K3&7t4eL;*8OWUT5z#JAbFu2(d}JET(*>X1KvNRY1YjR)ED{ zjI->k`Ht5~%FBx0D=lyQ#i*5K(VNCd(wBCpk0f=xNM(QY! zY(nP%c>M5O9_VXZlfx=R_0E8H3|qJZx7r zf=(0p2~egp%q<{V;S)Nwx3pNh!WeI!d0j5d_7&3Lj?m7cwe%fym9dUlN^% z!}1t@O7+9&t+opNoADJ4fm|*Rz%$vvGr)$?Z(rS_C~)x5 zY+B6K0Nr_gtls0*sgXF%#&Bfw{`dybJ~9f9`{kffv%D6`i9 zdFhb>Wj-1_Ify!USzzX^=0MezOj8mifimbrpG43@z$~UWu0Yv8EAE-{ZSrEp zn#CjvbaOGqiKe1+Vs-MM+~M`0hoDZAAh(Z2eZWI2@Bka-q5w*#Me|WD8c2eQ1VCbL z>TSgAtBc`dw3_&K!OeJ$aYer1%c{cF!S{eJukvZ zUA3NJW(SiP!^Sqg(V`#`c_YM~jFilEQznQn!imAcs8OPv$ZeYk=|Q_zk7H;^7)LCy z*Z=n(Cl5UYZiZyoxdfr7*iYCcS*g$?YZ$s9R6!AbqK9zou%^jhPs~iB#9?LV2dgb{ zfayW|eADm)H^uT`@bW{pOP_DL?R9Y{s8fBY{UMfH4*fMu^ELPN7LLxzN4vH`XK-q4 z97~6{DvtGpC%$Z!-3Y^mzn#GY2GgLjfATf%OkWl7BhiEeB}HTBN1w^jVHG#gs-DPF zKx?*!S$yU0=u%sOol zlsL#I#Ht>}_ng4O#cW^q%Z+fo@vD~;xWhDcEa?(t75H-%3uhl8vhi`^{t)+^$dW6nIWMi9=P zc1HY=V*23`)u+Ej*}I8w_)j;n>3GH~X1 zfumWilA)y-8Lx%daZt`+=0vl2YnR`zXtZ|g;C_KJWHWPtLqUd@%JSuw&aRFbsQP?W5nqjk73 zV3b8Dh#5bpAwNrz)PVUH#;A0K6zMDa96ZqPg6>itN|pP*?@}E~wg1KfI=-a3S8UCx9` zz@h~##oAmlz|m%zQeY|e=7dlHb%JgNJ4Y6WSfyBmZj`e|u`b*++r%w`JSUj#?T?M&7C&G1R605-vr)gKn z$at5&Cw$`CF!5~}5hqJrk;1_SITG65{o>h!sE*GVSOsFX9~BEXQD|Wkq2IF~8zo~5 zB|3RZZe>f-hwKZoflov3cc;FP!%0TJ7A7oy8k3{%F4I9KDhB2U+!tVqzud0-5L@o} zd-G*ttRR~45A={&E>Y+j!R|fPZe8`?WF`KgXVZ1!xw*wTc@$tv1{6Pc_hOH26=$## z7N~sQnbHW#G}b5+7!nDr#l(s71?58-==a1Nj(#MfhoDu_#yBf{Z)J_a)<1H^uq!4E zfio-_4ljV`$h_7vmmB+A2H z#U&Pvtwu~(42ePDa+FmPiXvKBd0YBHBC&dtkp0_7b_a z1*bQK(1w0uPvBfyVQ~Nj5L{M~4m)hwpo}4WSDJ~4GQ&HKElqmxj_bDOt1}L1g`)C~ z*g1?KV7Mcn-lcb!bSa91P?lpmaNSlwL~S4|Q#=7J>}brieXz+wGPuM2dHYJ~<1Na{ zlC-Ag%G~AE*wZ8AU}2}kVCR_lQ5g$ANH2zHJ@k#}T8cw50WEf^SY}XRfOUd&rli5P zE8XFtLph?N5RI&+!`%1gXhPYRH zt<|sM2Bou=dtevUimb+Q`F&Nh;bK{ZGj*KwtTjEi)x?T4?C7=nE&pxLu|0*laMY^B zIPuK(nrdBDa-*Td@y-#DTwAiSe`evvnabngk4@l}dcSbraPRTr_9F5!pbz+Pn_ruu z$SbfUu`@Gsj1rY>XLq}LYZk5k_JA%7x?;$>YWI`5D;b({&F5zc%rwHVS{G;x;g4H<6Ik)WX=^?TKo6 z`$b97R+jJn39rR_r?O)d|0u$_C$RON=bGo^bZKZQmT$c!0$Sf~6gVM1svG^R2vxBR z=42tf_yLo-`KS8H16+&eWZNm^>Ur0_;lSi`CPU+JBPJbb&B;)zLOG4Te>p<^$jwRV zN>BenGsLS0_2uo<%)tf^7PU1;Q*#?G-F=d`7mxGkNf{OaSg8+r0gAS?HQ%_L0wvw0}JN)ci)}slEV3PS4>z(}9vbupeByI+@-XBkI z@uE7Ok6}7y2+TV-y9LY3kSf{Pz)6%^z`sqKa+!KI^5ANG;WfR49uS-HQwm25d$O`R zxXD!6I?-J-V{v(2I;uIy6eyJ|b9`x%OIQEt5vSg_Kyem-y#MUjL>k_{5PtRAH}s(8 z386DSelO~`E1V}95+M2#ur&hi|E20%f76`{;*PFHirW|znGr9y+qHlG(*cjkFGF0i zm<=|hX(FvLP)+X9gHLdzXP@{#Hjv}kk?mdE!2kniEAfpeH#14*xk$w zMYouOi=kKrQV?iv*`7|97FR%01yAAK} zqvujMEKLz=tATB~;qY4t?`5mya7==Ep=w@(KVTjX9Kl_!DvKI)L3=8@bL{4%IJ+$z26o;c5 zP>LnN-+oPCOea#O`{aHv0+k^}m-u>Mb&ZEM<&rjtw;FTN>NVoEMecRbc>7G?u?sF= z=#5(Za$e4;-03v9@r2*g^E@a5j=95`l8#Mk@3GHqB#yMd<&hWZD9j%*X66xbwp)#1 zaYOj#_fokuhjqe{lCD1QQ2V@e^bEwF=@Ba!KML#Ki}FAo!Oa`YFN(v1w6l*QN0r?@zf}J`|%a>Sx>{|``zha@Nv}0!B>aU zJIJ>j%Z74GHJC%k!QIfn^p2e|)gI5FKn>u|OD{uMq0NiB#uR#n30MmaBVgTqF|2Z4szaPX%SF$kMWkGyz@8HL?f;sw$*@nTt*(gok zwm+=#a`d@xDOkIiuIoOq#cKmY&9T2ejq0uPhbt4^M7W`T**!lrTsKuVbaoulFmxHQ zWB|OZGw7y26dmj)v~Q))JjA;-ldOLh%X(I`y>Y*Bc5Mz0BD8vE2w$w~Rxk7(*HBh$ zmhnjLO!p@7=d%0(QG(hkRp+o$^)1%*ZwO(k!N*|CT(sXE8HByT_)9?|ZrdE#0Je4> zZA)(|bwR<+=o<%P=WUbqnQt=lSF?m~IvN9LTQ5%(xQch*6N@cXIeaYds`SGU4qzxXe*bn5Ki9^YFQY=0j?A6*izhV7Tc{Ch1EiB? zj!DY6;jVP%htb$z==ya%Yq*3*JU*Y_w{|>FCpfh9`5x={wP>w4zp7YN3Bp1V6K=Be zGa$0%G=TZ;eMX$lzr>|b7${C}!r41NSbc^QfF!k~AwX)dqzX@Kyz^%ZG!6|41Bp(w z)6JdWBcB-lRjoTu4VnTP38L*y=1sY zUWuU>d5K=>7jca6jqUeoMY^lvChRDKH=GCe3j<8kOg)MZV$thDT}P2cL1`AR?vj)3-k7Z%Ca=zk4LjV6{ccQuQ9zcK1Ty zC;_th4iu1Kr{b8)^8ljwF1XCkf$t2;*Vijbzq#ln;0jP!f4~*s0C%kPW}KS^#4?$Q ze3q&aKG0T3KzG5(R}9v1?UYd0cI^}k1ewD$f{x1&P4JnPyY%-dkYsVu)On$dKL}`& z_F3tXFY-lWKndL~Jv>B-@|V=K`NHw|o?DfrU!ObbE3Lu&p&l=Rl)4|B$c7?DINe)* z@(#+De*hJTo-aXSCuw%X(S$;++R1a9?k+g)T{vEoq3k3Z>6JFrq?Dt$E5W_ zI<{N1!3T9-=(XqPox1U$!e_V3q{3&be-28y{p&Y|7DzAFE?Ng6Ms*(olZ#6_%+#mX zm6)iG?gU=q<5s|-fQF4?k=ffLj6J!vshf7J2=UyXxt=FmwU6?|Cy+7qqPY^eVtUt> z-Om;ujv8>0-z=y;9-3(E^yE$z3%{-pccr3Q>G?socPRBc-8~$TJK_!3bERb-^1b=b zZ4*}K{YhVaXCu*s0;Eb6c%mfe;WEWxuUcLDk0fPK|{QNxl|9unS=ZG6v8UfXTfu8xFt2h7q%O1&s zQ<_2_M*kJ3+IiCf?MOFR%dEgszL=ULF!!;+QJWG(E+9lW8XuCc6hBK)>N9~1SSUtx zkv}P^DN~kiwtp76#*bhEe!|Bu&b5SX~_qpZN%R~nid$p(Ms}tJ_;8k zhliB0h!^hT~TH+B4t_-Muxl=4=G zT_jkB`M{8BNh@EVn7&Ni>>?eY3TMiAq!{3CdRH`-r3P0lN0q~pZV5-8HJ`D})Epok zyKHPKcQo(2Jlijw%HIG#o6i!ztlxZxFUwjjlqT4~!<1$Cz#45SU@RChboHrONLsv% zz3$2$O909AtSBOP1vy3LM8tx6ZGX~t+1XU@u-+f5NFtjh#gfWcf)z%1$^zUXTZ8|j zyya9bibTD;tU-g^DMT=%j)TwWaL~w&pY;&VPlM1ba*WDGBlDf8qlydl-S=f-BRn0Gmc|UM z>rg3EI3OtWVCG%s4i;4A8=r&8CYIzh?(=Ik`h4}j5JhIBOl;G3YRdweGQ7 z4{est4YoC`suhJ)H;^M~TXl^(45fjkrcDU72p|}LMzxwgqN$p%PK%MmLc)p^O3v9XS?HT%n^{cVl9 z?a0l%1MOgOob~UVqxrpnh-!i_X%jL9FxRLn#+~_r%~^YjCyKtcFvrvlmhidpCKw9% z3lM#r7EBWmVwkF7{z7T>GNAGfUDKE>ohDdw{;JYg#~{(6#{$_fik@DD`V55WU!g2! zJ0VUKSG;kYBf27M3$%k2t6(&h4dmDswsmSxcTFMElw`2TeG+IF>jp@HA%<*!4 zP)W|(NY1V|`53Z+OOAlrluhsB_e9KUphLK4IxJpp%{1}$rr&YwT79SG9u)iP-&kurd4GVfsU=Xc)i_&mKGUgM{(91YaYa%;WVYY6X?QTOFD_%k41%KuLW?m2*e*qxY%jWyE8!lMb&{-}^%! z==?jr*V*LRw$)Cr&U#k|Qalm$_`vQSQpOJXgv~9?)sf{D1_e*QFOCtGR3#>vNqUZ> zYdM=;;iG#p+e1zpp}xK?4^)T@buTkfE`ygY`P%80qa8&q|JajK5vm#_Xt76EnrlZ?T4Drq z;z63jD&%3Ixu~6KJZK#4$U!}y5D-x#h?HKXGc%sEBsk?>R#x-&d|(E!{Nj$#54_#C zv_-(Ewd&j~H(#Dp&6^%{GY6F_Yis8mcAdnl?@gi6e)?N-In zaMe^YbFe)cICEn@Kb=kuQY~4{e>h$gznFQ7d6%yGfk%xJhg%r`NHw*Ri#C2KFwYSs8#mIVNZl5+NyJ=>G$} C{z;4g literal 0 HcmV?d00001 diff --git a/assets/js/03c430e6.ab7eb0b4.js b/assets/js/03c430e6.9068d98c.js similarity index 98% rename from assets/js/03c430e6.ab7eb0b4.js rename to assets/js/03c430e6.9068d98c.js index e082a79fe..1ed913125 100644 --- a/assets/js/03c430e6.ab7eb0b4.js +++ b/assets/js/03c430e6.9068d98c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[2407],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var i=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),d=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=d(n),g=a,m=u["".concat(s,".").concat(g)]||u[g]||c[g]||r;return n?i.createElement(m,o(o({ref:t},p),{},{components:n})):i.createElement(m,o({ref:t},p))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=n(87462),a=(n(67294),n(3905));const r={id:"overview",title:"Become a Finality Provider",sidebar_label:"Become a Finality Provider"},o=void 0,l={unversionedId:"user-guides/btc-staking-testnet/finality-providers/overview",id:"user-guides/btc-staking-testnet/finality-providers/overview",title:"Become a Finality Provider",description:"A toolset crafted for the creation and",source:"@site/docs/user-guides/btc-staking-testnet/finality-providers/overview.md",sourceDirName:"user-guides/btc-staking-testnet/finality-providers",slug:"/user-guides/btc-staking-testnet/finality-providers/overview",permalink:"/docs/user-guides/btc-staking-testnet/finality-providers/overview",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/user-guides/btc-staking-testnet/finality-providers/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Become a Finality Provider",sidebar_label:"Become a Finality Provider"},sidebar:"docs",previous:{title:"Become a Validator",permalink:"/docs/user-guides/btc-staking-testnet/become-validator"},next:{title:"EOTS Manager",permalink:"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager"}},s={},d=[{value:"1. Overview",id:"1-overview",level:2},{value:"2. Installation",id:"2-installation",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Downloading the code",id:"downloading-the-code",level:3},{value:"Building and installing the binary",id:"building-and-installing-the-binary",level:3},{value:"3. Setting up a finality provider",id:"3-setting-up-a-finality-provider",level:2},{value:"3.1. Setting up a Babylon Full Node",id:"31-setting-up-a-babylon-full-node",level:3},{value:"3.2. Setting up the EOTS Manager",id:"32-setting-up-the-eots-manager",level:3},{value:"3.3. Setting up a Finality Provider",id:"33-setting-up-a-finality-provider",level:3},{value:"4. Delegations & Rewards",id:"4-delegations--rewards",level:2}],p={toc:d};function c(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,i.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"A toolset crafted for the creation and\nmanagement of Finality Providers."),(0,a.kt)("h2",{id:"1-overview"},"1. Overview"),(0,a.kt)("p",null,"Finality providers are responsible for voting\nat a finality round on top of ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cometbft/cometbft"},"CometBFT"),".\nSimilar to any native PoS validator,\na finality provider can receive voting power delegations from BTC stakers, and\ncan earn commission from the staking rewards denominated in Babylon tokens."),(0,a.kt)("p",null,"The finality provider toolset does not have\nany special hardware requirements\nand can operate on standard mid-sized machines\nrunning a UNIX-flavored operating system.\nIt consists of the following programs:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Babylon full node"),": An instance of a Babylon node connecting to\nthe Babylon network. Running one is not a strict requirement,\nbut it is recommended for security compared to trusting a third-party RPC node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Extractable One-Time Signature (EOTS) manager"),":\nA daemon responsible for securely maintaining the finality provider\u2019s\nprivate key and producing extractable one time signatures from it."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Finality Provider"),": A daemon managing the finality provider.\nIt connects to the EOTS manager to generate EOTS public randomness and\nfinality votes for Babylon blocks, which it submits to Babylon through\nthe node connection.")),(0,a.kt)("p",null,"The following graphic demonstrates the interconnections between the above programs:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Finality Provider Interconnections",src:n(79248).Z,width:"1101",height:"528"})),(0,a.kt)("h2",{id:"2-installation"},"2. Installation"),(0,a.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("p",null,"This project requires Go version 1.21 or later."),(0,a.kt)("p",null,"Install Go by following the instructions on\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"official Go installation guide"),"."),(0,a.kt)("h3",{id:"downloading-the-code"},"Downloading the code"),(0,a.kt)("p",null,"To get started, clone the repository to your local machine from Github:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/babylonchain/finality-provider.git\n")),(0,a.kt)("p",null,"You can choose a specific version from\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/finality-provider/releases"},"official releases page")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd finality-provider # cd into the project directory\ngit checkout \n")),(0,a.kt)("h3",{id:"building-and-installing-the-binary"},"Building and installing the binary"),(0,a.kt)("p",null,"At the top-level directory of the project"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"make install\n")),(0,a.kt)("p",null,"The above command will build and install the following binaries to\n",(0,a.kt)("inlineCode",{parentName:"p"},"$GOPATH/bin"),":"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"eotsd"),": The daemon program for the EOTS manager."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fpd"),": The daemon program for the finality-provider."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fpcli"),": The CLI tool for interacting with the finality-provider daemon.")),(0,a.kt)("p",null,"If your shell cannot find the installed binaries, make sure ",(0,a.kt)("inlineCode",{parentName:"p"},"$GOPATH/bin")," is in\nthe ",(0,a.kt)("inlineCode",{parentName:"p"},"$PATH")," of your shell. Usually these commands will do the job"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export PATH=$HOME/go/bin:$PATH\necho 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile\n")),(0,a.kt)("h2",{id:"3-setting-up-a-finality-provider"},"3. Setting up a finality provider"),(0,a.kt)("h3",{id:"31-setting-up-a-babylon-full-node"},"3.1. Setting up a Babylon Full Node"),(0,a.kt)("p",null,"Before setting up the finality provider toolset,\nan operator must ensure a working connection with a Babylon full node.\nIt is highly recommended that operators run their own node to avoid\ntrusting third parties. Instructions on how to set up a full Babylon node\ncan be found in\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/docs/user-guides/btc-staking-testnet/setup-node"},"the Babylon documentation"),"."),(0,a.kt)("h3",{id:"32-setting-up-the-eots-manager"},"3.2. Setting up the EOTS Manager"),(0,a.kt)("p",null,"After a node and a keyring have been set up,\nthe operator can set up and run the\nExtractable One Time Signature (EOTS) manager daemon.\nA complete overview of the EOTS manager, its operation, and\nits configuration options can be found in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager"},"EOTS Manager page")),(0,a.kt)("h3",{id:"33-setting-up-a-finality-provider"},"3.3. Setting up a Finality Provider"),(0,a.kt)("p",null,"The last step is to set up and run\nthe finality daemon.\nA complete overview of the finality daemon, its operation, and\nits configuration options can be found in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider"},"Finality page"),"."),(0,a.kt)("h2",{id:"4-delegations--rewards"},"4. Delegations & Rewards"),(0,a.kt)("p",null,"A finality provider receives BTC delegations through delegators\ninteracting with Babylon and choosing it as the recipient of their delegations.\nTo perform a self-delegation,\nthe operator can either visit the staking web app we provide,\nor run the Babylon ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/btc-staker"},"BTC Staker program")," once.\nThe BTC staker connects to a Bitcoin wallet and Babylon to perform delegations."))}c.isMDXComponent=!0},79248:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/finality-toolset-9c0d5efdc590d6f89e65d9a08e6799f4.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[2407],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var i=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),d=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=d(n),g=a,m=u["".concat(s,".").concat(g)]||u[g]||c[g]||r;return n?i.createElement(m,o(o({ref:t},p),{},{components:n})):i.createElement(m,o({ref:t},p))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=n(87462),a=(n(67294),n(3905));const r={id:"overview",title:"Become a Finality Provider",sidebar_label:"Become a Finality Provider"},o=void 0,l={unversionedId:"user-guides/btc-staking-testnet/finality-providers/overview",id:"user-guides/btc-staking-testnet/finality-providers/overview",title:"Become a Finality Provider",description:"A toolset crafted for the creation and",source:"@site/docs/user-guides/btc-staking-testnet/finality-providers/overview.md",sourceDirName:"user-guides/btc-staking-testnet/finality-providers",slug:"/user-guides/btc-staking-testnet/finality-providers/overview",permalink:"/docs/user-guides/btc-staking-testnet/finality-providers/overview",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/user-guides/btc-staking-testnet/finality-providers/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Become a Finality Provider",sidebar_label:"Become a Finality Provider"},sidebar:"docs",previous:{title:"Become a Validator",permalink:"/docs/user-guides/btc-staking-testnet/become-validator"},next:{title:"EOTS Manager",permalink:"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager"}},s={},d=[{value:"1. Overview",id:"1-overview",level:2},{value:"2. Installation",id:"2-installation",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Downloading the code",id:"downloading-the-code",level:3},{value:"Building and installing the binary",id:"building-and-installing-the-binary",level:3},{value:"3. Setting up a finality provider",id:"3-setting-up-a-finality-provider",level:2},{value:"3.1. Setting up a Babylon Full Node",id:"31-setting-up-a-babylon-full-node",level:3},{value:"3.2. Setting up the EOTS Manager",id:"32-setting-up-the-eots-manager",level:3},{value:"3.3. Setting up a Finality Provider",id:"33-setting-up-a-finality-provider",level:3},{value:"4. Delegations & Rewards",id:"4-delegations--rewards",level:2}],p={toc:d};function c(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,i.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"A toolset crafted for the creation and\nmanagement of Finality Providers."),(0,a.kt)("h2",{id:"1-overview"},"1. Overview"),(0,a.kt)("p",null,"Finality providers are responsible for voting\nat a finality round on top of ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/cometbft/cometbft"},"CometBFT"),".\nSimilar to any native PoS validator,\na finality provider can receive voting power delegations from BTC stakers, and\ncan earn commission from the staking rewards denominated in Babylon tokens."),(0,a.kt)("p",null,"The finality provider toolset does not have\nany special hardware requirements\nand can operate on standard mid-sized machines\nrunning a UNIX-flavored operating system.\nIt consists of the following programs:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Babylon full node"),": An instance of a Babylon node connecting to\nthe Babylon network. Running one is not a strict requirement,\nbut it is recommended for security compared to trusting a third-party RPC node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Extractable One-Time Signature (EOTS) manager"),":\nA daemon responsible for securely maintaining the finality provider\u2019s\nprivate key and producing extractable one time signatures from it."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"Finality Provider"),": A daemon managing the finality provider.\nIt connects to the EOTS manager to generate EOTS public randomness and\nfinality votes for Babylon blocks, which it submits to Babylon through\nthe node connection.")),(0,a.kt)("p",null,"The following graphic demonstrates the interconnections between the above programs:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Finality Provider Interconnections",src:n(74531).Z,width:"1101",height:"528"})),(0,a.kt)("h2",{id:"2-installation"},"2. Installation"),(0,a.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("p",null,"This project requires Go version 1.21 or later."),(0,a.kt)("p",null,"Install Go by following the instructions on\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://golang.org/doc/install"},"official Go installation guide"),"."),(0,a.kt)("h3",{id:"downloading-the-code"},"Downloading the code"),(0,a.kt)("p",null,"To get started, clone the repository to your local machine from Github:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/babylonchain/finality-provider.git\n")),(0,a.kt)("p",null,"You can choose a specific version from\nthe ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/finality-provider/releases"},"official releases page")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd finality-provider # cd into the project directory\ngit checkout \n")),(0,a.kt)("h3",{id:"building-and-installing-the-binary"},"Building and installing the binary"),(0,a.kt)("p",null,"At the top-level directory of the project"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"make install\n")),(0,a.kt)("p",null,"The above command will build and install the following binaries to\n",(0,a.kt)("inlineCode",{parentName:"p"},"$GOPATH/bin"),":"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"eotsd"),": The daemon program for the EOTS manager."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fpd"),": The daemon program for the finality-provider."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"fpcli"),": The CLI tool for interacting with the finality-provider daemon.")),(0,a.kt)("p",null,"If your shell cannot find the installed binaries, make sure ",(0,a.kt)("inlineCode",{parentName:"p"},"$GOPATH/bin")," is in\nthe ",(0,a.kt)("inlineCode",{parentName:"p"},"$PATH")," of your shell. Usually these commands will do the job"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"export PATH=$HOME/go/bin:$PATH\necho 'export PATH=$HOME/go/bin:$PATH' >> ~/.profile\n")),(0,a.kt)("h2",{id:"3-setting-up-a-finality-provider"},"3. Setting up a finality provider"),(0,a.kt)("h3",{id:"31-setting-up-a-babylon-full-node"},"3.1. Setting up a Babylon Full Node"),(0,a.kt)("p",null,"Before setting up the finality provider toolset,\nan operator must ensure a working connection with a Babylon full node.\nIt is highly recommended that operators run their own node to avoid\ntrusting third parties. Instructions on how to set up a full Babylon node\ncan be found in\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/docs/user-guides/btc-staking-testnet/setup-node"},"the Babylon documentation"),"."),(0,a.kt)("h3",{id:"32-setting-up-the-eots-manager"},"3.2. Setting up the EOTS Manager"),(0,a.kt)("p",null,"After a node and a keyring have been set up,\nthe operator can set up and run the\nExtractable One Time Signature (EOTS) manager daemon.\nA complete overview of the EOTS manager, its operation, and\nits configuration options can be found in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager"},"EOTS Manager page")),(0,a.kt)("h3",{id:"33-setting-up-a-finality-provider"},"3.3. Setting up a Finality Provider"),(0,a.kt)("p",null,"The last step is to set up and run\nthe finality daemon.\nA complete overview of the finality daemon, its operation, and\nits configuration options can be found in the\n",(0,a.kt)("a",{parentName:"p",href:"/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider"},"Finality page"),"."),(0,a.kt)("h2",{id:"4-delegations--rewards"},"4. Delegations & Rewards"),(0,a.kt)("p",null,"A finality provider receives BTC delegations through delegators\ninteracting with Babylon and choosing it as the recipient of their delegations.\nTo perform a self-delegation,\nthe operator can either visit the staking web app we provide,\nor run the Babylon ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/btc-staker"},"BTC Staker program")," once.\nThe BTC staker connects to a Bitcoin wallet and Babylon to perform delegations."))}c.isMDXComponent=!0},74531:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/finality-toolset-9c0d5efdc590d6f89e65d9a08e6799f4.png"}}]); \ No newline at end of file diff --git a/assets/js/7661071f.0e3e1244.js b/assets/js/7661071f.fb4b9aa4.js similarity index 97% rename from assets/js/7661071f.0e3e1244.js rename to assets/js/7661071f.fb4b9aa4.js index acf090231..f73331a3d 100644 --- a/assets/js/7661071f.0e3e1244.js +++ b/assets/js/7661071f.fb4b9aa4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[9642],{3905:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>g});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),m=c(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||p[g]||a;return r?n.createElement(b,l(l({ref:t},i),{},{components:r})):n.createElement(b,l({ref:t},i))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:o,l[1]=u;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-26-welcome/index.md",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},c=[],i={toc:c};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(9737).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}p.isMDXComponent=!0},9737:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[9642],{3905:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>g});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),m=c(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||p[g]||a;return r?n.createElement(b,l(l({ref:t},i),{},{components:r})):n.createElement(b,l({ref:t},i))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:o,l[1]=u;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-26-welcome/index.md",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},c=[],i={toc:c};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(7612).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}p.isMDXComponent=!0},7612:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7e396926.5ac17178.js b/assets/js/7e396926.5ac17178.js new file mode 100644 index 000000000..da393e11d --- /dev/null +++ b/assets/js/7e396926.5ac17178.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[666],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/9ca9f017.bb69d677.js b/assets/js/9ca9f017.62f136ee.js similarity index 99% rename from assets/js/9ca9f017.bb69d677.js rename to assets/js/9ca9f017.62f136ee.js index e88a751e0..4c80870ea 100644 --- a/assets/js/9ca9f017.bb69d677.js +++ b/assets/js/9ca9f017.62f136ee.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[7176],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>p});var i=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),u=c(n),p=o,m=u["".concat(s,".").concat(p)]||u[p]||d[p]||a;return n?i.createElement(m,r(r({ref:t},h),{},{components:n})):i.createElement(m,r({ref:t},h))}));function p(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,r=new Array(a);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var i=n(87462),o=(n(67294),n(3905));const a={id:"architecture",sidebar_label:"Architecture",hide_table_of_contents:!0},r="Babylon Architecture",l={unversionedId:"introduction/architecture",id:"introduction/architecture",title:"Babylon Architecture",description:"The Babylon system is composed of a Babylon node",source:"@site/docs/introduction/architecture.md",sourceDirName:"introduction",slug:"/introduction/architecture",permalink:"/docs/introduction/architecture",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/introduction/architecture.md",tags:[],version:"current",frontMatter:{id:"architecture",sidebar_label:"Architecture",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Bitcoin Staking",permalink:"/docs/introduction/btc-staking"},next:{title:"User Guides",permalink:"/docs/user-guides/overview"}},s={},c=[{value:"Babylon Node Modules",id:"babylon-node-modules",level:2},{value:"Epoching",id:"epoching",level:3},{value:"BTC Light Client",id:"btc-light-client",level:3},{value:"BTC Checkpoint",id:"btc-checkpoint",level:3},{value:"Checkpointing",id:"checkpointing",level:3},{value:"ZoneConcierge",id:"zoneconcierge",level:3},{value:"BTC Staking",id:"btc-staking",level:3},{value:"Finality",id:"finality",level:3},{value:"Incentive",id:"incentive",level:3},{value:"Vigilantes",id:"vigilantes",level:2},{value:"Vigilante Submitter",id:"vigilante-submitter",level:3},{value:"Vigilante Reporter",id:"vigilante-reporter",level:3},{value:"Monitors",id:"monitors",level:2},{value:"Checkpointing Monitor",id:"checkpointing-monitor",level:3},{value:"BTC Staking Monitor",id:"btc-staking-monitor",level:3},{value:"BTC Staking Programs",id:"btc-staking-programs",level:2},{value:"BTC Staker",id:"btc-staker",level:3},{value:"Finality Provider",id:"finality-provider",level:3},{value:"Covenant Emulator",id:"covenant-emulator",level:3},{value:"Consumer Zones",id:"consumer-zones",level:2},{value:"IBC Relayer",id:"ibc-relayer",level:3},{value:"Babylon Contract",id:"babylon-contract",level:3}],h={toc:c};function d(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,i.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"babylon-architecture"},"Babylon Architecture"),(0,o.kt)("p",null,"The Babylon system is composed of a Babylon node\nbuilt using the Cosmos SDK as well as peripheral programs\nthat facilitate BTC staking, finality round participation, and\ncommunication with Bitcoin and other Consumer Zones.\n",(0,o.kt)("img",{alt:"Babylon Architecture",src:n(41642).Z,width:"3494",height:"2897"})),(0,o.kt)("h2",{id:"babylon-node-modules"},"Babylon Node Modules"),(0,o.kt)("h3",{id:"epoching"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/epoching"},"Epoching")),(0,o.kt)("p",null,"The Babylon blockchain is divided into epochs\nthat consist of a parameterized number of blocks.\nWithin each epoch, the validator set does not change.\nThis way, Babylon needs a checkpoint per epoch rather than per block,\nwhich reduces the checkpointing costs.\nThe epoching module achieves this by delaying the execution\nof transactions that affect the validator set to the last block\nof each epoch."),(0,o.kt)("h3",{id:"btc-light-client"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/btclightclient"},"BTC Light Client")),(0,o.kt)("p",null,"The BTC Light Client module receives Bitcoin headers\nreported by the Vigilante Reporter and\nmaintains a BTC header chain based on the PoW rules of Bitcoin.\nIt exposes information about the canonical Bitcoin chain,\nthe depth of headers, and\nwhether the inclusion evidence for a Bitcoin transaction is valid."),(0,o.kt)("h3",{id:"btc-checkpoint"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/btccheckpoint"},"BTC Checkpoint")),(0,o.kt)("p",null,"The BTC Checkpoint module verifies Babylon\u2019s BTC checkpoints\nreported by the Vigilante Reporter, and\nprovides the confirmation status of these checkpoints to the Checkpointing\nmodule based on their depth according to the BTC Light Client module."),(0,o.kt)("h3",{id:"checkpointing"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/checkpointing"},"Checkpointing")),(0,o.kt)("p",null,"The checkpointing module is responsible for creating Babylon checkpoints\nto be submitted to Bitcoin and maintaining their confirmation status.\nIt collects the validator's\n",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/BLS_digital_signature"},"BLS signatures"),"\nfor each block to be checkpointed and aggregates them\ninto a BLS multisignature to include in the Bitcoin checkpoint.\nThe confirmation status of each checkpoint is determined by\nBitcoin checkpoint inclusion information retrieved from the\nBTC checkpoint module."),(0,o.kt)("h3",{id:"zoneconcierge"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/zoneconcierge"},"ZoneConcierge")),(0,o.kt)("p",null,"The Zone Concierge module\nextracts verified Consumer Zone headers from\nconnected ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cosmos/ibc-go"},"IBC light clients")," and\nmaintains their Bitcoin confirmation status based on the\nBitcoin confirmation status of the\nBabylon transactions that carry them.\nIt communicates the Bitcoin confirmation status to the Consumer Zone\nusing verifiable proofs through an\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cosmos/ibc-go"},"IBC")," connection."),(0,o.kt)("h3",{id:"btc-staking"},"BTC Staking"),(0,o.kt)("p",null,"The BTC Staking module\nis the bookkeeper for the BTC staking protocol.\nIt is responsible for verifying and activating\nBTC staking requests and\nmaintaining the active finality provider set.\nIt communicates with the BTC Light Client module\nto extract the confirmation status of staking requests and\nreceives notifications about on-demand unlocked stake from the\nBTC Staking Monitor."),(0,o.kt)("h3",{id:"finality"},"Finality"),(0,o.kt)("p",null,"The Finality module is responsible for finalizing blocks\nproduced by the CometBFT consensus.\nIt receives and verifies finality round votes\nfrom finality providers and\na block is considered finalized if sufficient\nvoting power is cast on it.\nThe voting power of each finality provider is based on\nits Bitcoin stake retrieved from the BTC Staking module.\nFinality votes are performed using\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/assets/files/btc_staking_litepaper-32bfea0c243773f0bfac63e148387aef.pdf"},"Extractable-One-Time-Signatures (EOTS)"),"\nand verified using\nthe finality providers' committed public randomness."),(0,o.kt)("h3",{id:"incentive"},"Incentive"),(0,o.kt)("p",null,"The incentive module consumes a percentage\nof the rewards intended for Babylon stakers and\ndistributes it as rewards to Bitcoin stakers and\nvigilantes."),(0,o.kt)("h2",{id:"vigilantes"},"Vigilantes"),(0,o.kt)("p",null,"The vigilante suite of programs acts as a\nrelayer of data between Babylon and Bitcoin.\nThe secure operation of Babylon requires\nthat at least one honest\noperator of each of the programs exist.\nOtherwise,\nan alarm will be raised by the monitor program."),(0,o.kt)("h3",{id:"vigilante-submitter"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/submitter"},"Vigilante Submitter")),(0,o.kt)("p",null,"A standalone program that submits\nBabylon checkpoints to Bitcoin as\nBitcoin transactions embedding data\nutilising the ",(0,o.kt)("inlineCode",{parentName:"p"},"OP_RETURN")," Bitcoin script code."),(0,o.kt)("h3",{id:"vigilante-reporter"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/reporter"},"Vigilante Reporter")),(0,o.kt)("p",null,"A standalone program that scans\nthe Bitcoin ledger for Bitcoin headers and Babylon checkpoints,\nand reports them back to Babylon using Babylon transactions."),(0,o.kt)("h2",{id:"monitors"},"Monitors"),(0,o.kt)("p",null,"The monitor programs suite is responsible for\nmonitoring the consistency between the state of Babylon and\nBitcoin."),(0,o.kt)("h3",{id:"checkpointing-monitor"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/monitor"},"Checkpointing Monitor")),(0,o.kt)("p",null,"A standalone program that monitors:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The consistency between the Bitcoin canonical chain and\nthe Bitcoin header chain maintained by\nthe BTC Light client module."),(0,o.kt)("li",{parentName:"ul"},"The timely inclusion of the Bitcoin checkpoints\ninformation in the Babylon ledger.")),(0,o.kt)("h3",{id:"btc-staking-monitor"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/vigilante"},"BTC Staking Monitor")),(0,o.kt)("p",null,"A standalone program that monitors:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The execution of BTC Staking on-demand unbonding transactions\non the Bitcoin ledger to inform Babylon about them."),(0,o.kt)("li",{parentName:"ul"},"The execution of BTC Staking slashing transactions in the case\nof a finality provider double voting.\nIn the case of non-execution the monitor extracts the finality provider's\nprivate key and executes the slashing."),(0,o.kt)("li",{parentName:"ul"},"The execution of a selective slashing attack launched\nby a finality provider. In this case,\nthe monitor extracts the finality provider's private key\nand slashes them.")),(0,o.kt)("h2",{id:"btc-staking-programs"},"BTC Staking Programs"),(0,o.kt)("p",null,"The BTC Staking programs suite\ninvolves components that enable the function\nBitcoin Stakers and Finality Providers\nwhile also ensuring their adherence to the protocol."),(0,o.kt)("h3",{id:"btc-staker"},"BTC Staker"),(0,o.kt)("p",null,"Bitcoin holders can stake their Bitcoin\nby creating a set of Bitcoin transactions,\nincluding them to the Bitcoin ledger, and\nthen informing Babylon about their staking.\nLater, they can also on-demand unlock or\nwithdraw their funds when their stake expires.\nThe following set of standalone programs\nhas been developed to enable these functionalities:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/btc-staker"},"BTC Staker Daemon"),":\nDaemon program connecting to a Bitcoin wallet and Babylon."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/btc-staking-dashboard"},"BTC Staker Dashboard"),":\nWeb application connecting to a Bitcoin wallet extension and the Babylon API.\nShould only be used for testing purposes."),(0,o.kt)("li",{parentName:"ul"},"Wallet Integrations (TBD)")),(0,o.kt)("h3",{id:"finality-provider"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/finality-provider"},"Finality Provider")),(0,o.kt)("p",null,"A standalone program that allows for the registration and\nmaintenance of a finality provider.\nIt monitors for a finality provider's inclusion in the active set, commits\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/assets/files/btc_staking_litepaper-32bfea0c243773f0bfac63e148387aef.pdf"},"Extractable One Time Signature (EOTS)"),"\npublic randomness, and\nsubmits finality votes for blocks.\nFinality votes are created through a connection to a standalone\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/finality-provider"},"EOTS manager daemon"),"\nresponsible for securely maintaining the\nfinality provider's private keys."),(0,o.kt)("h3",{id:"covenant-emulator"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/covenant-emulator"},"Covenant Emulator")),(0,o.kt)("p",null,"A standalone program utilised by the covenant emulation committee members.\nIt emulates ",(0,o.kt)("a",{parentName:"p",href:"https://covenants.info"},"covenant")," functionality by monitoring\nfor pending staking requests,\nverifying their contents, and\nsubmitting necessary signatures."),(0,o.kt)("h2",{id:"consumer-zones"},"Consumer Zones"),(0,o.kt)("h3",{id:"ibc-relayer"},"IBC Relayer"),(0,o.kt)("p",null,"The IBC Relayer maintains the\n",(0,o.kt)("a",{parentName:"p",href:"https://cosmos.network/ibc/"},"IBC protocol")," connection\nbetween Babylon and other Consumer Zones (CZs).\nIt is responsible for updating the CZ's light client\ninside the Babylon ledger to enable checkpointing and\npropagating checkpoint information to the Babylon smart contract\ndeployed within the CZ."),(0,o.kt)("p",null,"There are different IBC relayer implementations that can achieve\nthis function. Most notably:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/cosmos/relayer"},"Cosmos Relayer"),":\nA fully functional relayer written in Go."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/babylon-relayer/"},"Babylon Relayer"),":\nA wrapper of the Cosmos Relayer that can maintain a one-way IBC connection.\nIt is recommended to be used when the Consumer Zone does not deploy the\nBabylon smart contract."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/informalsystems/hermes"},"Hermes Relayer"),":\nA fully functional relayer written in Rust.")),(0,o.kt)("h3",{id:"babylon-contract"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/babylon-contract"},"Babylon Contract")),(0,o.kt)("p",null,"A ",(0,o.kt)("a",{parentName:"p",href:"https://cosmwasm.com/"},"CosmWasm")," smart contract intended for\ndeployment in a Consumer Zone.\nIt enables Bitcoin Checkpointing functionality without introducing\ninvasive changes in the codebase of the Consumer Zone.\nBased on the Bitcoin Checkpointing functionality,\nthe Consumer Zone can make decisions based on the inclusion\nof its checkpoints in the Bitcoin ledger\n(e.g. execute BTC-assisted unbonding requests)."))}d.isMDXComponent=!0},41642:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/arch-22e59a792ec45217a5f121dfe7d3f701.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[7176],{3905:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>p});var i=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},h=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),u=c(n),p=o,m=u["".concat(s,".").concat(p)]||u[p]||d[p]||a;return n?i.createElement(m,r(r({ref:t},h),{},{components:n})):i.createElement(m,r({ref:t},h))}));function p(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,r=new Array(a);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var i=n(87462),o=(n(67294),n(3905));const a={id:"architecture",sidebar_label:"Architecture",hide_table_of_contents:!0},r="Babylon Architecture",l={unversionedId:"introduction/architecture",id:"introduction/architecture",title:"Babylon Architecture",description:"The Babylon system is composed of a Babylon node",source:"@site/docs/introduction/architecture.md",sourceDirName:"introduction",slug:"/introduction/architecture",permalink:"/docs/introduction/architecture",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/introduction/architecture.md",tags:[],version:"current",frontMatter:{id:"architecture",sidebar_label:"Architecture",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Bitcoin Staking",permalink:"/docs/introduction/btc-staking"},next:{title:"User Guides",permalink:"/docs/user-guides/overview"}},s={},c=[{value:"Babylon Node Modules",id:"babylon-node-modules",level:2},{value:"Epoching",id:"epoching",level:3},{value:"BTC Light Client",id:"btc-light-client",level:3},{value:"BTC Checkpoint",id:"btc-checkpoint",level:3},{value:"Checkpointing",id:"checkpointing",level:3},{value:"ZoneConcierge",id:"zoneconcierge",level:3},{value:"BTC Staking",id:"btc-staking",level:3},{value:"Finality",id:"finality",level:3},{value:"Incentive",id:"incentive",level:3},{value:"Vigilantes",id:"vigilantes",level:2},{value:"Vigilante Submitter",id:"vigilante-submitter",level:3},{value:"Vigilante Reporter",id:"vigilante-reporter",level:3},{value:"Monitors",id:"monitors",level:2},{value:"Checkpointing Monitor",id:"checkpointing-monitor",level:3},{value:"BTC Staking Monitor",id:"btc-staking-monitor",level:3},{value:"BTC Staking Programs",id:"btc-staking-programs",level:2},{value:"BTC Staker",id:"btc-staker",level:3},{value:"Finality Provider",id:"finality-provider",level:3},{value:"Covenant Emulator",id:"covenant-emulator",level:3},{value:"Consumer Zones",id:"consumer-zones",level:2},{value:"IBC Relayer",id:"ibc-relayer",level:3},{value:"Babylon Contract",id:"babylon-contract",level:3}],h={toc:c};function d(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,i.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"babylon-architecture"},"Babylon Architecture"),(0,o.kt)("p",null,"The Babylon system is composed of a Babylon node\nbuilt using the Cosmos SDK as well as peripheral programs\nthat facilitate BTC staking, finality round participation, and\ncommunication with Bitcoin and other Consumer Zones.\n",(0,o.kt)("img",{alt:"Babylon Architecture",src:n(43358).Z,width:"3494",height:"2897"})),(0,o.kt)("h2",{id:"babylon-node-modules"},"Babylon Node Modules"),(0,o.kt)("h3",{id:"epoching"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/epoching"},"Epoching")),(0,o.kt)("p",null,"The Babylon blockchain is divided into epochs\nthat consist of a parameterized number of blocks.\nWithin each epoch, the validator set does not change.\nThis way, Babylon needs a checkpoint per epoch rather than per block,\nwhich reduces the checkpointing costs.\nThe epoching module achieves this by delaying the execution\nof transactions that affect the validator set to the last block\nof each epoch."),(0,o.kt)("h3",{id:"btc-light-client"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/btclightclient"},"BTC Light Client")),(0,o.kt)("p",null,"The BTC Light Client module receives Bitcoin headers\nreported by the Vigilante Reporter and\nmaintains a BTC header chain based on the PoW rules of Bitcoin.\nIt exposes information about the canonical Bitcoin chain,\nthe depth of headers, and\nwhether the inclusion evidence for a Bitcoin transaction is valid."),(0,o.kt)("h3",{id:"btc-checkpoint"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/btccheckpoint"},"BTC Checkpoint")),(0,o.kt)("p",null,"The BTC Checkpoint module verifies Babylon\u2019s BTC checkpoints\nreported by the Vigilante Reporter, and\nprovides the confirmation status of these checkpoints to the Checkpointing\nmodule based on their depth according to the BTC Light Client module."),(0,o.kt)("h3",{id:"checkpointing"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/checkpointing"},"Checkpointing")),(0,o.kt)("p",null,"The checkpointing module is responsible for creating Babylon checkpoints\nto be submitted to Bitcoin and maintaining their confirmation status.\nIt collects the validator's\n",(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/BLS_digital_signature"},"BLS signatures"),"\nfor each block to be checkpointed and aggregates them\ninto a BLS multisignature to include in the Bitcoin checkpoint.\nThe confirmation status of each checkpoint is determined by\nBitcoin checkpoint inclusion information retrieved from the\nBTC checkpoint module."),(0,o.kt)("h3",{id:"zoneconcierge"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/zoneconcierge"},"ZoneConcierge")),(0,o.kt)("p",null,"The Zone Concierge module\nextracts verified Consumer Zone headers from\nconnected ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cosmos/ibc-go"},"IBC light clients")," and\nmaintains their Bitcoin confirmation status based on the\nBitcoin confirmation status of the\nBabylon transactions that carry them.\nIt communicates the Bitcoin confirmation status to the Consumer Zone\nusing verifiable proofs through an\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cosmos/ibc-go"},"IBC")," connection."),(0,o.kt)("h3",{id:"btc-staking"},"BTC Staking"),(0,o.kt)("p",null,"The BTC Staking module\nis the bookkeeper for the BTC staking protocol.\nIt is responsible for verifying and activating\nBTC staking requests and\nmaintaining the active finality provider set.\nIt communicates with the BTC Light Client module\nto extract the confirmation status of staking requests and\nreceives notifications about on-demand unlocked stake from the\nBTC Staking Monitor."),(0,o.kt)("h3",{id:"finality"},"Finality"),(0,o.kt)("p",null,"The Finality module is responsible for finalizing blocks\nproduced by the CometBFT consensus.\nIt receives and verifies finality round votes\nfrom finality providers and\na block is considered finalized if sufficient\nvoting power is cast on it.\nThe voting power of each finality provider is based on\nits Bitcoin stake retrieved from the BTC Staking module.\nFinality votes are performed using\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/assets/files/btc_staking_litepaper-32bfea0c243773f0bfac63e148387aef.pdf"},"Extractable-One-Time-Signatures (EOTS)"),"\nand verified using\nthe finality providers' committed public randomness."),(0,o.kt)("h3",{id:"incentive"},"Incentive"),(0,o.kt)("p",null,"The incentive module consumes a percentage\nof the rewards intended for Babylon stakers and\ndistributes it as rewards to Bitcoin stakers and\nvigilantes."),(0,o.kt)("h2",{id:"vigilantes"},"Vigilantes"),(0,o.kt)("p",null,"The vigilante suite of programs acts as a\nrelayer of data between Babylon and Bitcoin.\nThe secure operation of Babylon requires\nthat at least one honest\noperator of each of the programs exist.\nOtherwise,\nan alarm will be raised by the monitor program."),(0,o.kt)("h3",{id:"vigilante-submitter"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/submitter"},"Vigilante Submitter")),(0,o.kt)("p",null,"A standalone program that submits\nBabylon checkpoints to Bitcoin as\nBitcoin transactions embedding data\nutilising the ",(0,o.kt)("inlineCode",{parentName:"p"},"OP_RETURN")," Bitcoin script code."),(0,o.kt)("h3",{id:"vigilante-reporter"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/reporter"},"Vigilante Reporter")),(0,o.kt)("p",null,"A standalone program that scans\nthe Bitcoin ledger for Bitcoin headers and Babylon checkpoints,\nand reports them back to Babylon using Babylon transactions."),(0,o.kt)("h2",{id:"monitors"},"Monitors"),(0,o.kt)("p",null,"The monitor programs suite is responsible for\nmonitoring the consistency between the state of Babylon and\nBitcoin."),(0,o.kt)("h3",{id:"checkpointing-monitor"},(0,o.kt)("a",{parentName:"h3",href:"../developer-guides/modules/monitor"},"Checkpointing Monitor")),(0,o.kt)("p",null,"A standalone program that monitors:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The consistency between the Bitcoin canonical chain and\nthe Bitcoin header chain maintained by\nthe BTC Light client module."),(0,o.kt)("li",{parentName:"ul"},"The timely inclusion of the Bitcoin checkpoints\ninformation in the Babylon ledger.")),(0,o.kt)("h3",{id:"btc-staking-monitor"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/vigilante"},"BTC Staking Monitor")),(0,o.kt)("p",null,"A standalone program that monitors:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The execution of BTC Staking on-demand unbonding transactions\non the Bitcoin ledger to inform Babylon about them."),(0,o.kt)("li",{parentName:"ul"},"The execution of BTC Staking slashing transactions in the case\nof a finality provider double voting.\nIn the case of non-execution the monitor extracts the finality provider's\nprivate key and executes the slashing."),(0,o.kt)("li",{parentName:"ul"},"The execution of a selective slashing attack launched\nby a finality provider. In this case,\nthe monitor extracts the finality provider's private key\nand slashes them.")),(0,o.kt)("h2",{id:"btc-staking-programs"},"BTC Staking Programs"),(0,o.kt)("p",null,"The BTC Staking programs suite\ninvolves components that enable the function\nBitcoin Stakers and Finality Providers\nwhile also ensuring their adherence to the protocol."),(0,o.kt)("h3",{id:"btc-staker"},"BTC Staker"),(0,o.kt)("p",null,"Bitcoin holders can stake their Bitcoin\nby creating a set of Bitcoin transactions,\nincluding them to the Bitcoin ledger, and\nthen informing Babylon about their staking.\nLater, they can also on-demand unlock or\nwithdraw their funds when their stake expires.\nThe following set of standalone programs\nhas been developed to enable these functionalities:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/btc-staker"},"BTC Staker Daemon"),":\nDaemon program connecting to a Bitcoin wallet and Babylon."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/btc-staking-dashboard"},"BTC Staker Dashboard"),":\nWeb application connecting to a Bitcoin wallet extension and the Babylon API.\nShould only be used for testing purposes."),(0,o.kt)("li",{parentName:"ul"},"Wallet Integrations (TBD)")),(0,o.kt)("h3",{id:"finality-provider"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/finality-provider"},"Finality Provider")),(0,o.kt)("p",null,"A standalone program that allows for the registration and\nmaintenance of a finality provider.\nIt monitors for a finality provider's inclusion in the active set, commits\n",(0,o.kt)("a",{parentName:"p",href:"https://docs.babylonchain.io/assets/files/btc_staking_litepaper-32bfea0c243773f0bfac63e148387aef.pdf"},"Extractable One Time Signature (EOTS)"),"\npublic randomness, and\nsubmits finality votes for blocks.\nFinality votes are created through a connection to a standalone\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/babylonchain/finality-provider"},"EOTS manager daemon"),"\nresponsible for securely maintaining the\nfinality provider's private keys."),(0,o.kt)("h3",{id:"covenant-emulator"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/covenant-emulator"},"Covenant Emulator")),(0,o.kt)("p",null,"A standalone program utilised by the covenant emulation committee members.\nIt emulates ",(0,o.kt)("a",{parentName:"p",href:"https://covenants.info"},"covenant")," functionality by monitoring\nfor pending staking requests,\nverifying their contents, and\nsubmitting necessary signatures."),(0,o.kt)("h2",{id:"consumer-zones"},"Consumer Zones"),(0,o.kt)("h3",{id:"ibc-relayer"},"IBC Relayer"),(0,o.kt)("p",null,"The IBC Relayer maintains the\n",(0,o.kt)("a",{parentName:"p",href:"https://cosmos.network/ibc/"},"IBC protocol")," connection\nbetween Babylon and other Consumer Zones (CZs).\nIt is responsible for updating the CZ's light client\ninside the Babylon ledger to enable checkpointing and\npropagating checkpoint information to the Babylon smart contract\ndeployed within the CZ."),(0,o.kt)("p",null,"There are different IBC relayer implementations that can achieve\nthis function. Most notably:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/cosmos/relayer"},"Cosmos Relayer"),":\nA fully functional relayer written in Go."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/babylonchain/babylon-relayer/"},"Babylon Relayer"),":\nA wrapper of the Cosmos Relayer that can maintain a one-way IBC connection.\nIt is recommended to be used when the Consumer Zone does not deploy the\nBabylon smart contract."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/informalsystems/hermes"},"Hermes Relayer"),":\nA fully functional relayer written in Rust.")),(0,o.kt)("h3",{id:"babylon-contract"},(0,o.kt)("a",{parentName:"h3",href:"https://github.com/babylonchain/babylon-contract"},"Babylon Contract")),(0,o.kt)("p",null,"A ",(0,o.kt)("a",{parentName:"p",href:"https://cosmwasm.com/"},"CosmWasm")," smart contract intended for\ndeployment in a Consumer Zone.\nIt enables Bitcoin Checkpointing functionality without introducing\ninvasive changes in the codebase of the Consumer Zone.\nBased on the Bitcoin Checkpointing functionality,\nthe Consumer Zone can make decisions based on the inclusion\nof its checkpoints in the Bitcoin ledger\n(e.g. execute BTC-assisted unbonding requests)."))}d.isMDXComponent=!0},43358:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/arch-22e59a792ec45217a5f121dfe7d3f701.png"}}]); \ No newline at end of file diff --git a/assets/js/9f42ab4f.09996b77.js b/assets/js/9f42ab4f.dcdbf2e3.js similarity index 97% rename from assets/js/9f42ab4f.09996b77.js rename to assets/js/9f42ab4f.dcdbf2e3.js index b1dc9675e..ce57af222 100644 --- a/assets/js/9f42ab4f.09996b77.js +++ b/assets/js/9f42ab4f.dcdbf2e3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[5920],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>u});var a=n(67294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function s(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var c=a.createContext({}),l=function(t){var e=a.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},p=function(t){var e=l(t.components);return a.createElement(c.Provider,{value:e},t.children)},h={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,i=t.mdxType,o=t.originalType,c=t.parentName,p=r(t,["components","mdxType","originalType","parentName"]),m=l(n),u=i,d=m["".concat(c,".").concat(u)]||m[u]||h[u]||o;return n?a.createElement(d,s(s({ref:e},p),{},{components:n})):a.createElement(d,s({ref:e},p))}));function u(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var o=n.length,s=new Array(o);s[0]=m;var r={};for(var c in e)hasOwnProperty.call(e,c)&&(r[c]=e[c]);r.originalType=t,r.mdxType="string"==typeof t?t:i,s[1]=r;for(var l=2;l{n.d(e,{Z:()=>s});var a,i=n(67294);function o(){return o=Object.assign?Object.assign.bind():function(t){for(var e=1;e{let{title:e,titleId:n,...s}=t;return i.createElement("svg",o({stroke:"currentColor",fill:"currentColor",strokeWidth:0,viewBox:"0 0 1024 1024",height:"1em",width:"1em",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},s),e?i.createElement("title",{id:n},e):null,a||(a=i.createElement("path",{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0 0 12.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0 0 12.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 0 0 174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z",stroke:"none"})))}},97252:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(87462),i=(n(67294),n(3905)),o=n(24800);const s={id:"btc-timestamping",sidebar_label:"Bitcoin Timestamping",hide_table_of_contents:!0},r="Bitcoin Timestamping",c={unversionedId:"introduction/btc-timestamping",id:"introduction/btc-timestamping",title:"Bitcoin Timestamping",description:"The Babylon BTC timestamping protocol allows any arbitrary",source:"@site/docs/introduction/btc-timestamping.md",sourceDirName:"introduction",slug:"/introduction/btc-timestamping",permalink:"/docs/introduction/btc-timestamping",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/introduction/btc-timestamping.md",tags:[],version:"current",frontMatter:{id:"btc-timestamping",sidebar_label:"Bitcoin Timestamping",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Babylon Overview",permalink:"/docs/introduction/babylon-overview"},next:{title:"Bitcoin Staking",permalink:"/docs/introduction/btc-staking"}},l={},p=[{value:'Long-Range Attack: A Fundamental Threat to PoS Chains ',id:"long-range-attack-a-fundamental-threat-to-pos-chains-",level:2},{value:'Secure PoS using BTC timestamping ',id:"secure-pos-using-btc-timestamping-",level:2},{value:'Benefits of BTC Timestamping to PoS Chains ',id:"benefits-of-btc-timestamping-to-pos-chains-",level:2}],h={toc:p};function m(t){let{components:e,...s}=t;return(0,i.kt)("wrapper",(0,a.Z)({},h,s,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"bitcoin-timestamping"},"Bitcoin Timestamping"),(0,i.kt)("p",null,"The Babylon BTC timestamping protocol allows any arbitrary\ndata submitted to Babylon to obtain Bitcoin timestamps.\nThe security level of these timestamps in terms of immutability\nincreases over time because more works are added on top of them over time.\nA primary use case of this protocol is to timestamp PoS blockchains\nto enhance their integrity and security,\nsuch as resisting against long range attacks.\nThe protocol includes Bitcoin as the timestamping service,\nthe Babylon blockchain as the checkpoint aggregation and\ndata availability service, and\nother PoS blockchains as the consumers of security."),(0,i.kt)("p",null,"Such security enables several use cases:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Fast Unbonding:")," PoS blockchains require social consensus to\ncircumvent long range attacks and this leads to\nlong unbonding periods.\nBitcoin security replaces social consensus and\nreduces unbonding periods to a few hours."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Bootstrapping new zones:")," Bitcoin security can be used to\nbootstrap new zones which have low token valuation."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Protecting important transactions:")," Bitcoin security can be\nused to protect important transactions while\nnormal transactions get fast finality."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Censorship resistance:")," Transactions that are censored\ncan use Babylon as a backup to enter the ledger."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Bitcoin staking:")," Bitcoin timestamping protocol serves\nas a building block for our\n",(0,i.kt)("a",{parentName:"li",href:"/docs/introduction/btc-staking"},"Bitcoin staking protocol"),",\nbecause it provides synchronization between PoS blockchains and Bitcoin.")),(0,i.kt)("p",null,"In addition, via CosmWasm, one can develop timestamping services with any\ndata verification rules."),(0,i.kt)("div",{class:"pdf-file-banner"},(0,i.kt)("a",{class:"link",target:"_blank",href:"https://arxiv.org/pdf/2207.08392.pdf"},(0,i.kt)("div",{class:"icon-holder"},(0,i.kt)(o.Z,{class:"icon",alt:"paper clip",mdxType:"Paperclip"})),(0,i.kt)("div",{class:"info"},(0,i.kt)("p",{class:"title"},"BTC timestamping whitepaper"),(0,i.kt)("p",{class:"subtitle"},"PDF")),(0,i.kt)("p",{class:"size"},"1.1MB"))),(0,i.kt)("p",null,"In the following, we explore the BTC Timestamping Protocol's use case in\ndetail."),(0,i.kt)("h2",{id:"long-range-attack-a-fundamental-threat-to-pos-chains-"},"Long-Range Attack: A Fundamental Threat to PoS Chains ",(0,i.kt)("a",{id:"long"})),(0,i.kt)("p",null,"By PoS chains, we refer to BFT (Byzantine-fault-tolerent) PoS chains that\nrequire a 2/3 majority vote from their validators to confirm a block.\nPoS chains are not supposed to fork, and when forking happens,\nthe chain is attacked:\nTo have 2/3 majority vote for both forks,\nat least 1/3 of the validators have double-voted by signing both forks,\nwhich is a prohibited behavior by the consensus protocol."),(0,i.kt)("p",null,"The picture below illustrates a forking attack to a hypothetical\nPoS chain called ",(0,i.kt)("strong",{parentName:"p"},"\u201cRugpull\u201c"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Forking Attack",src:n(40554).Z,width:"2120",height:"759"})),(0,i.kt)("p",null,"To deter such attacks, most PoS chains only allow accounts who have\nbonded their tokens (a.k.a staking) to be validators.\nThis way, if a validator is caught double signing,\nits bonded stake can be slashed by the consensus protocol in both forks,\ncausing total economical loss to this malicious validator."),(0,i.kt)("p",null,"This deterrence seems to provide slashable security to PoS chains.\nHowever, this requires the remaining validators to perceive both forks\nwhile the malicious validators are still bonded.\nTherefore, to avoid slashing, the malicious validators can first unbond\nfrom the first fork and then create the second fork from a block height\nwhere they are still validators.\nThis way, the malicious validators will not be slashable in\nthe first fork since they do not have a bonded stake.\nWhat\u2019s even worse is that once the attack happens,\nnew users of the PoS chain cannot tell which fork they should follow."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Long-range Attack",src:n(48586).Z,width:"1729",height:"531"})),(0,i.kt)("p",null,"This attack is called the long-range attack,\nwhich renders PoS chains not slashable and secure.\nThis attack is fundamental and cannot be solved by modifying the\nconsensus protocol without an extra source of trust.\nTo alleviate this threat, some PoS chains resort to social consensus,\nwhere the stakeholders periodically make off-chain decisions on the\ncorrect block at the latest height and ignore any other potential forks.\nHowever, this approach ties the chain's security to the\nparticipating stakeholders' subjective opinions.\nThis approach is also called weak subjectivity,\nwhich is against the decentralization principle.\nIn addition, since social consensus takes time,\nmost PoS chains impose a very long stake unbonding time in\nthe order of weeks."),(0,i.kt)("h2",{id:"secure-pos-using-btc-timestamping-"},"Secure PoS using BTC timestamping ",(0,i.kt)("a",{id:"time"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Secure PoS",src:n(86549).Z,width:"5351",height:"1914"})),(0,i.kt)("p",null,"To protect the PoS chain from long-range attacks,\nwe can checkpoint the PoS chain's blocks to BTC and\nimplement a fork choice rule for the fork with\nan earlier BTC timestamp. This way, either"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The attacking fork will have a later BTC timestamp in the\nBTC canonical chain and will never be chosen by anyone, or")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"In order to be chosen, the attacker will have to create a very long fork\nof BTC in which the attacking PoS fork has an earlier timestamp,\nwhich is economically impossible."))),(0,i.kt)("p",null,"Thus, long-range attacks are neutralized by BTC timestamping."),(0,i.kt)("h2",{id:"benefits-of-btc-timestamping-to-pos-chains-"},"Benefits of BTC Timestamping to PoS Chains ",(0,i.kt)("a",{id:"benefit"})),(0,i.kt)("p",null,"Along with solving long-range attacks,\nthe irreversible BTC timestamps of PoS blocks also\nprovide other security benefits to PoS chains:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"No weak subjectivity"),": Bitcoin timestamps are objective.\nIt can thus eliminate the dependency of PoS chains on social consensus and\nweak subjectivity.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Shorter Unbonding Time"),": By replacing social consensus,\nBTC timestamping can reduce the stake unbonding time of\nPoS chains from weeks to one day.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"New Chain Bootstrapping"),": New PoS chains with low valuation\nare more vulnerable to forking attacks.\nBTC timestamping can help safeguard the chain alone its growth.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Verification of State Sync and Snapshots"),": The objective truth about\na PoS chain provided by BTC allows the users of the PoS chain to verify\nthe chain state or snapshot it has downloaded from the P2P network.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Protecting Important Transactions"),": BTC timestamps can be used to\nfurther confirm important PoS transactions at the cost of\nlonger confirmation latency.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Censorship Resistance"),": BTC timestamping could also be used to fight\nagainst transaction censorship in PoS chains via\nposting censored transactions to BTC."))),(0,i.kt)("p",null,"However, directly checkpointing to BTC is difficult and unscalable due to\nBTC\u2019s tight space and expensive transaction fees.\nMoreover, BTC cannot verify the checkpointed data.\nThis motivates the creation of Babylon,\nwhich solves all the difficulties with provable security."),(0,i.kt)("admonition",{title:"Note",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Without ",(0,i.kt)("strong",{parentName:"p"},"Babylon"),", it is difficult for any chain to directly checkpoint\nto ",(0,i.kt)("strong",{parentName:"p"},"Bitcoin")," due to scalability, cost, code modification, and\nsecurity problems.")))}m.isMDXComponent=!0},86549:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/HowUseCase-9eca05d99ca42eb4e0b5ee74c354176c.png"},40554:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/forking-fab24bb6a9d33c7612ea8bd4d77168b4.gif"},48586:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/longrange-1f85015a2f2c1ecd96d022ceaf8b0232.gif"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[5920],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>u});var a=n(67294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function s(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var c=a.createContext({}),l=function(t){var e=a.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},p=function(t){var e=l(t.components);return a.createElement(c.Provider,{value:e},t.children)},h={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,i=t.mdxType,o=t.originalType,c=t.parentName,p=r(t,["components","mdxType","originalType","parentName"]),m=l(n),u=i,d=m["".concat(c,".").concat(u)]||m[u]||h[u]||o;return n?a.createElement(d,s(s({ref:e},p),{},{components:n})):a.createElement(d,s({ref:e},p))}));function u(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var o=n.length,s=new Array(o);s[0]=m;var r={};for(var c in e)hasOwnProperty.call(e,c)&&(r[c]=e[c]);r.originalType=t,r.mdxType="string"==typeof t?t:i,s[1]=r;for(var l=2;l{n.d(e,{Z:()=>s});var a,i=n(67294);function o(){return o=Object.assign?Object.assign.bind():function(t){for(var e=1;e{let{title:e,titleId:n,...s}=t;return i.createElement("svg",o({stroke:"currentColor",fill:"currentColor",strokeWidth:0,viewBox:"0 0 1024 1024",height:"1em",width:"1em",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":n},s),e?i.createElement("title",{id:n},e):null,a||(a=i.createElement("path",{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0 0 12.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0 0 12.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 0 0 174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z",stroke:"none"})))}},97252:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(87462),i=(n(67294),n(3905)),o=n(24800);const s={id:"btc-timestamping",sidebar_label:"Bitcoin Timestamping",hide_table_of_contents:!0},r="Bitcoin Timestamping",c={unversionedId:"introduction/btc-timestamping",id:"introduction/btc-timestamping",title:"Bitcoin Timestamping",description:"The Babylon BTC timestamping protocol allows any arbitrary",source:"@site/docs/introduction/btc-timestamping.md",sourceDirName:"introduction",slug:"/introduction/btc-timestamping",permalink:"/docs/introduction/btc-timestamping",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/introduction/btc-timestamping.md",tags:[],version:"current",frontMatter:{id:"btc-timestamping",sidebar_label:"Bitcoin Timestamping",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Babylon Overview",permalink:"/docs/introduction/babylon-overview"},next:{title:"Bitcoin Staking",permalink:"/docs/introduction/btc-staking"}},l={},p=[{value:'Long-Range Attack: A Fundamental Threat to PoS Chains ',id:"long-range-attack-a-fundamental-threat-to-pos-chains-",level:2},{value:'Secure PoS using BTC timestamping ',id:"secure-pos-using-btc-timestamping-",level:2},{value:'Benefits of BTC Timestamping to PoS Chains ',id:"benefits-of-btc-timestamping-to-pos-chains-",level:2}],h={toc:p};function m(t){let{components:e,...s}=t;return(0,i.kt)("wrapper",(0,a.Z)({},h,s,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"bitcoin-timestamping"},"Bitcoin Timestamping"),(0,i.kt)("p",null,"The Babylon BTC timestamping protocol allows any arbitrary\ndata submitted to Babylon to obtain Bitcoin timestamps.\nThe security level of these timestamps in terms of immutability\nincreases over time because more works are added on top of them over time.\nA primary use case of this protocol is to timestamp PoS blockchains\nto enhance their integrity and security,\nsuch as resisting against long range attacks.\nThe protocol includes Bitcoin as the timestamping service,\nthe Babylon blockchain as the checkpoint aggregation and\ndata availability service, and\nother PoS blockchains as the consumers of security."),(0,i.kt)("p",null,"Such security enables several use cases:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Fast Unbonding:")," PoS blockchains require social consensus to\ncircumvent long range attacks and this leads to\nlong unbonding periods.\nBitcoin security replaces social consensus and\nreduces unbonding periods to a few hours."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Bootstrapping new zones:")," Bitcoin security can be used to\nbootstrap new zones which have low token valuation."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Protecting important transactions:")," Bitcoin security can be\nused to protect important transactions while\nnormal transactions get fast finality."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Censorship resistance:")," Transactions that are censored\ncan use Babylon as a backup to enter the ledger."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Bitcoin staking:")," Bitcoin timestamping protocol serves\nas a building block for our\n",(0,i.kt)("a",{parentName:"li",href:"/docs/introduction/btc-staking"},"Bitcoin staking protocol"),",\nbecause it provides synchronization between PoS blockchains and Bitcoin.")),(0,i.kt)("p",null,"In addition, via CosmWasm, one can develop timestamping services with any\ndata verification rules."),(0,i.kt)("div",{class:"pdf-file-banner"},(0,i.kt)("a",{class:"link",target:"_blank",href:"https://arxiv.org/pdf/2207.08392.pdf"},(0,i.kt)("div",{class:"icon-holder"},(0,i.kt)(o.Z,{class:"icon",alt:"paper clip",mdxType:"Paperclip"})),(0,i.kt)("div",{class:"info"},(0,i.kt)("p",{class:"title"},"BTC timestamping whitepaper"),(0,i.kt)("p",{class:"subtitle"},"PDF")),(0,i.kt)("p",{class:"size"},"1.1MB"))),(0,i.kt)("p",null,"In the following, we explore the BTC Timestamping Protocol's use case in\ndetail."),(0,i.kt)("h2",{id:"long-range-attack-a-fundamental-threat-to-pos-chains-"},"Long-Range Attack: A Fundamental Threat to PoS Chains ",(0,i.kt)("a",{id:"long"})),(0,i.kt)("p",null,"By PoS chains, we refer to BFT (Byzantine-fault-tolerent) PoS chains that\nrequire a 2/3 majority vote from their validators to confirm a block.\nPoS chains are not supposed to fork, and when forking happens,\nthe chain is attacked:\nTo have 2/3 majority vote for both forks,\nat least 1/3 of the validators have double-voted by signing both forks,\nwhich is a prohibited behavior by the consensus protocol."),(0,i.kt)("p",null,"The picture below illustrates a forking attack to a hypothetical\nPoS chain called ",(0,i.kt)("strong",{parentName:"p"},"\u201cRugpull\u201c"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Forking Attack",src:n(65326).Z,width:"2120",height:"759"})),(0,i.kt)("p",null,"To deter such attacks, most PoS chains only allow accounts who have\nbonded their tokens (a.k.a staking) to be validators.\nThis way, if a validator is caught double signing,\nits bonded stake can be slashed by the consensus protocol in both forks,\ncausing total economical loss to this malicious validator."),(0,i.kt)("p",null,"This deterrence seems to provide slashable security to PoS chains.\nHowever, this requires the remaining validators to perceive both forks\nwhile the malicious validators are still bonded.\nTherefore, to avoid slashing, the malicious validators can first unbond\nfrom the first fork and then create the second fork from a block height\nwhere they are still validators.\nThis way, the malicious validators will not be slashable in\nthe first fork since they do not have a bonded stake.\nWhat\u2019s even worse is that once the attack happens,\nnew users of the PoS chain cannot tell which fork they should follow."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Long-range Attack",src:n(39007).Z,width:"1729",height:"531"})),(0,i.kt)("p",null,"This attack is called the long-range attack,\nwhich renders PoS chains not slashable and secure.\nThis attack is fundamental and cannot be solved by modifying the\nconsensus protocol without an extra source of trust.\nTo alleviate this threat, some PoS chains resort to social consensus,\nwhere the stakeholders periodically make off-chain decisions on the\ncorrect block at the latest height and ignore any other potential forks.\nHowever, this approach ties the chain's security to the\nparticipating stakeholders' subjective opinions.\nThis approach is also called weak subjectivity,\nwhich is against the decentralization principle.\nIn addition, since social consensus takes time,\nmost PoS chains impose a very long stake unbonding time in\nthe order of weeks."),(0,i.kt)("h2",{id:"secure-pos-using-btc-timestamping-"},"Secure PoS using BTC timestamping ",(0,i.kt)("a",{id:"time"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Secure PoS",src:n(28745).Z,width:"5351",height:"1914"})),(0,i.kt)("p",null,"To protect the PoS chain from long-range attacks,\nwe can checkpoint the PoS chain's blocks to BTC and\nimplement a fork choice rule for the fork with\nan earlier BTC timestamp. This way, either"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"The attacking fork will have a later BTC timestamp in the\nBTC canonical chain and will never be chosen by anyone, or")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"In order to be chosen, the attacker will have to create a very long fork\nof BTC in which the attacking PoS fork has an earlier timestamp,\nwhich is economically impossible."))),(0,i.kt)("p",null,"Thus, long-range attacks are neutralized by BTC timestamping."),(0,i.kt)("h2",{id:"benefits-of-btc-timestamping-to-pos-chains-"},"Benefits of BTC Timestamping to PoS Chains ",(0,i.kt)("a",{id:"benefit"})),(0,i.kt)("p",null,"Along with solving long-range attacks,\nthe irreversible BTC timestamps of PoS blocks also\nprovide other security benefits to PoS chains:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"No weak subjectivity"),": Bitcoin timestamps are objective.\nIt can thus eliminate the dependency of PoS chains on social consensus and\nweak subjectivity.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Shorter Unbonding Time"),": By replacing social consensus,\nBTC timestamping can reduce the stake unbonding time of\nPoS chains from weeks to one day.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"New Chain Bootstrapping"),": New PoS chains with low valuation\nare more vulnerable to forking attacks.\nBTC timestamping can help safeguard the chain alone its growth.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Verification of State Sync and Snapshots"),": The objective truth about\na PoS chain provided by BTC allows the users of the PoS chain to verify\nthe chain state or snapshot it has downloaded from the P2P network.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Protecting Important Transactions"),": BTC timestamps can be used to\nfurther confirm important PoS transactions at the cost of\nlonger confirmation latency.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Censorship Resistance"),": BTC timestamping could also be used to fight\nagainst transaction censorship in PoS chains via\nposting censored transactions to BTC."))),(0,i.kt)("p",null,"However, directly checkpointing to BTC is difficult and unscalable due to\nBTC\u2019s tight space and expensive transaction fees.\nMoreover, BTC cannot verify the checkpointed data.\nThis motivates the creation of Babylon,\nwhich solves all the difficulties with provable security."),(0,i.kt)("admonition",{title:"Note",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Without ",(0,i.kt)("strong",{parentName:"p"},"Babylon"),", it is difficult for any chain to directly checkpoint\nto ",(0,i.kt)("strong",{parentName:"p"},"Bitcoin")," due to scalability, cost, code modification, and\nsecurity problems.")))}m.isMDXComponent=!0},28745:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/HowUseCase-9eca05d99ca42eb4e0b5ee74c354176c.png"},65326:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/forking-fab24bb6a9d33c7612ea8bd4d77168b4.gif"},39007:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/longrange-1f85015a2f2c1ecd96d022ceaf8b0232.gif"}}]); \ No newline at end of file diff --git a/assets/js/a27c0e41.df505de0.js b/assets/js/a27c0e41.df505de0.js deleted file mode 100644 index 8e9c40136..000000000 --- a/assets/js/a27c0e41.df505de0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[571],{24469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/7b93a134.7fe9fda4.js b/assets/js/a3709191.07f06032.js similarity index 67% rename from assets/js/7b93a134.7fe9fda4.js rename to assets/js/a3709191.07f06032.js index cf7bd4ccc..5754da400 100644 --- a/assets/js/7b93a134.7fe9fda4.js +++ b/assets/js/a3709191.07f06032.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[477],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[998],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7d7e9b8.6777adb0.js b/assets/js/a7d7e9b8.6777adb0.js new file mode 100644 index 000000000..26d8fb985 --- /dev/null +++ b/assets/js/a7d7e9b8.6777adb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[9440],{24469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b7209be1.d9040e56.js b/assets/js/b7209be1.3c6e85ee.js similarity index 98% rename from assets/js/b7209be1.d9040e56.js rename to assets/js/b7209be1.3c6e85ee.js index 97d7ad81f..faffbaafe 100644 --- a/assets/js/b7209be1.d9040e56.js +++ b/assets/js/b7209be1.3c6e85ee.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(n),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||r;return n?o.createElement(f,i(i({ref:t},d),{},{components:n})):o.createElement(f,i({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(87462),a=(n(67294),n(3905));const r={id:"deployment-overview",sidebar_label:"Overview of Validator Deployment",hide_table_of_contents:!0},i="Overview of Validator Deployment",s={unversionedId:"user-guides/btc-staking-testnet/deployment-overview",id:"user-guides/btc-staking-testnet/deployment-overview",title:"Overview of Validator Deployment",description:"Overview of validator deployment",source:"@site/docs/user-guides/btc-staking-testnet/deployment-overview.md",sourceDirName:"user-guides/btc-staking-testnet",slug:"/user-guides/btc-staking-testnet/deployment-overview",permalink:"/docs/user-guides/btc-staking-testnet/deployment-overview",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/user-guides/btc-staking-testnet/deployment-overview.md",tags:[],version:"current",frontMatter:{id:"deployment-overview",sidebar_label:"Overview of Validator Deployment",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Bitcoin Staking Testnet-3 (Sunset)",permalink:"/docs/user-guides/btc-staking-testnet/overview"},next:{title:"Network Information",permalink:"/docs/user-guides/btc-staking-testnet/network-information"}},l={},c=[],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"overview-of-validator-deployment"},"Overview of Validator Deployment"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Overview of validator deployment",src:n(85815).Z,width:"2432",height:"1729"})),(0,a.kt)("p",null,"In this testnet, the Babylon Bitcoin staking protocol secures the Babylon blockchain\nvia an extra round of voting on top of the CometBFT consensus, called the\n",(0,a.kt)("em",{parentName:"p"},"finality round"),". This round is conducted by ",(0,a.kt)("em",{parentName:"p"},"finality providers"),', which are the\n"validators" that accept Bitcoin as stake delegations. Finality providers use\ntheir EOTS keys to cast finality votes on Babylon blocks generated by CometBFT.\nA Babylon block that has received more than 2/3 finality votes from the active\nfinality provider set is BTC-finalized.'),(0,a.kt)("p",null,"Therefore, one can join BTC staking testnet via one (or more) of the three sets\nof actions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Become a ",(0,a.kt)("em",{parentName:"li"},"Babylon CometBFT validator")," and accept Babylon\ntest token delegations. For this, you need to\n",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/installation"},"deploy and maintain a Babylon node")," and\n",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/btc-staking-testnet/become-validator"},"register a CometBFT validator"),"."),(0,a.kt)("li",{parentName:"ol"},"Become a ",(0,a.kt)("em",{parentName:"li"},"finality provider")," and accept signet BTC delegations.\nFor this, you need to use the ",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/btc-staking-testnet/finality-providers/overview"},"finality provider\nprogram"),".\nThis serves as the control plane for finality providers. It allows\ncreating, managing, and operating finality providers on the Babylon ledger.\nIts functionality is split into two daemons:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"the EOTS manager daemon, which serves as a server for securely managing\nthe EOTS keys of the finality provider and generating signatures using them;\nand"),(0,a.kt)("li",{parentName:"ul"},"the finality provider daemon, which is responsible for maintaining a\nconnection with a Babylon node and submitting finality votes for new\nblocks after they are generated by CometBFT."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("em",{parentName:"li"},"Self-Delegate")," BTC to your finality provider in a trustless way to gain\nvoting power. You can accomplish this by operating the ",(0,a.kt)("a",{parentName:"li",href:"./become-btc-staker"},"BTC Staker program"),". The most secure setup involves\na connection to a self-hosted Bitcoin node to submit and monitor the\nconfirmation state of staking transactions and\na connection to a Babylon node to submit staking requests.\nFor this testnet, we are utilising the BTC signet network to enable for\nharmless experimentation. Syncing a node to the BTC signet is super fast and\nshould not take more than 60 minutes. After performing a self-delegation\nto your finality provider you can shut down the Bitcoin node and the\nbtc-staker if you do not intend to make any further delegations.\nAlternatively, you could self-delegate BTC Signet tokens via the staking web\napplication when it becomes available.")),(0,a.kt)("p",null,"CometBFT validators and Finality providers are independent entities - you can be\nany of the 2. To fully participate in the testnet, we\nstrongly encourage experimenting with both and executing self-delegations."))}p.isMDXComponent=!0},85815:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/validator-deployment-overview-94880e77490ac05fb604c55a2970e038.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(n),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||r;return n?o.createElement(f,i(i({ref:t},d),{},{components:n})):o.createElement(f,i({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var o=n(87462),a=(n(67294),n(3905));const r={id:"deployment-overview",sidebar_label:"Overview of Validator Deployment",hide_table_of_contents:!0},i="Overview of Validator Deployment",s={unversionedId:"user-guides/btc-staking-testnet/deployment-overview",id:"user-guides/btc-staking-testnet/deployment-overview",title:"Overview of Validator Deployment",description:"Overview of validator deployment",source:"@site/docs/user-guides/btc-staking-testnet/deployment-overview.md",sourceDirName:"user-guides/btc-staking-testnet",slug:"/user-guides/btc-staking-testnet/deployment-overview",permalink:"/docs/user-guides/btc-staking-testnet/deployment-overview",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/user-guides/btc-staking-testnet/deployment-overview.md",tags:[],version:"current",frontMatter:{id:"deployment-overview",sidebar_label:"Overview of Validator Deployment",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"Bitcoin Staking Testnet-3 (Sunset)",permalink:"/docs/user-guides/btc-staking-testnet/overview"},next:{title:"Network Information",permalink:"/docs/user-guides/btc-staking-testnet/network-information"}},l={},c=[],d={toc:c};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,o.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"overview-of-validator-deployment"},"Overview of Validator Deployment"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Overview of validator deployment",src:n(74830).Z,width:"2432",height:"1729"})),(0,a.kt)("p",null,"In this testnet, the Babylon Bitcoin staking protocol secures the Babylon blockchain\nvia an extra round of voting on top of the CometBFT consensus, called the\n",(0,a.kt)("em",{parentName:"p"},"finality round"),". This round is conducted by ",(0,a.kt)("em",{parentName:"p"},"finality providers"),', which are the\n"validators" that accept Bitcoin as stake delegations. Finality providers use\ntheir EOTS keys to cast finality votes on Babylon blocks generated by CometBFT.\nA Babylon block that has received more than 2/3 finality votes from the active\nfinality provider set is BTC-finalized.'),(0,a.kt)("p",null,"Therefore, one can join BTC staking testnet via one (or more) of the three sets\nof actions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Become a ",(0,a.kt)("em",{parentName:"li"},"Babylon CometBFT validator")," and accept Babylon\ntest token delegations. For this, you need to\n",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/installation"},"deploy and maintain a Babylon node")," and\n",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/btc-staking-testnet/become-validator"},"register a CometBFT validator"),"."),(0,a.kt)("li",{parentName:"ol"},"Become a ",(0,a.kt)("em",{parentName:"li"},"finality provider")," and accept signet BTC delegations.\nFor this, you need to use the ",(0,a.kt)("a",{parentName:"li",href:"/docs/user-guides/btc-staking-testnet/finality-providers/overview"},"finality provider\nprogram"),".\nThis serves as the control plane for finality providers. It allows\ncreating, managing, and operating finality providers on the Babylon ledger.\nIts functionality is split into two daemons:",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"the EOTS manager daemon, which serves as a server for securely managing\nthe EOTS keys of the finality provider and generating signatures using them;\nand"),(0,a.kt)("li",{parentName:"ul"},"the finality provider daemon, which is responsible for maintaining a\nconnection with a Babylon node and submitting finality votes for new\nblocks after they are generated by CometBFT."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("em",{parentName:"li"},"Self-Delegate")," BTC to your finality provider in a trustless way to gain\nvoting power. You can accomplish this by operating the ",(0,a.kt)("a",{parentName:"li",href:"./become-btc-staker"},"BTC Staker program"),". The most secure setup involves\na connection to a self-hosted Bitcoin node to submit and monitor the\nconfirmation state of staking transactions and\na connection to a Babylon node to submit staking requests.\nFor this testnet, we are utilising the BTC signet network to enable for\nharmless experimentation. Syncing a node to the BTC signet is super fast and\nshould not take more than 60 minutes. After performing a self-delegation\nto your finality provider you can shut down the Bitcoin node and the\nbtc-staker if you do not intend to make any further delegations.\nAlternatively, you could self-delegate BTC Signet tokens via the staking web\napplication when it becomes available.")),(0,a.kt)("p",null,"CometBFT validators and Finality providers are independent entities - you can be\nany of the 2. To fully participate in the testnet, we\nstrongly encourage experimenting with both and executing self-delegations."))}p.isMDXComponent=!0},74830:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/validator-deployment-overview-94880e77490ac05fb604c55a2970e038.png"}}]); \ No newline at end of file diff --git a/assets/js/bd9adad9.9c3b810a.js b/assets/js/bd9adad9.9c3b810a.js deleted file mode 100644 index d46568c55..000000000 --- a/assets/js/bd9adad9.9c3b810a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[5483],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/e63be1c7.798f08d9.js b/assets/js/cc038963.f9d86d59.js similarity index 99% rename from assets/js/e63be1c7.798f08d9.js rename to assets/js/cc038963.f9d86d59.js index e2cc8cc17..cb1228180 100644 --- a/assets/js/e63be1c7.798f08d9.js +++ b/assets/js/cc038963.f9d86d59.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[2649],{54328:e=>{e.exports=JSON.parse('{"url":"redocusaurus/grpc.yaml","themeId":"theme-redoc","isSpecFile":true,"spec":{"openapi":"3.0.0","info":{"title":"Babylon - gRPC Gateway docs","description":"A REST interface for state queries","version":"1.0.0"},"servers":[{"url":"http://api.testnet.babylonchain.io/","description":"Test Server"}],"tags":[{"name":"BTCCheckpoint","description":"The REST API for the BTC Checkpoint RPC Gateway module."},{"name":"BTCLightClient","description":"The REST API for the BTC Light Client RPC Gateway module."},{"name":"Epoching","description":"The REST API for the Epoching RPC Gateway module."},{"name":"Checkpointing","description":"The REST API for the Checkpointing RPC Gateway module."},{"name":"ZoneConcierge","description":"The REST API for the Zone Concierge RPC Gateway module."}],"paths":{"/babylon/btccheckpoint/v1":{"get":{"summary":"BtcCheckpointsInfo","description":"BtcCheckpointsInfo returns checkpoint info for a range of epochs","operationId":"BtcCheckpointsInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info_list":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","title":"epoch number of this checkpoint","example":"115"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsInfoResponse is response type for the Query/BtcCheckpointsInfo RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"If the start_epoch parameter number is larger than the end_epoch parameter number.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"StartEpoch (1234567) should not be larger than EndEpoch (235678)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btccheckpoint/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcCheckpointParams","tags":["BTCCheckpoint"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","example":"6","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","example":"100","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btccheckpoint/v1/{epoch_num}":{"get":{"summary":"BtcCheckpointInfo","description":"BtcCheckpointInfo returns checkpoint info for a given epoch","operationId":"BtcCheckpointInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115","title":"epoch number of this checkpoint"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"title":"QueryBtcCheckpointInfoResponse is response type for the Query/BtcCheckpointInfo RPC method"}}}},"400":{"description":"The epoch_num parameter is filled with an incorrect value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"babylonddev123\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"The epoch_num is correct and filled with the epoch_num that has not yet submitted.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"checkpoint for given epoch not yet submitted"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which the earliest checkpointing btc height is requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/btccheckpoint/v1/{epoch_num}/submissions":{"get":{"summary":"submissions","operationId":"EpochSubmissions","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958/submissions?&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which submissions are requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/baseheader":{"get":{"summary":"baseheader","operationId":"BaseHeader","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/contains":{"get":{"summary":"contains","description":"Contains checks whether a hash is maintained by the module.","operationId":"Contains","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/contains?hash=qwrrasf345df\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean","example":false}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/containsBytes":{"get":{"summary":"containsBytes","description":"ContainsBytes is a temporary method that\\nchecks whether a hash is maintained by the module.\\nSee discussion at https://github.com/babylonchain/babylon/pull/132\\nfor more details.","operationId":"ContainsBytes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/containsBytes?hash=babylond345d32f\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/hashes":{"get":{"summary":"hashes","description":"Hashes retrieves the hashes maintained by the module.","operationId":"Hashes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/hashes?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"/rYA2+XfjvvRJfZecHvmyEBTYe+RNAMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"479","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/mainchain":{"get":{"summary":"mainchain","description":"MainChain returns the canonical chain","operationId":"MainChain","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/mainchain?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"u277crzObWQ66LPQUl0KiFrWuGandwMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcLightClientParams","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/tip":{"get":{"summary":"tip","description":"Tip return best header on canonical chain","operationId":"Tip","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"0020f930ba20ab1335b4f8e3da5f6363a7de1bccc4e496af9d1a0400000000000000000094328003ec2843c14a05b4b80646f802e939d11b6c3f04d6c0d1b856cf87bf818c92e0632027071757480fef"},"hash":{"type":"string","format":"byte","example":"00000000000000000005d4ef7e0d01595c37ac1d64dc30d88b0620ec4ed36754"},"height":{"type":"string","format":"uint64","example":"775246"},"work":{"type":"string","format":"byte","example":"81295536746026064881763604"}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/current_epoch":{"get":{"summary":"current_epoch","description":"CurrentEpoch queries the current epoch","operationId":"CurrentEpoch","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","example":"114","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","example":"22800","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/delegation_lifecycle/{del_addr}":{"get":{"summary":"delegation_lifecycle","description":"DelegationLifecycle queries the lifecycle of a given delegation","operationId":"DelegationLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/delegation_lifecycle/qeewr6778fnjgdth\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect del_addr value/ del_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty del_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"del_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/epoching/v1/epochs":{"get":{"summary":"epochs_info","description":"EpochsInfo queries the metadata of epochs in a given range, depending on the\\nparameters in the pagination request. Th main use case will be querying the\\nlatest epochs in time order.","operationId":"EpochsInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}":{"get":{"summary":"epoch_info","description":"EpochInfo queries the information of a given epoch","operationId":"EpochInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}}}}}}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/messages":{"get":{"summary":"epoch_msgs","description":"EpochMsgs queries the messages of a given epoch","operationId":"EpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/messages?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num is the number of epoch of the requested msg queue","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/validator_set":{"get":{"summary":"epoch_val_set","description":"EpochValSet queries the validator set of a given epoch","operationId":"EpochValSet","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/validator_set?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","example":"rKAsdLKhYBeTAF5mvhdEiv+b+Yo=\\"","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","example":"100","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64","example":"500"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"p8cs12mx4H7TeOf4fvPyKWqk7pA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"5","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs:latest/messages":{"get":{"summary":"latest_epoch_msgs","description":"LatestEpochMsgs queries the messages within a given number of most recent epochs","operationId":"LatestEpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs:latest/messages?end_epoch=babylond12345&epoch_count=5&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"end_epoch","description":"end_epoch is the number of the last epoch to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"epoch_count","description":"epoch_count is the number of epochs to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/params":{"get":{"summary":"params","description":"Params queries the parameters of the module.","operationId":"EpochingParams","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","example":"200","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/validator_lifecycle/{val_addr}":{"get":{"summary":"validator_lifecycle","description":"ValidatorLifecycle queries the lifecycle of a given validator","operationId":"ValidatorLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/validator_lifecycle/babylonddev877876\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64","example":"0"},"block_time":{"type":"string","format":"date-time","example":"2023-02-03T12:45:02Z"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect val_addr value/ val_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty val_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"val_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/checkpointing/v1/bls_public_keys/{epoch_num}":{"get":{"summary":"bls_public_key_list","description":"BlsPublicKeyList queries a list of bls public keys of the validators at a given epoch number.","operationId":"BlsPublicKeyList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/bls_public_keys/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"bls_pub_key":{"type":"string","format":"byte","example":"j7kRClBlblZEuXWhsEKZC6R1bFPOvMk/WeWPWiDANDjjKDN1wg7Aej+UC63HOx3LBIFKsfVVfUrrfOSlo4noLF3gblqOC5i6lUGhO8WRaB3F3NCLqKBl17h2T46U/UqU"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","example":null,"description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried bls public keys","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/checkpointing/v1/epochs/{epoch_num}/status":{"get":{"summary":"epoch_status","description":"EpochStatus queries the status of the checkpoint at a given epoch","operationId":"EpochStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs/12777895643/status\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/epochs:status_count":{"get":{"summary":"recent_epoch_status_count","description":"RecentEpochStatusCount queries the number of epochs with each status in recent epochs","operationId":"RecentEpochStatusCount","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs:status_count?epoch_count=12\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64","example":"115"},"epoch_count":{"type":"string","format":"uint64","example":"12"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_count","description":"epoch_count is the number of the most recent epochs to include in the aggregation.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/last_raw_checkpoint/{status}":{"get":{"summary":"last_checkpoint_with_status","description":"LastCheckpointWithStatus queries the last checkpoint with a given status or a more matured status","operationId":"LastCheckpointWithStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/last_raw_checkpoint/CKPT_STATUS_SUBMITTED\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: status, error: submitted is not valid"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}}]}},"/babylon/checkpointing/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"CheckpointingParams","tags":["Checkpointing"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/checkpointing/v1/raw_checkpoint/{epoch_num}":{"get":{"summary":"raw_checkpoint","description":"RawCheckpoint queries a checkpoints at a given epoch number.","operationId":"RawCheckpoint","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/12777895643\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace checkpointing code 1201: raw checkpoint does not exist: no raw checkpoint is found at epoch 123"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried checkpoint","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/raw_checkpoints/{status}":{"get":{"summary":"raw_checkpoint_list","description":"RawCheckpointList queries all checkpoints that match the given status.","operationId":"RawCheckpointList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/CKPT_STATUS_SUBMITTED?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","description":"status defines the status of the raw checkpoints of the query","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}":{"get":{"summary":"chain_info","description":"ChainInfo queries the latest info of a chain in Babylon\'s view","operationId":"ChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"664","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"epoch_chain_info","description":"EpochChainInfo queries the latest info of a chain in a given epoch of Babylon\'s view","operationId":"EpochChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/epochs/12778899564\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"665","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/header/{height}":{"get":{"summary":"header","description":"Header queries the CZ header and fork headers at a given height.","operationId":"Header","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/header/20\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1103: no header exists at this height"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chains":{"get":{"summary":"chain_list","description":"ChainList queries the list of chains that checkpoint to Babylon","operationId":"ChainList","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}":{"get":{"summary":"finalized_chain_info","description":"FinalizedChainInfo queries the BTC-finalised info of a chain, with proofs","operationId":"FinalizedChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"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"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}/height/{height}":{"get":{"summary":"finalized_chain_info_until_height","description":"FinalizedChainInfoUntilHeight queries the BTC-finalised info no later than the provided CZ height, with proofs","operationId":"FinalizedChainInfoUntilHeight","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734/height/20?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"CvoMCvcMCiMvaWJjLmNvcmUuY2xpZW50LnYxLk1zZ1VwZGF0ZUNsaWVudBLPDAoQMDctdGVuZGVybWludC0xMRKODAomL2liYy5saWdodGNsaWVudHMudGVuZGVybWludC52MS5IZWFkZXIS4wsKsgYKjwMKAggLEgdzYW5kYm94GLCsSSIMCIPg/p4GELSvs8ACKkgKIPaa2Kv3DcKLnh1IW/9wAz0xzZrq2cdYqD1fpu1HUY3eEiQIARIgpnoQuEEhga1RSSWpUFkQ0S74bF+EY73MmNSlrW+Y1CcyIOirSx1tW89WnAUdKoj/BjCd8dXyKuzZGJznjJKTmbVtOiDjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VUIgiP3fVs+Cs53U/r2QzjEpkt9JRsaoPJYh+tuUPwbl8+hKIIj931bPgrOd1P69kM4xKZLfSUbGqDyWIfrblD8G5fPoUiAEgJG8fdwoP3e/v5HXPETaWMPfipy8hnQF2Lfz2q2iL1ogYGgo5ytNQOlNRxCp2UeSctU9sIKlPkf3UCPhSY9291ViIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVaiDjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VXIU/3wXmPcrP8DA9M2s0O0IjHkF3xESnQMIsKxJGkgKIBbeVT2MekMVV40GYr7qq3KxdPWNWAK3Rn7SGvmmmFTPEiQIARIgYfPRAQ1vMV8KcdYSXX3/iQbbAbM+QktBMu5iAdiNH74iaAgCEhQQmWUnPNb4IwuJ0kiw1EkX6xvidxoMCIjg/p4GEKD/htYDIkBdKXPVqCUUHV5ZNnZwlX73BSAjo6hhARKbYSBPnYwF9kic/RBDPoWJtY1pTMmll5Fzz6NjvAlh6gpHdU0bpBULIg8IARoLCICSuMOY/v///wEiaAgCEhTFB5iLEZ7nxN+6GjmrFXS00SM43xoMCIjg/p4GENuRk9YDIkD2+BtM+scfYJIci6HUuStB9+KbYivdqVLGl3757fftC5M4Wc9CbApzS1e1kCUt1u5X0CIcl908FzGNX7Pvo5cAImgIAhIU/3wXmPcrP8DA9M2s0O0IjHkF3xEaDAiI4P6eBhCr2JbWAyJARy2AjrgF/q6wYJfiXsCzTrsIaFWULij+gg30aFja1W+nVXObvzGSlVA96CafDl1X964aqjaxiLA1vjRMAeAsCRLAAgo+ChQQmWUnPNb4IwuJ0kiw1EkX6xvidxIiCiBzWJ3O3MJ757DU5YgoYgvZ4vFMZ/mNn3O66eV8/u+W0Rigwh4KPgoUXNJb1YCUIkmXABYS4XMMIA6hqBwSIgoggdxlGlNQp7I5nj8EsjsUym1zC/F6hcilv8TMNf/owawYoMIeCj4KFMUHmIsRnufE37oaOasVdLTRIzjfEiIKIGEcw1o23WK7/Lpvy9TnOom9RCUCECrZjjzwDbUZYC3VGKDCHgo+ChT/fBeY9ys/wMD0zazQ7QiMeQXfERIiCiCO3GGFOwKYVji4hly8j3VQXD0CNzoPizj8uq/BzyxpTxigwh4SPgoU/3wXmPcrP8DA9M2s0O0IjHkF3xESIgogjtxhhTsCmFY4uIZcvI91UFw9Ajc6D4s4/Lqvwc8saU8YoMIeGgQQ7KtJIuICCkkKFBCZZSc81vgjC4nSSLDUSRfrG+J3EiIKIHNYnc7cwnvnsNTliChiC9ni8Uxn+Y2fc7rp5Xz+75bRGKDCHiCguaT///////8BCkIKFFzSW9WAlCJJlwAWEuFzDCAOoagcEiIKIIHcZRpTUKeyOZ4/BLI7FMptcwvxeoXIpb/EzDX/6MGsGKDCHiCgwh4KQgoUxQeYixGe58Tfuho5qxV0tNEjON8SIgogYRzDWjbdYrv8um/L1Oc6ib1EJQIQKtmOPPANtRlgLdUYoMIeIKDCHgpCChT/fBeY9ys/wMD0zazQ7QiMeQXfERIiCiCO3GGFOwKYVji4hly8j3VQXD0CNzoPizj8uq/BzyxpTxigwh4goMIeEkkKFBCZZSc81vgjC4nSSLDUSRfrG+J3EiIKIHNYnc7cwnvnsNTliChiC9ni8Uxn+Y2fc7rp5Xz+75bRGKDCHiCguaT///////8BGipiYm4xdng3bHlyM2h3NjhzbnVqZjk2cHo0emVqeXZmcmtwMDJrcGQzcGgSZgpRCkYKHy9jb3Ntb3MuY3J5cHRvLnNlY3AyNTZrMS5QdWJLZXkSIwohA7VN0PukV0gVnjQS4TS63mufBq5UJ/AuBavAId5QXwzEEgQKAggBGMEaEhEKCwoEdWJibhIDNDEwEKi/DBpAPHhSzFFS+Kr7Z4ev8pHVCv94kpAXjE3qsqNnJnLPiYUDrZ91+0mrIL14itHvHx9C9vnThISiDyO6yj/Fivlr7A="},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"chain with ID sandbox does not have a timestamped header before height 123"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","description":"height is the height of the CZ chain\\nsuch that the returned finalised chain info will be no later than this height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}":{"get":{"summary":"list_headers","description":"ListHeaders queries the headers of a chain in Babylon\'s view, with pagination support","operationId":"ListHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"},"title":"IndexedHeader is the metadata of a CZ header"}},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"list_epoch_headers","description":"ListEpochHeaders queries the headers of a chain timestamped in a given epoch of Babylon, with pagination support","operationId":"ListEpochHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/qwertydev55667734/epochs/12778967855\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"nwbmL+O9naKWlcXPF/ydfidWolnDTtdrTHpauJszR0Q="},"height":{"type":"string","format":"uint64","example":"1214966","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"47"},"time":{"type":"string","format":"date-time","example":"2023-02-06T09:06:55.265087672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"7X371fiUPmi7CJAn8mn0o0jZW/gSHYW1FDr72hBJmCo="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"T0U/P/ytKEtrED92o/P99NeYrETfHxPnVipdjXe11D0="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VDr+2Sv74IpnFUZdNed1GQesT+fKmObQD+JLfMWKjGk="},"data_hash":{"type":"string","format":"byte","example":"VAsoaSNOik8BToJxRrGT+juYVfowMsKgB8iH4Ye1Gxw="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"next_validators_hash":{"type":"string","format":"byte","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"84/hCGj7As1EQHkNWPoKbltTgI4ygC9DMUTR7h5Cs7M="},"last_results_hash":{"type":"string","format":"byte","example":"BwHP9RZ9QBG+AGyekgyk4QypbzCw/LPGkUNL4Af/eIc="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"WLEoPJImsAOqoq9N2DNs/F3Iag0="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"1","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"ZQQkMMnDn8xMHOjjtUeuyPVB9l6AgXAA5X+BDKzvucI=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id/epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"ZoneConciergeParams","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}}},"components":{"schemas":{"babylon.btccheckpoint.v1.Params":{"type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}},"description":"Params defines the parameters for the module."},"babylon.btccheckpoint.v1.QueryBtcCheckpointHeightAndHashResponse":{"type":"object","properties":{"earliest_btc_block_number":{"type":"string","format":"uint64","title":"Earliest btc block number containing given raw checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte"}},"title":"QueryBtcCheckpointHeightAndHashResponse is response type for the Query/BtcCheckpointHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryBtcCheckpointsHeightAndHashResponse":{"type":"object","properties":{"epoch_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsHeightAndHashResponse is response type for the Query/BtcCheckpointsHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryEpochSubmissionsResponse":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.btccheckpoint.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btccheckpoint.v1.SubmissionKey":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"babylon.btccheckpoint.v1.TransactionKey":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"},"cosmos.base.query.v1beta1.PageRequest":{"type":"object","properties":{"key":{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set."},"offset":{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set."},"limit":{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app."},"count_total":{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set."},"reverse":{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43"}},"description":"message SomeRequest {\\n Foo some_parameter = 1;\\n PageRequest pagination = 2;\\n }","title":"PageRequest is to be embedded in gRPC request messages for efficient\\npagination. Ex:"},"cosmos.base.query.v1beta1.PageResponse":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"},"google.protobuf.Any":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"grpc.gateway.runtime.Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"}}}},"babylon.btclightclient.v1.BTCHeaderInfo":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}},"babylon.btclightclient.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.btclightclient.v1.QueryBaseHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.btclightclient.v1.QueryContainsBytesResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."},"babylon.btclightclient.v1.QueryContainsResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."},"babylon.btclightclient.v1.QueryHashesResponse":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."},"babylon.btclightclient.v1.QueryMainChainResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."},"babylon.btclightclient.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btclightclient.v1.QueryTipResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.epoching.v1.BondState":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"babylon.epoching.v1.DelegationLifecycle":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"babylon.epoching.v1.DelegationStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"babylon.epoching.v1.Params":{"type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}},"description":"Params defines the parameters for the module."},"babylon.epoching.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"},"babylon.epoching.v1.QueryDelegationLifecycleResponse":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueryEpochInfoResponse":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}}},"babylon.epoching.v1.QueryEpochMsgsResponse":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"},"babylon.epoching.v1.QueryEpochValSetResponse":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryEpochsInfoResponse":{"type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryLatestEpochMsgsResponse":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"},"babylon.epoching.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."},"babylon.epoching.v1.QueryValidatorLifecycleResponse":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueuedMessage":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"babylon.epoching.v1.QueuedMessageList":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"babylon.epoching.v1.ValStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Validator":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}},"babylon.epoching.v1.ValidatorLifecycle":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"cosmos.base.v1beta1.Coin":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."},"cosmos.staking.v1beta1.CommissionRates":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"cosmos.staking.v1beta1.Description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."},"cosmos.staking.v1beta1.MsgCreateValidator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"cosmos.staking.v1beta1.MsgDelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"cosmos.staking.v1beta1.MsgUndelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"tendermint.types.BlockID":{"type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}},"title":"BlockID"},"tendermint.types.Header":{"type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"tendermint.types.PartSetHeader":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"},"tendermint.version.Consensus":{"type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"babylon.checkpointing.v1.CheckpointStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"babylon.checkpointing.v1.CheckpointStatus":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."},"babylon.checkpointing.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.checkpointing.v1.QueryBlsPublicKeyListResponse":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."},"babylon.checkpointing.v1.QueryEpochStatusResponse":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."},"babylon.checkpointing.v1.QueryLastCheckpointWithStatusResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}},"babylon.checkpointing.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.checkpointing.v1.QueryRawCheckpointListResponse":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."},"babylon.checkpointing.v1.QueryRawCheckpointResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."},"babylon.checkpointing.v1.QueryRecentEpochStatusCountResponse":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64"},"epoch_count":{"type":"string","format":"uint64"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."},"babylon.checkpointing.v1.RawCheckpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"babylon.checkpointing.v1.RawCheckpointWithMeta":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"babylon.checkpointing.v1.ValidatorWithBlsKey":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"babylon.btccheckpoint.v1.TransactionInfo":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"babylon.zoneconcierge.v1.ChainInfo":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}},"title":"ChainInfo is the information of a CZ"},"babylon.zoneconcierge.v1.Forks":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"babylon.zoneconcierge.v1.IndexedHeader":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"babylon.zoneconcierge.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.zoneconcierge.v1.ProofEpochSealed":{"type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}},"title":"ProofEpochSealed is the proof that an epoch is sealed by the sealer header, i.e., the 2nd header of the next epoch\\nWith the access of metadata\\n- Metadata of this epoch, which includes the sealer header\\n- Raw checkpoint of this epoch\\nThe verifier can perform the following verification rules:\\n- The raw checkpoint\'s `last_commit_hash` is same as in the sealer header\\n- More than 1/3 (in voting power) validators in the validator set of this epoch have signed `last_commit_hash` of the sealer header\\n- The epoch medatata is committed to the `app_hash` of the sealer header\\n- The validator set is committed to the `app_hash` of the sealer header"},"babylon.zoneconcierge.v1.ProofFinalizedChainInfo":{"type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}},"title":"ProofFinalizedChainInfo is a set of proofs that attest a chain info is BTC-finalised"},"babylon.zoneconcierge.v1.QueryChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryChainListResponse":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"},"babylon.zoneconcierge.v1.QueryEpochChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryEpochChainInfoResponse is response type for the Query/EpochChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoResponse is response type for the Query/FinalizedChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoUntilHeightResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."},"babylon.zoneconcierge.v1.QueryHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."},"babylon.zoneconcierge.v1.QueryListEpochHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."},"babylon.zoneconcierge.v1.QueryListHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."},"babylon.zoneconcierge.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"tendermint.crypto.Proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.crypto.ProofOp":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"},"tendermint.crypto.ProofOps":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}},"title":"ProofOps is Merkle proof defined by the list of ProofOps"},"tendermint.types.TxProof":{"type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."}}}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[5398],{54328:e=>{e.exports=JSON.parse('{"url":"redocusaurus/grpc.yaml","themeId":"theme-redoc","isSpecFile":true,"spec":{"openapi":"3.0.0","info":{"title":"Babylon - gRPC Gateway docs","description":"A REST interface for state queries","version":"1.0.0"},"servers":[{"url":"http://api.testnet.babylonchain.io/","description":"Test Server"}],"tags":[{"name":"BTCCheckpoint","description":"The REST API for the BTC Checkpoint RPC Gateway module."},{"name":"BTCLightClient","description":"The REST API for the BTC Light Client RPC Gateway module."},{"name":"Epoching","description":"The REST API for the Epoching RPC Gateway module."},{"name":"Checkpointing","description":"The REST API for the Checkpointing RPC Gateway module."},{"name":"ZoneConcierge","description":"The REST API for the Zone Concierge RPC Gateway module."}],"paths":{"/babylon/btccheckpoint/v1":{"get":{"summary":"BtcCheckpointsInfo","description":"BtcCheckpointsInfo returns checkpoint info for a range of epochs","operationId":"BtcCheckpointsInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info_list":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","title":"epoch number of this checkpoint","example":"115"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsInfoResponse is response type for the Query/BtcCheckpointsInfo RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"If the start_epoch parameter number is larger than the end_epoch parameter number.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"StartEpoch (1234567) should not be larger than EndEpoch (235678)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btccheckpoint/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcCheckpointParams","tags":["BTCCheckpoint"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","example":"6","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","example":"100","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btccheckpoint/v1/{epoch_num}":{"get":{"summary":"BtcCheckpointInfo","description":"BtcCheckpointInfo returns checkpoint info for a given epoch","operationId":"BtcCheckpointInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115","title":"epoch number of this checkpoint"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"title":"QueryBtcCheckpointInfoResponse is response type for the Query/BtcCheckpointInfo RPC method"}}}},"400":{"description":"The epoch_num parameter is filled with an incorrect value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"babylonddev123\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"The epoch_num is correct and filled with the epoch_num that has not yet submitted.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"checkpoint for given epoch not yet submitted"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which the earliest checkpointing btc height is requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/btccheckpoint/v1/{epoch_num}/submissions":{"get":{"summary":"submissions","operationId":"EpochSubmissions","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958/submissions?&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which submissions are requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/baseheader":{"get":{"summary":"baseheader","operationId":"BaseHeader","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/contains":{"get":{"summary":"contains","description":"Contains checks whether a hash is maintained by the module.","operationId":"Contains","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/contains?hash=qwrrasf345df\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean","example":false}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/containsBytes":{"get":{"summary":"containsBytes","description":"ContainsBytes is a temporary method that\\nchecks whether a hash is maintained by the module.\\nSee discussion at https://github.com/babylonchain/babylon/pull/132\\nfor more details.","operationId":"ContainsBytes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/containsBytes?hash=babylond345d32f\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/hashes":{"get":{"summary":"hashes","description":"Hashes retrieves the hashes maintained by the module.","operationId":"Hashes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/hashes?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"/rYA2+XfjvvRJfZecHvmyEBTYe+RNAMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"479","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/mainchain":{"get":{"summary":"mainchain","description":"MainChain returns the canonical chain","operationId":"MainChain","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/mainchain?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"u277crzObWQ66LPQUl0KiFrWuGandwMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcLightClientParams","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/tip":{"get":{"summary":"tip","description":"Tip return best header on canonical chain","operationId":"Tip","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"0020f930ba20ab1335b4f8e3da5f6363a7de1bccc4e496af9d1a0400000000000000000094328003ec2843c14a05b4b80646f802e939d11b6c3f04d6c0d1b856cf87bf818c92e0632027071757480fef"},"hash":{"type":"string","format":"byte","example":"00000000000000000005d4ef7e0d01595c37ac1d64dc30d88b0620ec4ed36754"},"height":{"type":"string","format":"uint64","example":"775246"},"work":{"type":"string","format":"byte","example":"81295536746026064881763604"}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/current_epoch":{"get":{"summary":"current_epoch","description":"CurrentEpoch queries the current epoch","operationId":"CurrentEpoch","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","example":"114","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","example":"22800","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/delegation_lifecycle/{del_addr}":{"get":{"summary":"delegation_lifecycle","description":"DelegationLifecycle queries the lifecycle of a given delegation","operationId":"DelegationLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/delegation_lifecycle/qeewr6778fnjgdth\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect del_addr value/ del_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty del_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"del_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/epoching/v1/epochs":{"get":{"summary":"epochs_info","description":"EpochsInfo queries the metadata of epochs in a given range, depending on the\\nparameters in the pagination request. Th main use case will be querying the\\nlatest epochs in time order.","operationId":"EpochsInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}":{"get":{"summary":"epoch_info","description":"EpochInfo queries the information of a given epoch","operationId":"EpochInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}}}}}}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/messages":{"get":{"summary":"epoch_msgs","description":"EpochMsgs queries the messages of a given epoch","operationId":"EpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/messages?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num is the number of epoch of the requested msg queue","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/validator_set":{"get":{"summary":"epoch_val_set","description":"EpochValSet queries the validator set of a given epoch","operationId":"EpochValSet","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/validator_set?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","example":"rKAsdLKhYBeTAF5mvhdEiv+b+Yo=\\"","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","example":"100","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64","example":"500"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"p8cs12mx4H7TeOf4fvPyKWqk7pA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"5","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs:latest/messages":{"get":{"summary":"latest_epoch_msgs","description":"LatestEpochMsgs queries the messages within a given number of most recent epochs","operationId":"LatestEpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs:latest/messages?end_epoch=babylond12345&epoch_count=5&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"end_epoch","description":"end_epoch is the number of the last epoch to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"epoch_count","description":"epoch_count is the number of epochs to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/params":{"get":{"summary":"params","description":"Params queries the parameters of the module.","operationId":"EpochingParams","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","example":"200","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/validator_lifecycle/{val_addr}":{"get":{"summary":"validator_lifecycle","description":"ValidatorLifecycle queries the lifecycle of a given validator","operationId":"ValidatorLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/validator_lifecycle/babylonddev877876\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64","example":"0"},"block_time":{"type":"string","format":"date-time","example":"2023-02-03T12:45:02Z"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect val_addr value/ val_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty val_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"val_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/checkpointing/v1/bls_public_keys/{epoch_num}":{"get":{"summary":"bls_public_key_list","description":"BlsPublicKeyList queries a list of bls public keys of the validators at a given epoch number.","operationId":"BlsPublicKeyList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/bls_public_keys/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"bls_pub_key":{"type":"string","format":"byte","example":"j7kRClBlblZEuXWhsEKZC6R1bFPOvMk/WeWPWiDANDjjKDN1wg7Aej+UC63HOx3LBIFKsfVVfUrrfOSlo4noLF3gblqOC5i6lUGhO8WRaB3F3NCLqKBl17h2T46U/UqU"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","example":null,"description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried bls public keys","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/checkpointing/v1/epochs/{epoch_num}/status":{"get":{"summary":"epoch_status","description":"EpochStatus queries the status of the checkpoint at a given epoch","operationId":"EpochStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs/12777895643/status\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/epochs:status_count":{"get":{"summary":"recent_epoch_status_count","description":"RecentEpochStatusCount queries the number of epochs with each status in recent epochs","operationId":"RecentEpochStatusCount","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs:status_count?epoch_count=12\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64","example":"115"},"epoch_count":{"type":"string","format":"uint64","example":"12"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_count","description":"epoch_count is the number of the most recent epochs to include in the aggregation.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/last_raw_checkpoint/{status}":{"get":{"summary":"last_checkpoint_with_status","description":"LastCheckpointWithStatus queries the last checkpoint with a given status or a more matured status","operationId":"LastCheckpointWithStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/last_raw_checkpoint/CKPT_STATUS_SUBMITTED\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: status, error: submitted is not valid"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}}]}},"/babylon/checkpointing/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"CheckpointingParams","tags":["Checkpointing"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/checkpointing/v1/raw_checkpoint/{epoch_num}":{"get":{"summary":"raw_checkpoint","description":"RawCheckpoint queries a checkpoints at a given epoch number.","operationId":"RawCheckpoint","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/12777895643\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace checkpointing code 1201: raw checkpoint does not exist: no raw checkpoint is found at epoch 123"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried checkpoint","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/raw_checkpoints/{status}":{"get":{"summary":"raw_checkpoint_list","description":"RawCheckpointList queries all checkpoints that match the given status.","operationId":"RawCheckpointList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/CKPT_STATUS_SUBMITTED?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","description":"status defines the status of the raw checkpoints of the query","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}":{"get":{"summary":"chain_info","description":"ChainInfo queries the latest info of a chain in Babylon\'s view","operationId":"ChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"664","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"epoch_chain_info","description":"EpochChainInfo queries the latest info of a chain in a given epoch of Babylon\'s view","operationId":"EpochChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/epochs/12778899564\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"665","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/header/{height}":{"get":{"summary":"header","description":"Header queries the CZ header and fork headers at a given height.","operationId":"Header","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/header/20\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1103: no header exists at this height"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chains":{"get":{"summary":"chain_list","description":"ChainList queries the list of chains that checkpoint to Babylon","operationId":"ChainList","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}":{"get":{"summary":"finalized_chain_info","description":"FinalizedChainInfo queries the BTC-finalised info of a chain, with proofs","operationId":"FinalizedChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"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"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}/height/{height}":{"get":{"summary":"finalized_chain_info_until_height","description":"FinalizedChainInfoUntilHeight queries the BTC-finalised info no later than the provided CZ height, with proofs","operationId":"FinalizedChainInfoUntilHeight","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734/height/20?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"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"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"chain with ID sandbox does not have a timestamped header before height 123"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","description":"height is the height of the CZ chain\\nsuch that the returned finalised chain info will be no later than this height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}":{"get":{"summary":"list_headers","description":"ListHeaders queries the headers of a chain in Babylon\'s view, with pagination support","operationId":"ListHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"},"title":"IndexedHeader is the metadata of a CZ header"}},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"list_epoch_headers","description":"ListEpochHeaders queries the headers of a chain timestamped in a given epoch of Babylon, with pagination support","operationId":"ListEpochHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/qwertydev55667734/epochs/12778967855\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"nwbmL+O9naKWlcXPF/ydfidWolnDTtdrTHpauJszR0Q="},"height":{"type":"string","format":"uint64","example":"1214966","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"47"},"time":{"type":"string","format":"date-time","example":"2023-02-06T09:06:55.265087672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"7X371fiUPmi7CJAn8mn0o0jZW/gSHYW1FDr72hBJmCo="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"T0U/P/ytKEtrED92o/P99NeYrETfHxPnVipdjXe11D0="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VDr+2Sv74IpnFUZdNed1GQesT+fKmObQD+JLfMWKjGk="},"data_hash":{"type":"string","format":"byte","example":"VAsoaSNOik8BToJxRrGT+juYVfowMsKgB8iH4Ye1Gxw="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"next_validators_hash":{"type":"string","format":"byte","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"84/hCGj7As1EQHkNWPoKbltTgI4ygC9DMUTR7h5Cs7M="},"last_results_hash":{"type":"string","format":"byte","example":"BwHP9RZ9QBG+AGyekgyk4QypbzCw/LPGkUNL4Af/eIc="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"WLEoPJImsAOqoq9N2DNs/F3Iag0="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"1","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"ZQQkMMnDn8xMHOjjtUeuyPVB9l6AgXAA5X+BDKzvucI=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id/epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"ZoneConciergeParams","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}}},"components":{"schemas":{"babylon.btccheckpoint.v1.Params":{"type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}},"description":"Params defines the parameters for the module."},"babylon.btccheckpoint.v1.QueryBtcCheckpointHeightAndHashResponse":{"type":"object","properties":{"earliest_btc_block_number":{"type":"string","format":"uint64","title":"Earliest btc block number containing given raw checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte"}},"title":"QueryBtcCheckpointHeightAndHashResponse is response type for the Query/BtcCheckpointHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryBtcCheckpointsHeightAndHashResponse":{"type":"object","properties":{"epoch_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsHeightAndHashResponse is response type for the Query/BtcCheckpointsHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryEpochSubmissionsResponse":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.btccheckpoint.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btccheckpoint.v1.SubmissionKey":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"babylon.btccheckpoint.v1.TransactionKey":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"},"cosmos.base.query.v1beta1.PageRequest":{"type":"object","properties":{"key":{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set."},"offset":{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set."},"limit":{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app."},"count_total":{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set."},"reverse":{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43"}},"description":"message SomeRequest {\\n Foo some_parameter = 1;\\n PageRequest pagination = 2;\\n }","title":"PageRequest is to be embedded in gRPC request messages for efficient\\npagination. Ex:"},"cosmos.base.query.v1beta1.PageResponse":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"},"google.protobuf.Any":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"grpc.gateway.runtime.Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"}}}},"babylon.btclightclient.v1.BTCHeaderInfo":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}},"babylon.btclightclient.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.btclightclient.v1.QueryBaseHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.btclightclient.v1.QueryContainsBytesResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."},"babylon.btclightclient.v1.QueryContainsResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."},"babylon.btclightclient.v1.QueryHashesResponse":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."},"babylon.btclightclient.v1.QueryMainChainResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."},"babylon.btclightclient.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btclightclient.v1.QueryTipResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.epoching.v1.BondState":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"babylon.epoching.v1.DelegationLifecycle":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"babylon.epoching.v1.DelegationStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"babylon.epoching.v1.Params":{"type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}},"description":"Params defines the parameters for the module."},"babylon.epoching.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"},"babylon.epoching.v1.QueryDelegationLifecycleResponse":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueryEpochInfoResponse":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}}},"babylon.epoching.v1.QueryEpochMsgsResponse":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"},"babylon.epoching.v1.QueryEpochValSetResponse":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryEpochsInfoResponse":{"type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryLatestEpochMsgsResponse":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"},"babylon.epoching.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."},"babylon.epoching.v1.QueryValidatorLifecycleResponse":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueuedMessage":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"babylon.epoching.v1.QueuedMessageList":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"babylon.epoching.v1.ValStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Validator":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}},"babylon.epoching.v1.ValidatorLifecycle":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"cosmos.base.v1beta1.Coin":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."},"cosmos.staking.v1beta1.CommissionRates":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"cosmos.staking.v1beta1.Description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."},"cosmos.staking.v1beta1.MsgCreateValidator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"cosmos.staking.v1beta1.MsgDelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"cosmos.staking.v1beta1.MsgUndelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"tendermint.types.BlockID":{"type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}},"title":"BlockID"},"tendermint.types.Header":{"type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"tendermint.types.PartSetHeader":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"},"tendermint.version.Consensus":{"type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"babylon.checkpointing.v1.CheckpointStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"babylon.checkpointing.v1.CheckpointStatus":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."},"babylon.checkpointing.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.checkpointing.v1.QueryBlsPublicKeyListResponse":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."},"babylon.checkpointing.v1.QueryEpochStatusResponse":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."},"babylon.checkpointing.v1.QueryLastCheckpointWithStatusResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}},"babylon.checkpointing.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.checkpointing.v1.QueryRawCheckpointListResponse":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."},"babylon.checkpointing.v1.QueryRawCheckpointResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."},"babylon.checkpointing.v1.QueryRecentEpochStatusCountResponse":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64"},"epoch_count":{"type":"string","format":"uint64"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."},"babylon.checkpointing.v1.RawCheckpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"babylon.checkpointing.v1.RawCheckpointWithMeta":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"babylon.checkpointing.v1.ValidatorWithBlsKey":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"babylon.btccheckpoint.v1.TransactionInfo":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"babylon.zoneconcierge.v1.ChainInfo":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}},"title":"ChainInfo is the information of a CZ"},"babylon.zoneconcierge.v1.Forks":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"babylon.zoneconcierge.v1.IndexedHeader":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"babylon.zoneconcierge.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.zoneconcierge.v1.ProofEpochSealed":{"type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}},"title":"ProofEpochSealed is the proof that an epoch is sealed by the sealer header, i.e., the 2nd header of the next epoch\\nWith the access of metadata\\n- Metadata of this epoch, which includes the sealer header\\n- Raw checkpoint of this epoch\\nThe verifier can perform the following verification rules:\\n- The raw checkpoint\'s `last_commit_hash` is same as in the sealer header\\n- More than 1/3 (in voting power) validators in the validator set of this epoch have signed `last_commit_hash` of the sealer header\\n- The epoch medatata is committed to the `app_hash` of the sealer header\\n- The validator set is committed to the `app_hash` of the sealer header"},"babylon.zoneconcierge.v1.ProofFinalizedChainInfo":{"type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}},"title":"ProofFinalizedChainInfo is a set of proofs that attest a chain info is BTC-finalised"},"babylon.zoneconcierge.v1.QueryChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryChainListResponse":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"},"babylon.zoneconcierge.v1.QueryEpochChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryEpochChainInfoResponse is response type for the Query/EpochChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoResponse is response type for the Query/FinalizedChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoUntilHeightResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."},"babylon.zoneconcierge.v1.QueryHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."},"babylon.zoneconcierge.v1.QueryListEpochHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."},"babylon.zoneconcierge.v1.QueryListHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."},"babylon.zoneconcierge.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"tendermint.crypto.Proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.crypto.ProofOp":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"},"tendermint.crypto.ProofOps":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}},"title":"ProofOps is Merkle proof defined by the list of ProofOps"},"tendermint.types.TxProof":{"type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."}}}}}')}}]); \ No newline at end of file diff --git a/assets/js/d9f32620.ccc0eb9f.js b/assets/js/d9f32620.d8ad6e12.js similarity index 97% rename from assets/js/d9f32620.ccc0eb9f.js rename to assets/js/d9f32620.d8ad6e12.js index eaa4bd1a4..46000704d 100644 --- a/assets/js/d9f32620.ccc0eb9f.js +++ b/assets/js/d9f32620.d8ad6e12.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[1914],{3905:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>g});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),m=c(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||p[g]||a;return r?n.createElement(b,l(l({ref:t},i),{},{components:r})):n.createElement(b,l({ref:t},i))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:o,l[1]=u;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-26-welcome/index.md",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},c=[],i={toc:c};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(9737).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}p.isMDXComponent=!0},9737:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[1914],{3905:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>g});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),m=c(r),g=o,b=m["".concat(s,".").concat(g)]||m[g]||p[g]||a;return r?n.createElement(b,l(l({ref:t},i),{},{components:r})):n.createElement(b,l({ref:t},i))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:o,l[1]=u;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-26-welcome/index.md",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},c=[],i={toc:c};function p(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(7612).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}p.isMDXComponent=!0},7612:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/4ae7943b.38c9ff8c.js b/assets/js/db4acc74.7e2a8979.js similarity index 65% rename from assets/js/4ae7943b.38c9ff8c.js rename to assets/js/db4acc74.7e2a8979.js index 94b53aed7..a15bc7a82 100644 --- a/assets/js/4ae7943b.38c9ff8c.js +++ b/assets/js/db4acc74.7e2a8979.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[2920],{42842:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-redoc","id":"grpc"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[9868],{42842:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-redoc","id":"grpc"}')}}]); \ No newline at end of file diff --git a/assets/js/1606a73f.a6cc7100.js b/assets/js/edc6c16a.25f1c0ad.js similarity index 50% rename from assets/js/1606a73f.a6cc7100.js rename to assets/js/edc6c16a.25f1c0ad.js index ac537b514..91d14cabd 100644 --- a/assets/js/1606a73f.a6cc7100.js +++ b/assets/js/edc6c16a.25f1c0ad.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[9602],{18821:e=>{e.exports={}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[3681],{18821:e=>{e.exports={}}}]); \ No newline at end of file diff --git a/assets/js/main.269d115e.js b/assets/js/main.269d115e.js deleted file mode 100644 index 00ce3ea1d..000000000 --- a/assets/js/main.269d115e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.269d115e.js.LICENSE.txt */ -(self.webpackChunkdocument_sample=self.webpackChunkdocument_sample||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(67294),a=n(87462),i=n(68356),r=n.n(i),s=n(16887);const l={"0050cec8":[()=>n.e(8266).then(n.bind(n,44184)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/Babylond_tx_ibc_client_misbehaviour.md",44184],"00ce7889":[()=>n.e(1325).then(n.bind(n,14022)),"@site/docs/papers.md",14022],"014f4ee7":[()=>n.e(9598).then(n.bind(n,11765)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_slashing.md",11765],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,91223)),"@theme/BlogTagsListPage",91223],"01dc7620":[()=>n.e(8052).then(n.bind(n,3340)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_params.md",3340],"02132791":[()=>n.e(7734).then(n.bind(n,44840)),"@site/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider.md",44840],"023d5484":[()=>n.e(1171).then(n.bind(n,37683)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/Babylond_tx_bank_send.md",37683],"02c6b0f6":[()=>n.e(230).then(n.bind(n,31271)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/Babylond_tx_ibc_client.md",31271],"031793e1":[()=>n.e(1633).then(n.t.bind(n,62511,19)),"~blog/default/blog-tags-facebook-038.json",62511],"03c430e6":[()=>n.e(2407).then(n.bind(n,24168)),"@site/docs/user-guides/btc-staking-testnet/finality-providers/overview.md",24168],"04327b46":[()=>n.e(174).then(n.bind(n,6840)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_delegation.md",6840],"05ac45e4":[()=>n.e(3309).then(n.bind(n,61368)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_crisis/Babylond_tx_crisis_invariant-broken.md",61368],"064d5749":[()=>n.e(886).then(n.bind(n,75064)),"@site/docs/faq/overview.md",75064],"0829dae6":[()=>n.e(6348).then(n.bind(n,27276)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_next-sequence-receive.md",27276],"091274c2":[()=>n.e(7767).then(n.bind(n,38256)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_params.md",38256],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,85010,19)),"~blog/default/blog-tags-facebook-038-list.json",85010],"09d0d5ad":[()=>n.e(7034).then(n.bind(n,67349)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_redelegation-from.md",67349],"09ed871c":[()=>n.e(4705).then(n.bind(n,31693)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_evidence.md",31693],"0a4d6b8a":[()=>n.e(7679).then(n.bind(n,2552)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_bank.md",2552],"0a55688e":[()=>n.e(813).then(n.bind(n,63369)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/Babylond_tx_ibc_channel.md",63369],"0b933ae3":[()=>n.e(1845).then(n.bind(n,63855)),"@site/docs/rpc-gateway/epoching/epochinfomod.md",63855],"0e297078":[()=>n.e(9454).then(n.bind(n,72357)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/Babylond_query_slashing_params.md",72357],"0e2e2b9f":[()=>n.e(7870).then(n.bind(n,26847)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_validator.md",26847],"0f0ac7e6":[()=>Promise.all([n.e(532),n.e(99)]).then(n.bind(n,91058)),"@site/docs/user-guides/btc-staking-testnet/overview.md",91058],"0f8da14f":[()=>n.e(4417).then(n.bind(n,63837)),"@site/docs/rpc-gateway/epoching/delegationlifecycle.md",63837],"0fe40e95":[()=>n.e(2715).then(n.bind(n,36649)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_delegations-to.md",36649],"1033b0d6":[()=>n.e(5979).then(n.bind(n,53597)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/Babylond_tx_checkpointing_create-validator.md",53597],"1210801f":[()=>n.e(2378).then(n.bind(n,81727)),"@site/docs/cli/babylond/keys/babylondkeysrename.md",81727],"129830a0":[()=>n.e(5523).then(n.bind(n,81283)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_deposit.md",81283],"131bb82e":[()=>n.e(3404).then(n.bind(n,88357)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_mint/Babylond_query_mint_params.md",88357],"1332f989":[()=>n.e(7495).then(n.bind(n,21483)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_tendermint-validator-set.md",21483],"13932ee9":[()=>n.e(6689).then(n.bind(n,48222)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/Babylond_query_slashing_signing-info.md",48222],"13a1fbb0":[()=>n.e(3765).then(n.bind(n,68566)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_encode.md",68566],"1606a73f":[()=>n.e(9602).then(n.t.bind(n,18821,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-redoc/grpc/redocApiLayoutV1-grpc.json",18821],17896441:[()=>Promise.all([n.e(532),n.e(210),n.e(7918)]).then(n.bind(n,99055)),"@theme/DocItem",99055],"179f4fba":[()=>n.e(6040).then(n.bind(n,79615)),"@site/docs/cli/babylond/debug/babylonddebugaddr.md",79615],"1877a045":[()=>n.e(7013).then(n.bind(n,29118)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_channels.md",29118],"191a15fc":[()=>n.e(1660).then(n.bind(n,30009)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_redelegation.md",30009],"1a79e3e4":[()=>n.e(2283).then(n.bind(n,56308)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_edit-validator.md",56308],"1a9b9ae5":[()=>Promise.all([n.e(532),n.e(2843)]).then(n.bind(n,95949)),"@site/docs/developer-guides/overview.md",95949],"1be4d91a":[()=>n.e(7958).then(n.bind(n,63750)),"@site/docs/rpc-gateway/epoching/epoch.md",63750],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,58818)),"@theme/DocPage",58818],"1c456eaf":[()=>n.e(2850).then(n.bind(n,54372)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/Babylond_tx_distribution_fund-community-pool.md",54372],"1c4943bb":[()=>n.e(4644).then(n.bind(n,94956)),"@site/docs/developer-guides/modules/btclightclient.md",94956],"1cce00e2":[()=>n.e(8584).then(n.bind(n,85734)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitment.md",85734],"1cce0a0c":[()=>n.e(7763).then(n.bind(n,26822)),"@site/docs/rpc-gateway/btclightclient/overview.md",26822],"1d3a1682":[()=>n.e(5292).then(n.bind(n,45442)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/Babylond_query_upgrade_module_versions.md",45442],"1f391b9e":[()=>Promise.all([n.e(532),n.e(210),n.e(3085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],"20e5f862":[()=>n.e(118).then(n.bind(n,26663)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_pool.md",26663],"21f3b83d":[()=>n.e(9550).then(n.bind(n,72153)),"@site/docs/cli/babylond/Babylond_start.md",72153],"247d6260":[()=>n.e(983).then(n.bind(n,3659)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_bank.md",3659],"254e5e7d":[()=>n.e(819).then(n.bind(n,3375)),"@site/docs/rpc-gateway/btccheckpoint/params.md",3375],"27253e58":[()=>n.e(8988).then(n.bind(n,80575)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_btccheckpoint.md",80575],"27b63e1d":[()=>n.e(8218).then(n.bind(n,93366)),"@site/docs/rpc-gateway/epoching/currentepoch.md",93366],29178982:[()=>n.e(1254).then(n.bind(n,91453)),"@site/docs/introduction/babylon-overview.md",91453],"292c00bc":[()=>n.e(1935).then(n.bind(n,99929)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/Babylond_tx_distribution_set-withdraw-addr.md",99929],"2b59cf14":[()=>n.e(1534).then(n.bind(n,86591)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/Babylond_tx_epoching_unbond.md",86591],"2bd00f93":[()=>n.e(9884).then(n.bind(n,14128)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/Babylond_tx_distribution_withdraw-all-rewards.md",14128],"2c6ce77d":[()=>n.e(209).then(n.bind(n,52832)),"@site/docs/user-guides/installation.md",52832],"2c795bdf":[()=>n.e(808).then(n.bind(n,49964)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/Babylond_tx_ibc_client_update.md",49964],"2caec398":[()=>n.e(1437).then(n.bind(n,57839)),"@site/docs/cli/babylond/Babylond_tendermint.md",57839],"2e9ab8dd":[()=>n.e(9170).then(n.bind(n,30980)),"@site/docs/rpc-gateway/checkpointing/rawcheckpoint.md",30980],"2eb7da4f":[()=>n.e(2907).then(n.bind(n,7414)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_vote.md",7414],"2fb40881":[()=>n.e(4121).then(n.bind(n,43802)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_main-chain.md",43802],"2fe0f9d4":[()=>n.e(9954).then(n.bind(n,48720)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/Babylond_tx_epoching_delegate.md",48720],"30a24c52":[()=>n.e(453).then(n.t.bind(n,98605,19)),"~blog/default/blog-tags-hello-039.json",98605],"30bab282":[()=>n.e(1029).then(n.bind(n,80990)),"@site/docs/cli/babylond/keys/babylondkeysimport.md",80990],"3157d042":[()=>n.e(6612).then(n.bind(n,80071)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_deposits.md",80071],"32e9a234":[()=>n.e(5034).then(n.bind(n,5952)),"@site/docs/cli/babylond/babylondconfig.md",5952],"337c891c":[()=>n.e(317).then(n.bind(n,47453)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_tx.md",47453],"3428c9c5":[()=>n.e(8604).then(n.bind(n,12730)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_delegate.md",12730],"344ec060":[()=>n.e(632).then(n.bind(n,6437)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-states.md",6437],"34555ecd":[()=>n.e(6236).then(n.bind(n,54589)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade.md",54589],"34aaa592":[()=>n.e(9583).then(n.bind(n,72179)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_params.md",72179],"35376bb6":[()=>n.e(8137).then(n.bind(n,95913)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_module_account.md",95913],"355c55a7":[()=>n.e(2623).then(n.bind(n,57816)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_vote.md",57816],"367a652a":[()=>n.e(8407).then(n.bind(n,72463)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/Babylond_query_freegrant_grants-by-granter.md",72463],"36d51805":[()=>n.e(3004).then(n.bind(n,45428)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/Babylond_query_btccheckpoint_params.md",45428],"37fc00db":[()=>n.e(200).then(n.bind(n,15496)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking.md",15496],"393be207":[()=>n.e(7414).then(n.bind(n,53123)),"@site/src/pages/markdown-page.md",53123],"3968a613":[()=>n.e(1850).then(n.bind(n,83870)),"@site/docs/rpc-gateway/checkpointing/rawcheckpointliststatus.md",83870],"39d5844c":[()=>n.e(6142).then(n.bind(n,17302)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_escrow-address.md",17302],"3a26d8c9":[()=>n.e(7435).then(n.bind(n,54446)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_hashes.md",54446],"3c9ae73c":[()=>n.e(2639).then(n.bind(n,71329)),"@site/docs/user-guides/btc-staking-testnet/getting-funds.md",71329],"3e16bd3c":[()=>n.e(8920).then(n.bind(n,70493)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_slashing/Babylond_tx_slashing_unjail.md",70493],"3f17b17d":[()=>n.e(8577).then(n.bind(n,59664)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_redelegate.md",59664],"3f490425":[()=>n.e(9229).then(n.bind(n,99507)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/Babylond_tx_bank_multi-send.md",99507],"40efbf63":[()=>n.e(9067).then(n.bind(n,70112)),"@site/docs/cli/babylond/debug/babylonddebug.md",70112],"412d8407":[()=>n.e(6844).then(n.bind(n,37431)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/Babylond_tx_distribution_withdraw-rewards.md",37431],"4182ceb5":[()=>n.e(8207).then(n.bind(n,89354)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/Babylond_tx_gov_submit-legacy-proposal_community.md",89354],"43489d6a":[()=>n.e(7977).then(n.bind(n,52879)),"@site/docs/rpc-gateway/epoching/epochmsgs.md",52879],"43574cdf":[()=>n.e(2433).then(n.bind(n,85084)),"@site/docs/developer-guides/vigilantes/submitter.md",85084],"4359d2bb":[()=>n.e(5445).then(n.bind(n,68672)),"@site/docs/rpc-gateway/btclightclient/tip.md",68672],44460978:[()=>n.e(5502).then(n.bind(n,43303)),"@site/docs/rpc-gateway/checkpointing/overview.md",43303],"4573be6e":[()=>n.e(2795).then(n.bind(n,21325)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_sign.md",21325],"464ad3b9":[()=>n.e(2790).then(n.bind(n,98370)),"@site/docs/cli/babylond/keys/babylondkeyslist.md",98370],"477abf25":[()=>n.e(4678).then(n.bind(n,33994)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_block.md",33994],"48ac78cb":[()=>n.e(1849).then(n.bind(n,24980)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_community-pool.md",24980],"4ae7943b":[()=>n.e(2920).then(n.t.bind(n,42842,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-redoc/grpc/plugin-route-context-module-100.json",42842],"4c92b59c":[()=>n.e(3506).then(n.bind(n,42259)),"@site/docs/rpc-gateway/btclightclient/header.md",42259],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,50499,19)),"~blog/default/blog-tags-hola-ea2-list.json",50499],"4d89e75c":[()=>n.e(3015).then(n.bind(n,38184)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_epoching/Babylond_query_epoching_params.md",38184],"4dd23946":[()=>n.e(8172).then(n.bind(n,66040)),"@site/docs/user-guides/testnet4.md",66040],"4e214121":[()=>n.e(9869).then(n.bind(n,66479)),"@site/docs/rpc-gateway/btccheckpoint/overview.md",66479],"50715d75":[()=>n.e(2081).then(n.bind(n,67134)),"@site/docs/developer-guides/modules/reporter.md",67134],"514f95a4":[()=>n.e(8707).then(n.bind(n,23640)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint.md",23640],"518fb95a":[()=>n.e(7208).then(n.bind(n,95663)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/Babylond_query_freegrant_grant.md",95663],"52b51599":[()=>n.e(3243).then(n.bind(n,87405)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_deposit.md",87405],53394050:[()=>n.e(2636).then(n.bind(n,11226)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/Babylond_tx_checkpointing_submit.md",11226],"539f07f8":[()=>n.e(9367).then(n.bind(n,75218)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/Babylond_tx_ibc_client_upgrade.md",75218],"53c3e127":[()=>n.e(7595).then(n.bind(n,60783)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state.md",60783],"564b63fe":[()=>n.e(5782).then(n.bind(n,45055)),"@site/docs/rpc-gateway/btclightclient/mainchain.md",45055],"57c6c789":[()=>n.e(1794).then(n.bind(n,58358)),"@site/docs/cli/babylond/debug/babylonddebugrawbytes.md",58358],"585e22ec":[()=>n.e(3645).then(n.bind(n,58954)),"@site/docs/rpc-gateway/epoching/validatorlifecycle.md",58954],"585f616c":[()=>n.e(9809).then(n.bind(n,59793)),"@site/docs/cli/babylond/Babylond_tx.md",59793],59362658:[()=>n.e(2267).then(n.bind(n,88642)),"@site/blog/2021-08-01-mdx-blog-post.mdx",88642],"5ae584b9":[()=>n.e(6036).then(n.bind(n,51201)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_draft-proposal.md",51201],"5b0c3766":[()=>n.e(3574).then(n.bind(n,45295)),"@site/docs/cli/babylond/keys/babylondkeysdelete.md",45295],"5dc50702":[()=>n.e(669).then(n.bind(n,31551)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint.md",31551],"5e700ccf":[()=>n.e(1052).then(n.bind(n,35947)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_end.md",35947],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f3a7ce3":[()=>n.e(5289).then(n.bind(n,64226)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_status.md",64226],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,84545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",84545],"619472db":[()=>n.e(2463).then(n.bind(n,89556)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/Babylond_tx_epoching_redelegate.md",89556],"6201f6e2":[()=>n.e(5390).then(n.bind(n,59462)),"@site/docs/cli/babylond/keys/babylondkeys.md",59462],"6219935b":[()=>n.e(1480).then(n.bind(n,38748)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_bank/Babylond_query_bank_total.md",38748],62778379:[()=>n.e(6352).then(n.bind(n,89787)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_proposals.md",89787],"62e943d2":[()=>n.e(5949).then(n.bind(n,48263)),"@site/docs/developer-guides/vigilantes/reporter.md",48263],"644dbebd":[()=>n.e(4539).then(n.bind(n,1993)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution.md",1993],"650867e1":[()=>n.e(8122).then(n.bind(n,51698)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_address_by_acc_num.md",51698],"653cb0a3":[()=>n.e(8944).then(n.bind(n,75766)),"@site/docs/introduction/btc-staking.md",75766],"6577c18f":[()=>n.e(4939).then(n.bind(n,63800)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_multi-sign.md",63800],"6608bb89":[()=>n.e(3279).then(n.bind(n,29047)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_zoneconcierge/Babylond_query_zoneconcierge_params.md",29047],66406991:[()=>n.e(110).then(n.t.bind(n,70711,19)),"~blog/default/blog-tags-hello-039-list.json",70711],"66acfe3f":[()=>n.e(4594).then(n.bind(n,79252)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/Babylond_query_btccheckpoint_epoch_submissions.md",79252],"6756309a":[()=>n.e(2138).then(n.bind(n,94421)),"@site/docs/user-guides/btc-staking-testnet/become-vigilante.md",94421],"6875c492":[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(8610)]).then(n.bind(n,41714)),"@theme/BlogTagsPostsPage",41714],"69c45431":[()=>n.e(6024).then(n.bind(n,17652)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc.md",17652],"69e1f829":[()=>n.e(8573).then(n.bind(n,25617)),"@site/docs/cli/babylond/keys/babylondkeysdd.md",25617],"6b052a70":[()=>n.e(341).then(n.bind(n,67033)),"@site/docs/rpc-gateway/btclightclient/contains.md",67033],"6b7a0e14":[()=>n.e(3481).then(n.bind(n,32654)),"@site/docs/developer-guides/modules/submitter.md",32654],"6bde4b50":[()=>n.e(2806).then(n.bind(n,50437)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer.md",50437],"6be0f918":[()=>n.e(8012).then(n.bind(n,27347)),"@site/docs/developer-guides/modules/zoneconcierge.md",27347],"6c9df304":[()=>n.e(841).then(n.bind(n,74769)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_connections.md",74769],"6da40f1c":[()=>n.e(3948).then(n.bind(n,33737)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_authz.md",33737],"6dc00964":[()=>n.e(3578).then(n.bind(n,19229)),"@site/docs/rpc-gateway/btccheckpoint/epochnum.md",19229],"717a57ce":[()=>n.e(1756).then(n.bind(n,57461)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_epoching.md",57461],"723ec160":[()=>n.e(3846).then(n.bind(n,63206)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-acks.md",63206],"724412d8":[()=>n.e(3677).then(n.bind(n,37887)),"@site/docs/cli/babylond/Babylond_status.md",37887],"72b5b2cd":[()=>n.e(7131).then(n.bind(n,39064)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitments.md",39064],"73664a40":[()=>n.e(3514).then(n.bind(n,1976)),"@site/blog/2019-05-29-long-blog-post.md",1976],"744623d8":[()=>n.e(4021).then(n.bind(n,46122)),"@site/docs/user-guides/btc-staking-testnet/setup-node.md",46122],"74dba243":[()=>n.e(6553).then(n.bind(n,24539)),"@site/docs/cli/babylond/BabylondQuery/Babylon_query_ibc.md",24539],"754b7ab8":[()=>n.e(5465).then(n.bind(n,47280)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_txs.md",47280],"7616f23a":[()=>Promise.all([n.e(532),n.e(2247)]).then(n.bind(n,60770)),"@site/docs/introduction/overview.md",60770],"7661071f":[()=>n.e(9642).then(n.bind(n,36911)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",36911],"76ae80a3":[()=>n.e(1290).then(n.bind(n,86029)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_mint.md",86029],"76c99db7":[()=>n.e(1082).then(n.bind(n,3174)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_validators.md",3174],"783b9dc0":[()=>n.e(8514).then(n.bind(n,98034)),"@site/docs/cli/babylond/preparegenesis.md",98034],"78d4fe60":[()=>n.e(1409).then(n.bind(n,68640)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/Babylond_tx_gov_submit-legacy-proposal_software-upgrade.md",68640],"7b379542":[()=>n.e(5936).then(n.bind(n,23196)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/Babylond_query_upgrade_plan.md",23196],"7b93a134":[()=>n.e(477).then(n.t.bind(n,15745,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"7c29905b":[()=>n.e(8554).then(n.bind(n,20092)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/Babylond_tx_authz_exec.md",20092],"7c2f8619":[()=>n.e(3889).then(n.bind(n,20170)),"@site/docs/cli/babylond/keys/babylondkeysshow.md",20170],"7c3b5472":[()=>n.e(5466).then(n.bind(n,23055)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-ack.md",23055],"7e8f1375":[()=>n.e(6507).then(n.bind(n,74766)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_params.md",74766],"7f97ed30":[()=>n.e(5525).then(n.bind(n,26560)),"@site/docs/cli/babylond/Babylond_validate-genesis.md",26560],"8096b0fb":[()=>n.e(4344).then(n.bind(n,21577)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_end.md",21577],"81489a1c":[()=>n.e(8136).then(n.bind(n,63714)),"@site/docs/rpc-gateway/zcconcierge/params.md",63714],"814f3328":[()=>n.e(2535).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"8202da25":[()=>n.e(1906).then(n.bind(n,33167)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_unbounding-delegations-from.md",33167],"82266c47":[()=>n.e(2453).then(n.bind(n,4767)),"@site/docs/cli/babylond/Babylond_tx/Babylon_tx_decode.md",4767],83724283:[()=>n.e(6842).then(n.bind(n,88829)),"@site/docs/user-guides/btc-staking-testnet/integrate.md",88829],"842431f6":[()=>n.e(7287).then(n.bind(n,50004)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-packets.md",50004],"8577035f":[()=>n.e(9509).then(n.bind(n,94251)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-receipt.md",94251],"857ddae8":[()=>n.e(4081).then(n.bind(n,81794)),"@site/docs/developer-guides/grpcrestapi.md",81794],"8717b14a":[()=>n.e(948).then(n.bind(n,63352)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",63352],"87a5a85d":[()=>n.e(1025).then(n.bind(n,4637)),"@site/docs/cli/babylond/babylondgentx.md",4637],"88023c77":[()=>n.e(5391).then(n.bind(n,14353)),"@site/docs/cli/babylond/debug/babylonddebugpubkeyraw.md",14353],"8864572c":[()=>n.e(1758).then(n.bind(n,48817)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_btclightclient/Babylond_tx_btclightclient_insert-header.md",48817],"88f54128":[()=>n.e(9266).then(n.bind(n,40511)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer/Babylond_tx_ibc-transfer_transfer.md",40511],"897edd02":[()=>n.e(2495).then(n.bind(n,61465)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_unbounding-delegation.md",61465],"89ee7fc5":[()=>n.e(6523).then(n.bind(n,82277)),"@site/docs/user-guides/btc-staking-testnet/network-information.md",82277],"8a79d444":[()=>n.e(248).then(n.bind(n,10932)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_evidence.md",10932],"8b71fcc3":[()=>Promise.all([n.e(532),n.e(880)]).then(n.bind(n,66710)),"@site/docs/developer-guides/modules/overview.md",66710],"8bde4836":[()=>n.e(7204).then(n.bind(n,67539)),"@site/docs/cli/babylond/Babylond_rollback.md",67539],"8bf43321":[()=>n.e(5116).then(n.bind(n,6228)),"@site/docs/cli/babylond/keys/babylondkeysparse.md",6228],"8c01dac4":[()=>n.e(6704).then(n.bind(n,48866)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_client-state.md",48866],"8c5e4a47":[()=>n.e(4425).then(n.bind(n,57544)),"@site/docs/developer-guides/modules/epoching.md",57544],"8ccb9270":[()=>n.e(8238).then(n.bind(n,83786)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_sign/Babylond_tx_sign-batch.md",83786],"8d2b3928":[()=>n.e(8664).then(n.bind(n,5619)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_weighted-vote.md",5619],"8d94e231":[()=>n.e(9223).then(n.bind(n,59196)),"@site/docs/cli/babylond/migrate.md",59196],"8d9badde":[()=>n.e(6213).then(n.bind(n,69217)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_submit-legacy-proposal.md",69217],"8db0ce6c":[()=>n.e(1078).then(n.bind(n,39319)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_version.md",39319],"919f1740":[()=>n.e(6782).then(n.bind(n,46963)),"@site/docs/rpc-gateway/epoching/params.md",46963],"925b3f96":[()=>n.e(9003).then(n.bind(n,8856)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",8856],"927eb449":[()=>n.e(4831).then(n.bind(n,76497)),"@site/docs/user-guides/btc-staking-testnet/become-validator.md",76497],"931b1004":[()=>n.e(4952).then(n.bind(n,75127)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing.md",75127],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"93f71b78":[()=>n.e(7056).then(n.bind(n,21489)),"@site/docs/cli/babylond/Babylond_tx/Babylon_tx_authz.md",21489],"950a5e71":[()=>n.e(9864).then(n.bind(n,96855)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_cancel-unbond.md",96855],"9589a28f":[()=>n.e(4532).then(n.bind(n,36848)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state-heights.md",36848],"9755dcf3":[()=>n.e(8419).then(n.bind(n,64311)),"@site/docs/rpc-gateway/epoching/overview.md",64311],"97630d5d":[()=>n.e(7157).then(n.bind(n,12260)),"@site/docs/cli/babylond/babylond.md",12260],"97d3f65a":[()=>n.e(1253).then(n.bind(n,58746)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/Babylond_query_authz_grants_by_granter.md",58746],"996c978f":[()=>n.e(311).then(n.bind(n,84236)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_redelegations.md",84236],"99d35970":[()=>n.e(5647).then(n.bind(n,45270)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing.md",45270],"9ca9f017":[()=>n.e(7176).then(n.bind(n,30526)),"@site/docs/introduction/architecture.md",30526],"9cfe81b5":[()=>n.e(9978).then(n.bind(n,55731)),"@site/docs/cli/babylond/babylondcreategenesiskey.md",55731],"9d65994e":[()=>n.e(8320).then(n.bind(n,78310)),"@site/docs/cli/babylond/babylondaddgenesisbls.md",78310],"9e3f8eda":[()=>n.e(1548).then(n.bind(n,54881)),"@site/docs/developer-guides/modules/checkpointing.md",54881],"9e4087bc":[()=>n.e(3608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],"9f42ab4f":[()=>n.e(5920).then(n.bind(n,97252)),"@site/docs/introduction/btc-timestamping.md",97252],"9f8154fe":[()=>n.e(6376).then(n.bind(n,23429)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/Babylond_query_freegrant_grants-by-grantee.md",23429],"9fa6981a":[()=>n.e(8472).then(n.bind(n,76243)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_create-validator.md",76243],a0a8a56a:[()=>n.e(6437).then(n.bind(n,84828)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_connections.md",84828],a27c0e41:[()=>n.e(571).then(n.t.bind(n,24469,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],a36d55fe:[()=>n.e(6597).then(n.bind(n,18811)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/Babylond_tx_authz_grant.md",18811],a3e4e4c0:[()=>n.e(2538).then(n.bind(n,28186)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting.md",28186],a673db24:[()=>n.e(202).then(n.bind(n,62925)),"@site/docs/developer-guides/vigilantes/monitor.md",62925],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(3089)]).then(n.bind(n,80046)),"@theme/BlogListPage",80046],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,24863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",24863],a8c7576f:[()=>n.e(3401).then(n.bind(n,69014)),"@site/docs/rpc-gateway/btccheckpoint/submissions.md",69014],a8fe0fb3:[()=>n.e(2044).then(n.bind(n,34270)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/Babylond_tx_feegrant_grant.md",34270],a9d610a1:[()=>n.e(1820).then(n.bind(n,77644)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_validator_outstanding_rewards.md",77644],aa257079:[()=>n.e(7420).then(n.bind(n,11191)),"@site/docs/cli/babylond/Babylond_rosetta.md",11191],aae61c4f:[()=>n.e(6252).then(n.bind(n,87979)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_contains.md",87979],ab5ad7f0:[()=>n.e(8737).then(n.bind(n,94729)),"@site/docs/cli/babylond/babylondhelp.md",94729],ab92f75c:[()=>n.e(4520).then(n.bind(n,81085)),"@site/docs/cli/babylond/Babylond_version.md",81085],aba028c7:[()=>n.e(2077).then(n.bind(n,33028)),"@site/docs/cli/babylond/Babylond_query.md",33028],adcea2b6:[()=>n.e(826).then(n.bind(n,3590)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_path.md",3590],afffec68:[()=>n.e(1781).then(n.bind(n,63429)),"@site/docs/rpc-gateway/zcconcierge/overview.md",63429],b0b0c9fc:[()=>n.e(2253).then(n.bind(n,60463)),"@site/docs/developer-guides/modules/btccheckpoint.md",60463],b12935f3:[()=>n.e(5078).then(n.bind(n,84524)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/Babylond_tx_gov_submit-legacy-proposal_cancel.md",84524],b1e66850:[()=>n.e(9433).then(n.bind(n,82450)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_params.md",82450],b1fc52f3:[()=>n.e(7788).then(n.bind(n,29628)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_proposer.md",29628],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b4ee7837:[()=>n.e(4844).then(n.bind(n,22891)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/Babylond_tx_vesting_create-vesting-account.md",22891],b52b9a72:[()=>n.e(7671).then(n.bind(n,14566)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/Babylond_tx_epoching_cancel-unbond.md",14566],b5c1da6f:[()=>n.e(5308).then(n.bind(n,18953)),"@site/docs/rpc-gateway/checkpointing/rawcheckpointlistepochnum.md",18953],b69f1eb1:[()=>Promise.all([n.e(532),n.e(5821)]).then(n.bind(n,24193)),"@site/docs/user-guides/overview.md",24193],b6fccf6e:[()=>n.e(6191).then(n.bind(n,84645)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint/Babylond_query_checkpointing_raw-checkpoint_list.md",84645],b7209be1:[()=>n.e(1648).then(n.bind(n,4724)),"@site/docs/user-guides/btc-staking-testnet/deployment-overview.md",4724],b77fbdff:[()=>n.e(6988).then(n.bind(n,23583)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/Babylond_tx_authz_revoke.md",23583],b7c1d8ec:[()=>n.e(351).then(n.bind(n,22062)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_states.md",22062],b7dd37ab:[()=>n.e(8377).then(n.bind(n,72327)),"@site/docs/cli/babylond/babylondcollectgentxs.md",72327],b827fdf0:[()=>n.e(2637).then(n.bind(n,69730)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_header.md",69730],b8e92d05:[()=>n.e(3e3).then(n.bind(n,46592)),"@site/docs/cli/babylond/babylondexport.md",46592],b90b3a7e:[()=>n.e(4406).then(n.bind(n,42489)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-trace.md",42489],b9282eb2:[()=>n.e(1277).then(n.bind(n,28655)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov.md",28655],ba2a6edb:[()=>n.e(8719).then(n.bind(n,64941)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/Babylond_tx_vesting_create-permanent-locked-account.md",64941],ba40830b:[()=>n.e(5733).then(n.bind(n,38137)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_btclightclient.md",38137],bbee4615:[()=>n.e(3047).then(n.bind(n,23775)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_slashing.md",23775],bc27a0c5:[()=>n.e(2024).then(n.bind(n,2225)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/Babylond_query_authz_grants_by_grantee.md",2225],bd9adad9:[()=>n.e(5483).then(n.t.bind(n,83769,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],bf929bd0:[()=>n.e(9559).then(n.bind(n,42584)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_state.md",42584],bfd3e7b8:[()=>n.e(773).then(n.bind(n,40393)),"@site/docs/cli/babylond/debug/babylondebugpubkey.md",40393],c006e6a5:[()=>n.e(6825).then(n.bind(n,29305)),"@site/docs/user-guides/btc-staking-testnet/become-btc-staker.md",29305],c0853f72:[()=>n.e(1083).then(n.bind(n,1069)),"@site/docs/cli/babylond/keys/babylonkeysexport.md",1069],c34e7a6e:[()=>n.e(14).then(n.bind(n,6883)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_historical-info.md",6883],c408363e:[()=>n.e(7170).then(n.bind(n,38383)),"@site/docs/cli/babylond/BabylondQuery/Babylon_query_freegrant.md",38383],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,12235)),"@site/src/pages/index.js",12235],c547cdc3:[()=>n.e(6918).then(n.bind(n,64195)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_show-validator.md",64195],c8f32a9c:[()=>n.e(8068).then(n.bind(n,16049)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/Babylond_tx_feegrant_revoke.md",16049],c9037805:[()=>n.e(356).then(n.bind(n,68404)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_show-node-id.md",68404],c995526c:[()=>n.e(2425).then(n.bind(n,3181)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_module_accounts.md",3181],ca39e9bd:[()=>n.e(1565).then(n.bind(n,99893)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/Babylond_query_upgrade_applied.md",99893],ca519fe6:[()=>n.e(5680).then(n.bind(n,57252)),"@site/docs/rpc-gateway/btclightclient/containsbytes.md",57252],ca7fe314:[()=>n.e(3101).then(n.bind(n,31163)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/Babylond_tx_ibc_client_create.md",31163],caec69ce:[()=>n.e(1116).then(n.bind(n,75384)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_self-consensus-state.md",75384],ccc49370:[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(6103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cccb8c24:[()=>n.e(6283).then(n.bind(n,44728)),"@site/docs/cli/babylond/keys/babylondkeysmigrate.md",44728],d0e52832:[()=>n.e(6746).then(n.bind(n,40648)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking.md",40648],d1d1ba10:[()=>n.e(6018).then(n.bind(n,77909)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient.md",77909],d1d51956:[()=>n.e(8530).then(n.bind(n,68785)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_broadcast.md",68785],d250a8ad:[()=>n.e(609).then(n.bind(n,63381)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_tip.md",63381],d3d9a0b4:[()=>n.e(2938).then(n.bind(n,79399)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_params/Babylond_query_params_subspace.md",79399],d4165f1a:[()=>n.e(7510).then(n.bind(n,68345)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov.md",68345],d435fc59:[()=>n.e(7412).then(n.bind(n,27725)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/Babylond_query_slashing_signing-infos.md",27725],d440eb69:[()=>n.e(2574).then(n.bind(n,71775)),"@site/docs/cli/babylond/babylondaddgenesisaccount.md",71775],d48e472c:[()=>n.e(8685).then(n.bind(n,84098)),"@site/docs/rpc-gateway/btclightclient/hashes.md",84098],d4f8fd38:[()=>n.e(8106).then(n.bind(n,26234)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_bank/Babylond_query_bank_denom_metadata.md",26234],d55373a2:[()=>n.e(6125).then(n.bind(n,11892)),"@site/docs/rpc-gateway/overview.md",11892],d7a7851b:[()=>n.e(9442).then(n.bind(n,27669)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_param.md",27669],d7d4476b:[()=>n.e(5634).then(n.bind(n,67798)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_multi-sign/Babylond_tx_multi-sign-batch.md",67798],d8749342:[()=>n.e(5067).then(n.bind(n,30619)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_proposal.md",30619],d9330127:[()=>n.e(6826).then(n.bind(n,12302)),"@site/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager.md",12302],d93305d8:[()=>n.e(2040).then(n.bind(n,76178)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_validate-signatures.md",76178],d938b752:[()=>n.e(1666).then(n.bind(n,50617)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/Babylond_query_btccheckpoint_btc-height.md",50617],d9e16301:[()=>n.e(6217).then(n.bind(n,67243)),"@site/docs/support.md",67243],d9f32620:[()=>n.e(1914).then(n.bind(n,62900)),"@site/blog/2021-08-26-welcome/index.md",62900],da75e4a9:[()=>n.e(412).then(n.bind(n,42442)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_params.md",42442],daf9fae7:[()=>n.e(9982).then(n.bind(n,77249)),"@site/docs/developer-guides/modules/monitor.md",77249],db1253b6:[()=>n.e(2470).then(n.bind(n,33283)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_unsafe-reset-all.md",33283],dba3a055:[()=>n.e(4927).then(n.bind(n,40619)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection.md",40619],dd6e08d1:[()=>n.e(605).then(n.bind(n,38217)),"@site/docs/rpc-gateway/epoching/latestepochmsgs.md",38217],ddfe76eb:[()=>n.e(7427).then(n.bind(n,62001)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_params.md",62001],de8bf585:[()=>n.e(6144).then(n.bind(n,26046)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_params.md",26046],df304978:[()=>n.e(6956).then(n.bind(n,63693)),"@site/docs/rpc-gateway/btclightclient/params.md",63693],df3454d6:[()=>n.e(2405).then(n.bind(n,905)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_zoneconcierge.md",905],e05a6a08:[()=>n.e(2064).then(n.bind(n,74743)),"@site/docs/cli/babylond/cli.md",74743],e069cd4d:[()=>n.e(7227).then(n.bind(n,13279)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_mint/Babylond_query_mint_inflation.md",13279],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e1ac0c72:[()=>n.e(2720).then(n.bind(n,30684)),"@site/docs/cli/babylond/babylondinit.md",30684],e26929b5:[()=>n.e(153).then(n.bind(n,3583)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_show-address.md",3583],e273c56f:[()=>n.e(2362).then(n.bind(n,81947)),"@site/blog/2019-05-28-first-blog-post.md",81947],e4304727:[()=>n.e(8456).then(n.bind(n,57521)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_votes.md",57521],e51d6c97:[()=>n.e(5677).then(n.bind(n,74088)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_commission.md",74088],e62d0efd:[()=>n.e(8741).then(n.bind(n,4415)),"@site/docs/cli/babylond/Babylond_tendermint/Babylond_tendermint_reset-state.md",4415],e63be1c7:[()=>n.e(2649).then(n.t.bind(n,54328,19)),"/Users/hiep/Work/babylon/repos/babylonchain.github.io/.docusaurus/docusaurus-plugin-redoc/grpc/redocApiSpecV1.2-grpc.json",54328],e6a2758f:[()=>n.e(9789).then(n.bind(n,80109)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution.md",80109],e6d9f638:[()=>n.e(2063).then(n.bind(n,6559)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_rewards.md",6559],e774afe7:[()=>n.e(9335).then(n.bind(n,12187)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-hash.md",12187],e78c6cc1:[()=>n.e(1529).then(n.bind(n,40638)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer.md",40638],e8a6fe18:[()=>n.e(9166).then(n.bind(n,44297)),"@site/docs/cli/babylond/babylondcreatebls.md",44297],ee81f057:[()=>n.e(7360).then(n.bind(n,15518)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-traces.md",15518],eeb71042:[()=>n.e(5300).then(n.bind(n,82550)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching.md",82550],f0002da9:[()=>n.e(2653).then(n.bind(n,15551)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_account.md",15551],f0572a45:[()=>Promise.all([n.e(532),n.e(7021)]).then(n.bind(n,37317)),"@site/docs/developer-guides/vigilantes/overview.md",37317],f0ad3fbb:[()=>Promise.all([n.e(532),n.e(3527),n.e(8612)]).then(n.bind(n,83527)),"@theme/ApiDoc",83527],f0b52e0e:[()=>n.e(2366).then(n.bind(n,96780)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_base-header.md",96780],f0d35eb9:[()=>n.e(689).then(n.bind(n,38304)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_mint/Babylond_query_mint_annual-provisions.md",38304],f143feff:[()=>n.e(9009).then(n.bind(n,22889)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant.md",22889],f146aff7:[()=>n.e(8494).then(n.bind(n,40846)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_bank/Babylond_query_bank_balances.md",40846],f21cae60:[()=>n.e(840).then(n.bind(n,41331)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_crisis.md",41331],f25ac144:[()=>n.e(9055).then(n.bind(n,64866)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/Babylond_tx_gov_submit-legacy-proposal_param.md",64866],f25db916:[()=>n.e(3586).then(n.bind(n,61985)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_account.md",61985],f2a5e09c:[()=>n.e(1939).then(n.bind(n,24234)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/Babylond_tx_staking_unbond.md",24234],f2d8f05a:[()=>n.e(6680).then(n.bind(n,25246)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client.md",25246],f2f43978:[()=>n.e(8689).then(n.bind(n,73225)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_gov/Babylond_query_gov_tally.md",73225],f490d6fa:[()=>n.e(2228).then(n.bind(n,90314)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_unbounding-delegations.md",90314],f4f34a3a:[()=>n.e(8636).then(n.bind(n,55145)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",55145],f5f11e92:[()=>n.e(9090).then(n.bind(n,93089)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_params.md",93089],f683d94e:[()=>n.e(697).then(n.bind(n,97248)),"@site/docs/cli/babylond/keys/babylondkeysmnemonic.md",97248],f6df7c26:[()=>n.e(9936).then(n.bind(n,72453)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth/Babylond_query_auth_accounts.md",72453],f7309b79:[()=>n.e(3298).then(n.bind(n,65867)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel.md",65867],f7acca86:[()=>n.e(1284).then(n.bind(n,87176)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/Babylond_tx_vesting_create-periodic-vesting-account.md",87176],f7c1d69e:[()=>n.e(367).then(n.bind(n,60956)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/Babylond_query_distribution_slashes.md",60956],f8d6bd51:[()=>n.e(5383).then(n.bind(n,54717)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_auth.md",54717],fb6d5b68:[()=>n.e(6011).then(n.bind(n,22664)),"@site/docs/cli/babylond/Babylond_testnet.md",22664],fc99b1a5:[()=>n.e(1924).then(n.bind(n,94756)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_staking/Babylond_query_staking_delegations.md",94756],fecd3b53:[()=>n.e(2313).then(n.bind(n,97263)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants.md",97263],feda6033:[()=>n.e(8868).then(n.bind(n,29183)),"@site/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/Babylond_tx_gov_submit-proposal.md",29183],ffe593fd:[()=>n.e(3919).then(n.bind(n,37984)),"@site/docs/cli/babylond/BabylondQuery/Babylond_query_zoneconcierge.md",37984]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?o.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},o.createElement("p",null,String(t)),o.createElement("div",null,o.createElement("button",{type:"button",onClick:n},"Retry"))):a?o.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},o.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},o.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},o.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},o.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),o.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},o.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),o.createElement("circle",{cx:"22",cy:"22",r:"8"},o.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var d=n(99670),p=n(30226);function b(e,t){if("*"===e)return r()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return o.createElement(p.z,{value:{plugin:{name:"native",id:"default"}}},o.createElement(n,t))}});const i=s[`${e}-${t}`],b={},u=[],y=[],h=(0,d.Z)(i);return Object.entries(h).forEach((e=>{let[t,n]=e;const o=l[n];o&&(b[t]=o[0],u.push(o[1]),y.push(o[2]))})),r().Map({loading:c,loader:b,modules:u,webpack:()=>y,render(t,n){const r=JSON.parse(JSON.stringify(i));Object.entries(t).forEach((t=>{let[n,o]=t;const a=o.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(o).filter((e=>"default"!==e)).forEach((e=>{a[e]=o[e]}));let i=r;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const s=r.__comp;delete r.__comp;const l=r.__context;return delete r.__context,o.createElement(p.z,{value:l},o.createElement(s,(0,a.Z)({},r,n)))}})}const u=[{path:"/blog",component:b("/blog","f9d"),exact:!0},{path:"/blog/archive",component:b("/blog/archive","1aa"),exact:!0},{path:"/blog/first-blog-post",component:b("/blog/first-blog-post","d43"),exact:!0},{path:"/blog/long-blog-post",component:b("/blog/long-blog-post","2c0"),exact:!0},{path:"/blog/mdx-blog-post",component:b("/blog/mdx-blog-post","bbf"),exact:!0},{path:"/blog/tags",component:b("/blog/tags","e31"),exact:!0},{path:"/blog/tags/docusaurus",component:b("/blog/tags/docusaurus","1d5"),exact:!0},{path:"/blog/tags/facebook",component:b("/blog/tags/facebook","cc5"),exact:!0},{path:"/blog/tags/hello",component:b("/blog/tags/hello","785"),exact:!0},{path:"/blog/tags/hola",component:b("/blog/tags/hola","2f3"),exact:!0},{path:"/blog/welcome",component:b("/blog/welcome","657"),exact:!0},{path:"/docs/developer-guides/grpcrestapi",component:b("/docs/developer-guides/grpcrestapi","cba"),exact:!0},{path:"/markdown-page",component:b("/markdown-page","2f4"),exact:!0},{path:"/docs",component:b("/docs","9c8"),routes:[{path:"/docs/cli/babylond",component:b("/docs/cli/babylond","86d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_query",component:b("/docs/cli/babylond/babylond_query","b4a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_rollback",component:b("/docs/cli/babylond/babylond_rollback","ad9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_rosetta",component:b("/docs/cli/babylond/babylond_rosetta","37d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_start",component:b("/docs/cli/babylond/babylond_start","39f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_status",component:b("/docs/cli/babylond/babylond_status","018"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_tendermint",component:b("/docs/cli/babylond/babylond_tendermint","71a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_reset-state",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_reset-state","f6b"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-address",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-address","ca8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-node-id",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-node-id","814"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-validator",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-validator","133"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_unsafe-reset-all",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_unsafe-reset-all","576"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_version",component:b("/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_version","ff1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_testnet",component:b("/docs/cli/babylond/babylond_testnet","44e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_tx",component:b("/docs/cli/babylond/babylond_tx","ba2"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_authz",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_authz","be4"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_exec",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_exec","bca"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_grant",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_grant","d33"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_revoke",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_revoke","9f0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_bank",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_bank","747"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_multi-send",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_multi-send","d26"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_send",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_send","5b1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_broadcast",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_broadcast","2ce"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_btccheckpoint",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_btccheckpoint","c39"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_btclightclient",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_btclightclient","f85"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_btclightclient/babylond_tx_btclightclient_insert-header",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_btclightclient/babylond_tx_btclightclient_insert-header","0ce"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_checkpointing",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_checkpointing","b85"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_create-validator",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_create-validator","484"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_submit",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_submit","429"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_crisis",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_crisis","381"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_crisis/babylond_tx_crisis_invariant-broken",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_crisis/babylond_tx_crisis_invariant-broken","102"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_decode",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_decode","fbd"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_distribution",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_distribution","1b1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_fund-community-pool",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_fund-community-pool","bc4"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_set-withdraw-addr",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_set-withdraw-addr","7d1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-all-rewards",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-all-rewards","86e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-rewards",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-rewards","cb9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_encode",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_encode","875"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_epoching",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_epoching","ce0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_cancel-unbond",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_cancel-unbond","c31"),exact:!0},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_delegate",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_delegate","e58"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_redelegate",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_redelegate","1f7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_unbond",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_unbond","6a8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_evidence",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_evidence","00f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_feegrant",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_feegrant","7c0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_grant",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_grant","d27"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_revoke",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_revoke","58b"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_gov",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_gov","5fe"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_deposit",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_deposit","4f8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_draft-proposal",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_draft-proposal","065"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-legacy-proposal",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-legacy-proposal","634"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-proposal",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-proposal","a80"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_vote",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_vote","9be"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_weighted-vote",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_weighted-vote","dda"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_cancel",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_cancel","86d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_community",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_community","59c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_param",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_param","416"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_software",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_software","0c7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_ibc",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_ibc","72c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_ibc-transfer",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_ibc-transfer","0c1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer/babylond_tx_ibc-transfer_transfer",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer/babylond_tx_ibc-transfer_transfer","5b0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_channel",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_channel","b72"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_client",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_client","bdf"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_create",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_create","3aa"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_misbehaviour",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_misbehaviour","e96"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_update",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_update","46a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_upgrade",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_upgrade","f01"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_multi-sign",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_multi-sign","282"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_multi-sign/babylond_tx_multi-sign-batch",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_multi-sign/babylond_tx_multi-sign-batch","a30"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_sign",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_sign","8db"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_sign/babylond_tx_sign-batch",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_sign/babylond_tx_sign-batch","89a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_slashing",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_slashing","bc7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_slashing/babylond_tx_slashing_unjail",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_slashing/babylond_tx_slashing_unjail","165"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_staking",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_staking","aea"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_cancel-unbond",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_cancel-unbond","095"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_create-validator",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_create-validator","b82"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_delegate",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_delegate","137"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_edit-validator",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_edit-validator","94a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_redelegate",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_redelegate","7eb"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_unbond",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_unbond","afd"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_validate-signatures",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_validate-signatures","824"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_vesting",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_vesting","6dd"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-periodic-vesting-account",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-periodic-vesting-account","99d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-permanent-locked-account",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-permanent-locked-account","8e7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-vesting-account",component:b("/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-vesting-account","838"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/Babylond_tx/babylond_tx_zoneconcierge",component:b("/docs/cli/babylond/Babylond_tx/babylond_tx_zoneconcierge","228"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_validate-genesis",component:b("/docs/cli/babylond/babylond_validate-genesis","f07"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylond_version",component:b("/docs/cli/babylond/babylond_version","25d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondaddgenesisaccount",component:b("/docs/cli/babylond/babylondaddgenesisaccount","2b2"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondaddgenesisbls",component:b("/docs/cli/babylond/babylondaddgenesisbls","5c8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondcollectgentxs",component:b("/docs/cli/babylond/babylondcollectgentxs","464"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondconfig",component:b("/docs/cli/babylond/babylondconfig","00d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondcreatebls",component:b("/docs/cli/babylond/babylondcreatebls","2e0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondcreategenesiskey",component:b("/docs/cli/babylond/babylondcreategenesiskey","134"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondexport",component:b("/docs/cli/babylond/babylondexport","0da"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondgentx",component:b("/docs/cli/babylond/babylondgentx","559"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondhelp",component:b("/docs/cli/babylond/babylondhelp","2f2"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/babylondinit",component:b("/docs/cli/babylond/babylondinit","bd9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_account",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_account","486"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_auth",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_auth","3ff"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_account",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_account","75c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_accounts",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_accounts","44b"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_address_by_acc_num",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_address_by_acc_num","ec9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_account",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_account","4ca"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_accounts",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_accounts","d08"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_params","aae"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_authz",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_authz","246"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/babylond_query_authz_grants",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_authz/babylond_query_authz_grants","6e0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_grantee",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_grantee","cfc"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_granter",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_granter","d94"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_bank",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_bank","343"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_balances",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_balances","237"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_denom_metadata",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_denom_metadata","583"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_total",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_total","576"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_block",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_block","57c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_btccheckpoint",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_btccheckpoint","888"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_btc-height",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_btc-height","89f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_epoch_submissions",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_epoch_submissions","dc3"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_params","5f0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_btclightclient",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_btclightclient","1b7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_base-header",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_base-header","2f4"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_contains",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_contains","2e9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_hashes",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_hashes","04e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_main-chain",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_main-chain","56e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_params","3ab"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_tip",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_tip","e87"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_checkpointing",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_checkpointing","8fb"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_params","86f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_raw_checkpoint",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_raw_checkpoint","50f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint/babylond_query_checkpointing_raw-checkpoint_list",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint/babylond_query_checkpointing_raw-checkpoint_list","1b3"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_distribution",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_distribution","673"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_commission",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_commission","83f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_community-pool",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_community-pool","9b8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_params","074"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_rewards",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_rewards","f72"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_slashes",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_slashes","f25"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_validator-outstanding-rewards",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_validator-outstanding-rewards","362"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_epoching",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_epoching","b86"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_epoching/babylond_query_epoching_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_epoching/babylond_query_epoching_params","393"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_evidence",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_evidence","9c1"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_freegrant",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_freegrant","d41"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grant",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grant","ff4"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-grantee",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-grantee","9b0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-granter",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-granter","65d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_gov",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_gov","912"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposit",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposit","e10"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposits",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposits","913"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_param",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_param","dcc"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_params","8a5"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposal",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposal","67e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposals",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposals","ec7"),exact:!0},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposer",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposer","10f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_tally",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_tally","956"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_vote",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_vote","382"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_votes",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_votes","aab"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc","3dd"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel","2b3"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_channels",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_channels","b33"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_client-state",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_client-state","c6d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_connections",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_connections","764"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_end",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_end","3fb"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_next-sequence-receive",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_next-sequence-receive","e72"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-ack",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-ack","0a0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitment",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitment","1df"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitments",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitments","a1d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-receipt",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-receipt","319"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-acks",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-acks","be5"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-packets",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-packets","858"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client","8b3"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state","ca3"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state-heights",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state-heights","15f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-states",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-states","796"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_header",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_header","fb0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_params","14e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_self-consensus-state",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_self-consensus-state","c76"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_state",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_state","396"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_states",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_states","418"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_status",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_status","b62"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection","d51"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_connections",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_connections","48e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_end",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_end","c04"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_path",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_path","10e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer","ea6"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-hash",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-hash","cf7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-trace",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-trace","ff6"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-traces",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-traces","1e0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_escrow-address",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_escrow-address","eb0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_params","c25"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_mint",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_mint","d61"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_annual-provisions",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_annual-provisions","cd6"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_inflation",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_inflation","9bb"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_params","8d0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_params",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_params","4ba"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_params/babylond_query_params_subspace",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_params/babylond_query_params_subspace","e86"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_slashing",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_slashing","a39"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_params","182"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-info",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-info","e1d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-infos",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-infos","581"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_staking",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_staking","13d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegation",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegation","3a6"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations","e51"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations-to",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations-to","93b"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_historical-info",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_historical-info","c1f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_params","3e4"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_pool",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_pool","348"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation","53c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation-from",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation-from","db5"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegations",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegations","38d"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegation",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegation","58f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations","100"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations-from",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations-from","59a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validator",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validator","c91"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validators",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validators","643"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_tendermint-validator-set",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_tendermint-validator-set","4e9"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_tx",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_tx","f9f"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_txs",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_txs","57e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_upgrade",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_upgrade","06c"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_applied",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_applied","fad"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_module_versions",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_module_versions","7e8"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_plan",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_plan","59e"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/babylond_query_zoneconcierge",component:b("/docs/cli/babylond/BabylondQuery/babylond_query_zoneconcierge","234"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/BabylondQuery/Babylond_query_zoneconcierge/babylond_query_zoneconcierge_params",component:b("/docs/cli/babylond/BabylondQuery/Babylond_query_zoneconcierge/babylond_query_zoneconcierge_params","1c2"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/cli",component:b("/docs/cli/babylond/cli","349"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/debug/babylonddebug",component:b("/docs/cli/babylond/debug/babylonddebug","ad6"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/debug/babylonddebugaddr",component:b("/docs/cli/babylond/debug/babylonddebugaddr","908"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/debug/babylonddebugpubkey",component:b("/docs/cli/babylond/debug/babylonddebugpubkey","195"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/debug/babylonddebugpubkeyraw",component:b("/docs/cli/babylond/debug/babylonddebugpubkeyraw","985"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/debug/babylonddebugrawbytes",component:b("/docs/cli/babylond/debug/babylonddebugrawbytes","2cb"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeys",component:b("/docs/cli/babylond/keys/babylondkeys","533"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysdd",component:b("/docs/cli/babylond/keys/babylondkeysdd","a2a"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysdelete",component:b("/docs/cli/babylond/keys/babylondkeysdelete","3f0"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysexport",component:b("/docs/cli/babylond/keys/babylondkeysexport","e49"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysimport",component:b("/docs/cli/babylond/keys/babylondkeysimport","a16"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeyslist",component:b("/docs/cli/babylond/keys/babylondkeyslist","eaf"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysmigrate",component:b("/docs/cli/babylond/keys/babylondkeysmigrate","254"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysmnemonic",component:b("/docs/cli/babylond/keys/babylondkeysmnemonic","6e7"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysparse",component:b("/docs/cli/babylond/keys/babylondkeysparse","824"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysrename",component:b("/docs/cli/babylond/keys/babylondkeysrename","d71"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/keys/babylondkeysshow",component:b("/docs/cli/babylond/keys/babylondkeysshow","202"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/migrate",component:b("/docs/cli/babylond/migrate","516"),exact:!0,sidebar:"docs"},{path:"/docs/cli/babylond/preparegenesis",component:b("/docs/cli/babylond/preparegenesis","e80"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/grpcrestapi",component:b("/docs/developer-guides/grpcrestapi","288"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/btccheckpoint",component:b("/docs/developer-guides/modules/btccheckpoint","622"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/btclightclient",component:b("/docs/developer-guides/modules/btclightclient","44a"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/checkpointing",component:b("/docs/developer-guides/modules/checkpointing","2b3"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/epoching",component:b("/docs/developer-guides/modules/epoching","3d1"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/monitor",component:b("/docs/developer-guides/modules/monitor","5db"),exact:!0},{path:"/docs/developer-guides/modules/overview",component:b("/docs/developer-guides/modules/overview","282"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/modules/reporter",component:b("/docs/developer-guides/modules/reporter","347"),exact:!0},{path:"/docs/developer-guides/modules/submitter",component:b("/docs/developer-guides/modules/submitter","9de"),exact:!0},{path:"/docs/developer-guides/modules/zoneconcierge",component:b("/docs/developer-guides/modules/zoneconcierge","ba9"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/overview",component:b("/docs/developer-guides/overview","8e4"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/vigilantes/monitor",component:b("/docs/developer-guides/vigilantes/monitor","da1"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/vigilantes/overview",component:b("/docs/developer-guides/vigilantes/overview","bbc"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/vigilantes/reporter",component:b("/docs/developer-guides/vigilantes/reporter","224"),exact:!0,sidebar:"docs"},{path:"/docs/developer-guides/vigilantes/submitter",component:b("/docs/developer-guides/vigilantes/submitter","a0b"),exact:!0,sidebar:"docs"},{path:"/docs/faq/overview",component:b("/docs/faq/overview","bca"),exact:!0,sidebar:"docs"},{path:"/docs/introduction/architecture",component:b("/docs/introduction/architecture","1bf"),exact:!0,sidebar:"docs"},{path:"/docs/introduction/babylon-overview",component:b("/docs/introduction/babylon-overview","d8b"),exact:!0,sidebar:"docs"},{path:"/docs/introduction/btc-staking",component:b("/docs/introduction/btc-staking","cec"),exact:!0,sidebar:"docs"},{path:"/docs/introduction/btc-timestamping",component:b("/docs/introduction/btc-timestamping","d58"),exact:!0,sidebar:"docs"},{path:"/docs/introduction/overview",component:b("/docs/introduction/overview","562"),exact:!0,sidebar:"docs"},{path:"/docs/papers",component:b("/docs/papers","14d"),exact:!0,sidebar:"docs"},{path:"/docs/rpc-gateway/btccheckpoint/epochnum",component:b("/docs/rpc-gateway/btccheckpoint/epochnum","f90"),exact:!0},{path:"/docs/rpc-gateway/btccheckpoint/overview",component:b("/docs/rpc-gateway/btccheckpoint/overview","27f"),exact:!0},{path:"/docs/rpc-gateway/btccheckpoint/params",component:b("/docs/rpc-gateway/btccheckpoint/params","0ce"),exact:!0},{path:"/docs/rpc-gateway/btccheckpoint/submissions",component:b("/docs/rpc-gateway/btccheckpoint/submissions","42b"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/contains",component:b("/docs/rpc-gateway/btclightclient/contains","663"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/containsbytes",component:b("/docs/rpc-gateway/btclightclient/containsbytes","2dd"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/hashes",component:b("/docs/rpc-gateway/btclightclient/hashes","480"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/header",component:b("/docs/rpc-gateway/btclightclient/header","3b6"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/mainchain",component:b("/docs/rpc-gateway/btclightclient/mainchain","4ce"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/overview",component:b("/docs/rpc-gateway/btclightclient/overview","074"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/params",component:b("/docs/rpc-gateway/btclightclient/params","0fc"),exact:!0},{path:"/docs/rpc-gateway/btclightclient/tip",component:b("/docs/rpc-gateway/btclightclient/tip","ede"),exact:!0},{path:"/docs/rpc-gateway/checkpointing/overview",component:b("/docs/rpc-gateway/checkpointing/overview","400"),exact:!0},{path:"/docs/rpc-gateway/checkpointing/rawcheckpoint",component:b("/docs/rpc-gateway/checkpointing/rawcheckpoint","33d"),exact:!0},{path:"/docs/rpc-gateway/checkpointing/rawcheckpointlistepochnum",component:b("/docs/rpc-gateway/checkpointing/rawcheckpointlistepochnum","25e"),exact:!0},{path:"/docs/rpc-gateway/checkpointing/rawcheckpointliststatus",component:b("/docs/rpc-gateway/checkpointing/rawcheckpointliststatus","944"),exact:!0},{path:"/docs/rpc-gateway/epoching/currentepoch",component:b("/docs/rpc-gateway/epoching/currentepoch","aed"),exact:!0},{path:"/docs/rpc-gateway/epoching/delegationlifecycle",component:b("/docs/rpc-gateway/epoching/delegationlifecycle","3a5"),exact:!0},{path:"/docs/rpc-gateway/epoching/epoch",component:b("/docs/rpc-gateway/epoching/epoch","3e3"),exact:!0},{path:"/docs/rpc-gateway/epoching/epochinfomod",component:b("/docs/rpc-gateway/epoching/epochinfomod","6dd"),exact:!0},{path:"/docs/rpc-gateway/epoching/epochmsgs",component:b("/docs/rpc-gateway/epoching/epochmsgs","ebb"),exact:!0},{path:"/docs/rpc-gateway/epoching/latestepochmsgs",component:b("/docs/rpc-gateway/epoching/latestepochmsgs","8f5"),exact:!0},{path:"/docs/rpc-gateway/epoching/overview",component:b("/docs/rpc-gateway/epoching/overview","77b"),exact:!0},{path:"/docs/rpc-gateway/epoching/params",component:b("/docs/rpc-gateway/epoching/params","303"),exact:!0},{path:"/docs/rpc-gateway/epoching/validatorlifecycle",component:b("/docs/rpc-gateway/epoching/validatorlifecycle","652"),exact:!0},{path:"/docs/rpc-gateway/overview",component:b("/docs/rpc-gateway/overview","8ac"),exact:!0},{path:"/docs/rpc-gateway/zcconcierge/overview",component:b("/docs/rpc-gateway/zcconcierge/overview","545"),exact:!0},{path:"/docs/rpc-gateway/zcconcierge/params",component:b("/docs/rpc-gateway/zcconcierge/params","85d"),exact:!0},{path:"/docs/support",component:b("/docs/support","73c"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/become-btc-staker",component:b("/docs/user-guides/btc-staking-testnet/become-btc-staker","727"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/become-validator",component:b("/docs/user-guides/btc-staking-testnet/become-validator","7a5"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/become-vigilante",component:b("/docs/user-guides/btc-staking-testnet/become-vigilante","31c"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/czintegrate",component:b("/docs/user-guides/btc-staking-testnet/czintegrate","dd2"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/deployment-overview",component:b("/docs/user-guides/btc-staking-testnet/deployment-overview","77b"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager",component:b("/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager","99e"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider",component:b("/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider","7be"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/finality-providers/overview",component:b("/docs/user-guides/btc-staking-testnet/finality-providers/overview","ab9"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/getting-funds",component:b("/docs/user-guides/btc-staking-testnet/getting-funds","bf5"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/network-information",component:b("/docs/user-guides/btc-staking-testnet/network-information","2ba"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/overview",component:b("/docs/user-guides/btc-staking-testnet/overview","5cf"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/btc-staking-testnet/setup-node",component:b("/docs/user-guides/btc-staking-testnet/setup-node","d04"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/installation",component:b("/docs/user-guides/installation","74b"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/overview",component:b("/docs/user-guides/overview","587"),exact:!0,sidebar:"docs"},{path:"/docs/user-guides/testnet4",component:b("/docs/user-guides/testnet4","1a9"),exact:!0,sidebar:"docs"}]},{path:"/",component:b("/","9aa"),exact:!0},{path:"*",component:b("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var o=n(67294);const a=o.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{i(!0)}),[]),o.createElement(a.Provider,{value:n},t)}},49383:(e,t,n)=>{"use strict";var o=n(67294),a=n(73935),i=n(73727),r=n(70405),s=n(10412);const l=[n(32497),n(3310),n(18320),n(52295),n(41304),n(4750)];var c=n(723),d=n(16550),p=n(18790);function b(e){let{children:t}=e;return o.createElement(o.Fragment,null,t)}var u=n(87462),y=n(35742),h=n(52263),m=n(44996),f=n(86668),_=n(1944),g=n(94711),v=n(19727),k=n(43320),x=n(90197);function B(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,g.l)();return o.createElement(y.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return o.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),o.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function w(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,d.TH)();return e+(0,m.Z)(t)}(),i=t?`${n}${t}`:a;return o.createElement(y.Z,null,o.createElement("meta",{property:"og:url",content:i}),o.createElement("link",{rel:"canonical",href:i}))}function q(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,f.L)();return o.createElement(o.Fragment,null,o.createElement(y.Z,null,o.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),o.createElement("body",{className:v.h})),n&&o.createElement(_.d,{image:n}),o.createElement(w,null),o.createElement(B,null),o.createElement(x.Z,{tag:k.HX,locale:e}),o.createElement(y.Z,null,t.map(((e,t)=>o.createElement("meta",(0,u.Z)({key:t},e))))))}const T=new Map;function C(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,p.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var E=n(98934),S=n(58940);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o{var o;const a=(null==(o=t.default)?void 0:o[e])??t[e];return null==a?void 0:a(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const I=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,o.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1)),n=document.getElementById(e);null==n||n.scrollIntoView()}else window.scrollTo(0,0)}(n),A("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function j(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.f)(c.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class R extends o.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=s.default.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),j(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return o.createElement(I,{previousLocation:this.previousLocation,location:t},o.createElement(d.AW,{location:t,render:()=>e}))}}const P=R,L="docusaurus-base-url-issue-banner-container",D="docusaurus-base-url-issue-banner-suggestion-container",N="__DOCUSAURUS_INSERT_BASEURL_BANNER";function U(e){return`\nwindow['${N}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${N}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${L}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n

\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[N]=!1}),[]),o.createElement(o.Fragment,null,!s.default.canUseDOM&&o.createElement(y.Z,null,o.createElement("script",null,U(e))),o.createElement("div",{id:L}))}function M(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,d.TH)();return t&&n===e?o.createElement(Q,null):null}function O(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:i}}=(0,h.Z)(),r=(0,m.Z)(e),{htmlLang:s,direction:l}=i[a];return o.createElement(y.Z,null,o.createElement("html",{lang:s,dir:l}),o.createElement("title",null,t),o.createElement("meta",{property:"og:title",content:t}),o.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&o.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&o.createElement("link",{rel:"icon",href:r}))}var F=n(44763);function z(){const e=(0,p.H)(c.Z),t=(0,d.TH)();return o.createElement(F.Z,null,o.createElement(S.M,null,o.createElement(E.t,null,o.createElement(b,null,o.createElement(O,null),o.createElement(q,null),o.createElement(M,null),o.createElement(P,{location:C(t)},e)))))}var H=n(16887);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var o;if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const i=document.getElementsByTagName("head")[0]??(null==(o=document.getElementsByName("script")[0])?void 0:o.parentNode);null==i||i.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const o=new XMLHttpRequest;o.open("GET",e,!0),o.withCredentials=!0,o.onload=()=>{200===o.status?t():n()},o.send(null)}))};var G=n(99670);const K=new Set,W=new Set,V=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},$={prefetch(e){if(!(e=>!V()&&!W.has(e)&&!K.has(e))(e))return!1;K.add(e);const t=(0,p.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!V()&&!W.has(e))(e)&&(W.add(e),j(e))},Y=Object.freeze($);if(s.default.canUseDOM){window.docusaurus=Y;const e=a.hydrate;j(window.location.pathname).then((()=>{e(o.createElement(r.B6,null,o.createElement(i.VK,null,o.createElement(z,null))),document.getElementById("__docusaurus"))}))}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var o=n(67294),a=n(36809);const i=JSON.parse('{"docusaurus-theme-redoc":{"theme-redoc":{"lightTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"#ffffff"},"rightPanel":{"backgroundColor":"#303846"},"colors":{"primary":{"main":"#000000"}},"theme":{"prism":{"additionalLanguages":["scala"]}}},"darkTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"rgb(24, 25, 26)","textColor":"#f5f6f7","arrow":{"color":"#f5f6f7"}},"colors":{"text":{"primary":"#f5f6f7","secondary":"rgba(255, 255, 255, 1)"},"gray":{"50":"#FAFAFA","100":"#F5F5F5"},"border":{"dark":"#ffffff","light":"rgba(0,0,0, 0.1)"},"primary":{"main":"#000000"}},"schema":{"nestedBackground":"rgb(24, 25, 26)","typeNameColor":"rgba(255, 255, 255, 1)","typeTitleColor":"rgba(255, 255, 255, 1)"},"theme":{"prism":{"additionalLanguages":["scala"]}}},"options":{"scrollYOffset":"nav.navbar","expandSingleSchemaField":true,"menuToggle":true,"suppressWarnings":true}}},"docusaurus-plugin-redoc":{"grpc":{"url":"redocusaurus/grpc.yaml","themeId":"theme-redoc","isSpecFile":true,"spec":{"openapi":"3.0.0","info":{"title":"Babylon - gRPC Gateway docs","description":"A REST interface for state queries","version":"1.0.0"},"servers":[{"url":"http://api.testnet.babylonchain.io/","description":"Test Server"}],"tags":[{"name":"BTCCheckpoint","description":"The REST API for the BTC Checkpoint RPC Gateway module."},{"name":"BTCLightClient","description":"The REST API for the BTC Light Client RPC Gateway module."},{"name":"Epoching","description":"The REST API for the Epoching RPC Gateway module."},{"name":"Checkpointing","description":"The REST API for the Checkpointing RPC Gateway module."},{"name":"ZoneConcierge","description":"The REST API for the Zone Concierge RPC Gateway module."}],"paths":{"/babylon/btccheckpoint/v1":{"get":{"summary":"BtcCheckpointsInfo","description":"BtcCheckpointsInfo returns checkpoint info for a range of epochs","operationId":"BtcCheckpointsInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info_list":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","title":"epoch number of this checkpoint","example":"115"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsInfoResponse is response type for the Query/BtcCheckpointsInfo RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"If the start_epoch parameter number is larger than the end_epoch parameter number.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"StartEpoch (1234567) should not be larger than EndEpoch (235678)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btccheckpoint/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcCheckpointParams","tags":["BTCCheckpoint"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","example":"6","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","example":"100","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btccheckpoint/v1/{epoch_num}":{"get":{"summary":"BtcCheckpointInfo","description":"BtcCheckpointInfo returns checkpoint info for a given epoch","operationId":"BtcCheckpointInfo","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"info":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115","title":"epoch number of this checkpoint"},"earliest_btc_block_number":{"type":"string","format":"uint64","example":"775253","title":"height of earliest BTC block that includes this checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte","example":"fPDeiqchjmGLeDW2sWZVAUsAUJkx0AEAAAAAAAAAAAA=","title":"hash of earliest BTC block that includes this checkpoint"},"vigilante_address_list":{"type":"array","items":{"type":"object","properties":{"submitter":{"type":"string","format":"byte","example":"Zq3rFgfbY2UXHCj5PsILBQXev+E=","description":"TODO: this could probably be better typed\\nAddress of the checkpoint submitter, extracted from the checkpoint itself."},"reporter":{"type":"string","format":"byte","example":"NzTm1XLg234H6RTTQiqAx2Auxq8=","title":"Address of the reporter which reported the submissions, calculated from\\nsubmission message MsgInsertBTCSpvProof itself"}}},"title":"list of vigilantes\' addresses"}}}},"title":"QueryBtcCheckpointInfoResponse is response type for the Query/BtcCheckpointInfo RPC method"}}}},"400":{"description":"The epoch_num parameter is filled with an incorrect value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"babylonddev123\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"The epoch_num is correct and filled with the epoch_num that has not yet submitted.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"checkpoint for given epoch not yet submitted"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which the earliest checkpointing btc height is requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/btccheckpoint/v1/{epoch_num}/submissions":{"get":{"summary":"submissions","operationId":"EpochSubmissions","tags":["BTCCheckpoint"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btccheckpoint/v1/127778958/submissions?&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"Number of epoch for which submissions are requested","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/baseheader":{"get":{"summary":"baseheader","operationId":"BaseHeader","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/contains":{"get":{"summary":"contains","description":"Contains checks whether a hash is maintained by the module.","operationId":"Contains","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/contains?hash=qwrrasf345df\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean","example":false}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/containsBytes":{"get":{"summary":"containsBytes","description":"ContainsBytes is a temporary method that\\nchecks whether a hash is maintained by the module.\\nSee discussion at https://github.com/babylonchain/babylon/pull/132\\nfor more details.","operationId":"ContainsBytes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/containsBytes?hash=babylond345d32f\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."}}}},"400":{"description":"Incorrect hash parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"illegal base64 data at input byte 4"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect hash value length.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":13},"message":{"type":"string","example":"grpc: error unmarshalling request: invalid header hash length)"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"hash","in":"query","required":false,"schema":{"type":"string","format":"byte"}}]}},"/babylon/btclightclient/v1/hashes":{"get":{"summary":"hashes","description":"Hashes retrieves the hashes maintained by the module.","operationId":"Hashes","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/hashes?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte","example":"00000000000000000002f03a87a968d5acb5dcba6a6fc30f88b4ff0a606067ff"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"/rYA2+XfjvvRJfZecHvmyEBTYe+RNAMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"479","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/mainchain":{"get":{"summary":"mainchain","description":"MainChain returns the canonical chain","operationId":"MainChain","tags":["BTCLightClient"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/btclightclient/v1/mainchain?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"00a0de299f62932875d8c8875778145a45770a2d03e0bd5dfc57020000000000000000007b0e60ce7287d210e9ee90269204380da52d882ece6039bc175ddc70b17e5dca3d16dc6320270717cb4e65d5"},"hash":{"type":"string","format":"byte","example":"0000000000000000000622d71e81bf6139bf942f467070bb63d7abfc8a5d6afc"},"height":{"type":"string","format":"uint64","example":"774766"},"work":{"type":"string","format":"byte","example":"169013589908578097467284"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"u277crzObWQ66LPQUl0KiFrWuGandwMAAAAAAAAAAAA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/btclightclient/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"BtcLightClientParams","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/btclightclient/v1/tip":{"get":{"summary":"tip","description":"Tip return best header on canonical chain","operationId":"Tip","tags":["BTCLightClient"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte","example":"0020f930ba20ab1335b4f8e3da5f6363a7de1bccc4e496af9d1a0400000000000000000094328003ec2843c14a05b4b80646f802e939d11b6c3f04d6c0d1b856cf87bf818c92e0632027071757480fef"},"hash":{"type":"string","format":"byte","example":"00000000000000000005d4ef7e0d01595c37ac1d64dc30d88b0620ec4ed36754"},"height":{"type":"string","format":"uint64","example":"775246"},"work":{"type":"string","format":"byte","example":"81295536746026064881763604"}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/current_epoch":{"get":{"summary":"current_epoch","description":"CurrentEpoch queries the current epoch","operationId":"CurrentEpoch","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","example":"114","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","example":"22800","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/delegation_lifecycle/{del_addr}":{"get":{"summary":"delegation_lifecycle","description":"DelegationLifecycle queries the lifecycle of a given delegation","operationId":"DelegationLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/delegation_lifecycle/qeewr6778fnjgdth\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect del_addr value/ del_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty del_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"del_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/epoching/v1/epochs":{"get":{"summary":"epochs_info","description":"EpochsInfo queries the metadata of epochs in a given range, depending on the\\nparameters in the pagination request. Th main use case will be querying the\\nlatest epochs in time order.","operationId":"EpochsInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs?start_epoch=babylond12345&end_epoch=babylond6789&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"start_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"end_epoch","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}":{"get":{"summary":"epoch_info","description":"EpochInfo queries the information of a given epoch","operationId":"EpochInfo","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"115"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"22801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}},"app_hash_root":{"type":"string","format":"byte","example":"+IuK0VhAV5gAGC3K5anc0Eu3CENK09EAmfqr8jwayvQ=","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23000"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:32.498348802Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"86DDETe2pi0bn/mc45dTHIYvDzGzHbA0pwTFKvVYEMs="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"6115O5mNjo+4fxew/8V7SEOA3UukNz09j3X5CDvuNpA="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"N9WEnMPRR9cD4TF9zl08NvzVwARCV1Q7mME0Fj5QU+w="},"data_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"LlADBIcvO47i8MkZucvY3gn9H/piyhyxlWkhXjrnnpI="},"last_results_hash":{"type":"string","format":"byte","example":"TAzoev4wAFfHvFnXAOmfZ4QNJ5Izt3Jr5+OSHQdHYkU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}}}}}}}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/messages":{"get":{"summary":"epoch_msgs","description":"EpochMsgs queries the messages of a given epoch","operationId":"EpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/messages?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num is the number of epoch of the requested msg queue","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs/{epoch_num}/validator_set":{"get":{"summary":"epoch_val_set","description":"EpochValSet queries the validator set of a given epoch","operationId":"EpochValSet","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs/127767843567/validator_set?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","example":"rKAsdLKhYBeTAF5mvhdEiv+b+Yo=\\"","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","example":"100","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64","example":"500"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","example":"p8cs12mx4H7TeOf4fvPyKWqk7pA=","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"5","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}}}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/epochs:latest/messages":{"get":{"summary":"latest_epoch_msgs","description":"LatestEpochMsgs queries the messages within a given number of most recent epochs","operationId":"LatestEpochMsgs","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/epochs:latest/messages?end_epoch=babylond12345&epoch_count=5&pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\nExample 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\nExample 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"end_epoch","description":"end_epoch is the number of the last epoch to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"epoch_count","description":"epoch_count is the number of epochs to query.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/epoching/v1/params":{"get":{"summary":"params","description":"Params queries the parameters of the module.","operationId":"EpochingParams","tags":["Epoching"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","example":"200","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/epoching/v1/validator_lifecycle/{val_addr}":{"get":{"summary":"validator_lifecycle","description":"ValidatorLifecycle queries the lifecycle of a given validator","operationId":"ValidatorLifecycle","tags":["Epoching"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/epoching/v1/validator_lifecycle/babylonddev877876\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64","example":"0"},"block_time":{"type":"string","format":"date-time","example":"2023-02-03T12:45:02Z"}}}}}}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect val_addr value/ val_addr parameter lenght value","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"decoding bech32 failed: invalid incomplete group"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty val_addr parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"val_addr","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/checkpointing/v1/bls_public_keys/{epoch_num}":{"get":{"summary":"bls_public_key_list","description":"BlsPublicKeyList queries a list of bls public keys of the validators at a given epoch number.","operationId":"BlsPublicKeyList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/bls_public_keys/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper15lrje4mfk8s8a5mculu8aulj9942fm5sq7uyvn"},"bls_pub_key":{"type":"string","format":"byte","example":"j7kRClBlblZEuXWhsEKZC6R1bFPOvMk/WeWPWiDANDjjKDN1wg7Aej+UC63HOx3LBIFKsfVVfUrrfOSlo4noLF3gblqOC5i6lUGhO8WRaB3F3NCLqKBl17h2T46U/UqU"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","example":null,"description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","example":"0","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried bls public keys","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/checkpointing/v1/epochs/{epoch_num}/status":{"get":{"summary":"epoch_status","description":"EpochStatus queries the status of the checkpoint at a given epoch","operationId":"EpochStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs/12777895643/status\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace epoching code 3: the epoch number is not known in DB"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/epochs:status_count":{"get":{"summary":"recent_epoch_status_count","description":"RecentEpochStatusCount queries the number of epochs with each status in recent epochs","operationId":"RecentEpochStatusCount","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/epochs:status_count?epoch_count=12\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64","example":"115"},"epoch_count":{"type":"string","format":"uint64","example":"12"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}},"parameters":[{"name":"epoch_count","description":"epoch_count is the number of the most recent epochs to include in the aggregation.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/last_raw_checkpoint/{status}":{"get":{"summary":"last_checkpoint_with_status","description":"LastCheckpointWithStatus queries the last checkpoint with a given status or a more matured status","operationId":"LastCheckpointWithStatus","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/last_raw_checkpoint/CKPT_STATUS_SUBMITTED\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}}}}},"400":{"description":"Incorrect format or missing epoch_count parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: status, error: submitted is not valid"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}}]}},"/babylon/checkpointing/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"CheckpointingParams","tags":["Checkpointing"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/checkpointing/v1/raw_checkpoint/{epoch_num}":{"get":{"summary":"raw_checkpoint","description":"RawCheckpoint queries a checkpoints at a given epoch number.","operationId":"RawCheckpoint","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/12777895643\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"115","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace checkpointing code 1201: raw checkpoint does not exist: no raw checkpoint is found at epoch 123"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"epoch_num","description":"epoch_num defines the epoch for the queried checkpoint","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/checkpointing/v1/raw_checkpoints/{status}":{"get":{"summary":"raw_checkpoint_list","description":"RawCheckpointList queries all checkpoints that match the given status.","operationId":"RawCheckpointList","tags":["Checkpointing"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/checkpointing/v1/raw_checkpoint/CKPT_STATUS_SUBMITTED?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"uXt+PS7dVt9Up/qtZKdP2nuc67MEFVFt1y6joNmPcYU=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"DAAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"pwJ/bS2tG275DLsK3iizJel/U8gYLyjtOww+2Sjs7Uz/BZ5IIcZcH4JO7aXYiJFf","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","example":"kaWkBH7n7+E33r6RqtJUFITzlthN0EW9eKW78cKKP4MvprojzSrS1LuMua/N3HETBKG6yPbwB5ydbqAjV0xkLvSNtwi3wVjRPsEz7vpEfKkOpBV3qKvhsf/btZzav12Q","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","example":"200","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n- CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n- CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n- CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n- CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n- CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","example":"23002","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","example":"2023-02-06T06:45:53.122665404Z","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"status","description":"status defines the status of the raw checkpoints of the query","in":"path","required":true,"schema":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"]}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}":{"get":{"summary":"chain_info","description":"ChainInfo queries the latest info of a chain in Babylon\'s view","operationId":"ChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"664","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"epoch_chain_info","description":"EpochChainInfo queries the latest info of a chain in a given epoch of Babylon\'s view","operationId":"EpochChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/epochs/12778899564\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"tzGuM/0EV1vICapWG7fgBMfQYoeRPibz0QBNNVF6PYg="},"height":{"type":"string","format":"uint64","example":"1213979","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"23310"},"time":{"type":"string","format":"date-time","example":"2023-02-06T07:38:53.204872672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"WdXzsFDY/FLp0o2OfYMCJ2I1quDRJLA1bDBPaipEe7M="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"IIQXBVBpjdONqdfrPbXiosN4CrxsTOPGNAoHK/CS/pE="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"Scv4hVpKlf6/PE/wCs4xtozSWbD15cuR8kB1/m8y/Dg="},"data_hash":{"type":"string","format":"byte","example":"p7s6cXvOq33X/vgoPWNbNRcvvmpHrrLlK7kJlYubsAk="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"XCpnkVMuz/nWu0jt5E76v2R+yZ6Zf/G66gD4nEoev2o="},"last_results_hash":{"type":"string","format":"byte","example":"X4YmeUenrm1fJ3Lkf6rDNaWJr2j1gIVYL6qEbB9Hd/4="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"YhsuanV2AACZreJhHL10mVFb6OY="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"117","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"v85CwsB588zNZkvjh64E05jk+RoQwwD7hcuNWLnPbI4=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"665","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/epoch_num.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chain_info/{chain_id}/header/{height}":{"get":{"summary":"header","description":"Header queries the CZ header and fork headers at a given height.","operationId":"Header","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/chain_info/qwertydev55667734/header/20\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1103: no header exists at this height"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/chains":{"get":{"summary":"chain_list","description":"ChainList queries the list of chains that checkpoint to Babylon","operationId":"ChainList","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}":{"get":{"summary":"finalized_chain_info","description":"FinalizedChainInfo queries the BTC-finalised info of a chain, with proofs","operationId":"FinalizedChainInfo","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"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"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/finalized_chain_info/{chain_id}/height/{height}":{"get":{"summary":"finalized_chain_info_until_height","description":"FinalizedChainInfoUntilHeight queries the BTC-finalised info no later than the provided CZ height, with proofs","operationId":"FinalizedChainInfoUntilHeight","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/finalized_chain_info/qwertydev55667734/height/20?prove=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain","example":"sandbox"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"6KtLHW1bz1acBR0qiP8GMJ3x1fIq7NkYnOeMkpOZtW0="},"height":{"type":"string","format":"uint64","example":"1201712","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"16997"},"time":{"type":"string","format":"date-time","example":"2023-02-05T13:32:50.811668819Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"wO3hGzNB+Wjq8PCNTYEbGBHf1B/jgwUMC2SORyYk4oU="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"TM4uJY5pBhWt/lEqzKYgOXeoVQUzRx5Fd4LDucqzyzU="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","example":"Q8C8ELDk7QLwdzgTUo8zhplHMj+jhAO9yqPCmbTFVu0=","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I=","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"j39BHZpssp/suNEgAAX+905d2JMGFV8fG/ESAa0ZYFA="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"NRi6kxEiG4x+YyXtkbgfk016Ijo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"85","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"8npYFEzROQX5sIZlahdSq4Uu0TSoEtlEyqMzQ+LeDXU=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","example":"483","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64","example":"85"},"current_epoch_interval":{"type":"string","format":"uint64","example":"200"},"first_block_height":{"type":"string","format":"uint64","example":"16801"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","example":"85","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","example":"5iUfPaCyRrXeeT85KeM7XGx3rIwNwGpsOEpIR3madC0=","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","example":"BQAAAAAAAAAAAAAAAA==","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","example":"lUNfobCpWZ/Fr7FcKf3H9e4L8DT0cQOe6vwH+gblXVIROMKt42/Gml4E49lv8Brz","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64","example":"588"},"hash":{"type":"string","format":"byte","example":"000000000000000000063bf7d4784b651f47492dc1c9a8053f4ab66e7aa04209"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"data":{"type":"string","format":"byte","example":"CvoMCvcMCiMvaWJjLmNvcmUuY2xpZW50LnYxLk1zZ1VwZGF0ZUNsaWVudBLPDAoQMDctdGVuZGVybWludC0xMRKODAomL2liYy5saWdodGNsaWVudHMudGVuZGVybWludC52MS5IZWFkZXIS4wsKsgYKjwMKAggLEgdzYW5kYm94GLCsSSIMCIPg/p4GELSvs8ACKkgKIPaa2Kv3DcKLnh1IW/9wAz0xzZrq2cdYqD1fpu1HUY3eEiQIARIgpnoQuEEhga1RSSWpUFkQ0S74bF+EY73MmNSlrW+Y1CcyIOirSx1tW89WnAUdKoj/BjCd8dXyKuzZGJznjJKTmbVtOiDjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VUIgiP3fVs+Cs53U/r2QzjEpkt9JRsaoPJYh+tuUPwbl8+hKIIj931bPgrOd1P69kM4xKZLfSUbGqDyWIfrblD8G5fPoUiAEgJG8fdwoP3e/v5HXPETaWMPfipy8hnQF2Lfz2q2iL1ogYGgo5ytNQOlNRxCp2UeSctU9sIKlPkf3UCPhSY9291ViIOOwxEKY/BwUmvv0yJlvuSQnrkHkZJuTTKSVmRt4UrhVaiDjsMRCmPwcFJr79MiZb7kkJ65B5GSbk0yklZkbeFK4VXIU/3wXmPcrP8DA9M2s0O0IjHkF3xESnQMIsKxJGkgKIBbeVT2MekMVV40GYr7qq3KxdPWNWAK3Rn7SGvmmmFTPEiQIARIgYfPRAQ1vMV8KcdYSXX3/iQbbAbM+QktBMu5iAdiNH74iaAgCEhQQmWUnPNb4IwuJ0kiw1EkX6xvidxoMCIjg/p4GEKD/htYDIkBdKXPVqCUUHV5ZNnZwlX73BSAjo6hhARKbYSBPnYwF9kic/RBDPoWJtY1pTMmll5Fzz6NjvAlh6gpHdU0bpBULIg8IARoLCICSuMOY/v///wEiaAgCEhTFB5iLEZ7nxN+6GjmrFXS00SM43xoMCIjg/p4GENuRk9YDIkD2+BtM+scfYJIci6HUuStB9+KbYivdqVLGl3757fftC5M4Wc9CbApzS1e1kCUt1u5X0CIcl908FzGNX7Pvo5cAImgIAhIU/3wXmPcrP8DA9M2s0O0IjHkF3xEaDAiI4P6eBhCr2JbWAyJARy2AjrgF/q6wYJfiXsCzTrsIaFWULij+gg30aFja1W+nVXObvzGSlVA96CafDl1X964aqjaxiLA1vjRMAeAsCRLAAgo+ChQQmWUnPNb4IwuJ0kiw1EkX6xvidxIiCiBzWJ3O3MJ757DU5YgoYgvZ4vFMZ/mNn3O66eV8/u+W0Rigwh4KPgoUXNJb1YCUIkmXABYS4XMMIA6hqBwSIgoggdxlGlNQp7I5nj8EsjsUym1zC/F6hcilv8TMNf/owawYoMIeCj4KFMUHmIsRnufE37oaOasVdLTRIzjfEiIKIGEcw1o23WK7/Lpvy9TnOom9RCUCECrZjjzwDbUZYC3VGKDCHgo+ChT/fBeY9ys/wMD0zazQ7QiMeQXfERIiCiCO3GGFOwKYVji4hly8j3VQXD0CNzoPizj8uq/BzyxpTxigwh4SPgoU/3wXmPcrP8DA9M2s0O0IjHkF3xESIgogjtxhhTsCmFY4uIZcvI91UFw9Ajc6D4s4/Lqvwc8saU8YoMIeGgQQ7KtJIuICCkkKFBCZZSc81vgjC4nSSLDUSRfrG+J3EiIKIHNYnc7cwnvnsNTliChiC9ni8Uxn+Y2fc7rp5Xz+75bRGKDCHiCguaT///////8BCkIKFFzSW9WAlCJJlwAWEuFzDCAOoagcEiIKIIHcZRpTUKeyOZ4/BLI7FMptcwvxeoXIpb/EzDX/6MGsGKDCHiCgwh4KQgoUxQeYixGe58Tfuho5qxV0tNEjON8SIgogYRzDWjbdYrv8um/L1Oc6ib1EJQIQKtmOPPANtRlgLdUYoMIeIKDCHgpCChT/fBeY9ys/wMD0zazQ7QiMeQXfERIiCiCO3GGFOwKYVji4hly8j3VQXD0CNzoPizj8uq/BzyxpTxigwh4goMIeEkkKFBCZZSc81vgjC4nSSLDUSRfrG+J3EiIKIHNYnc7cwnvnsNTliChiC9ni8Uxn+Y2fc7rp5Xz+75bRGKDCHiCguaT///////8BGipiYm4xdng3bHlyM2h3NjhzbnVqZjk2cHo0emVqeXZmcmtwMDJrcGQzcGgSZgpRCkYKHy9jb3Ntb3MuY3J5cHRvLnNlY3AyNTZrMS5QdWJLZXkSIwohA7VN0PukV0gVnjQS4TS63mufBq5UJ/AuBavAId5QXwzEEgQKAggBGMEaEhEKCwoEdWJibhIDNDEwEKi/DBpAPHhSzFFS+Kr7Z4ev8pHVCv94kpAXjE3qsqNnJnLPiYUDrZ91+0mrIL14itHvHx9C9vnThISiDyO6yj/Fivlr7A="},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"1"},"index":{"type":"string","format":"int64","example":"0"},"leaf_hash":{"type":"string","format":"byte","example":"thIF+6Qb1ou0zMx4pGV+thXoVe6FWudxRpWJ1unseZA="},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64","example":"200"},"index":{"type":"string","format":"int64","example":"196"},"leaf_hash":{"type":"string","format":"byte","example":"L5aUfxN9bq4fdpp/NxeZBZ1x93cGK/IEiIzb29y86eY="},"aunts":{"type":"array","items":{"type":"string","format":"byte","example":"gTFClU35zEjokxwUKKrlFCvCAl6BtT0xtBOvS9uAxew="}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string","example":"bbnvaloper19phgelwxxh9qr8y60fln5xymcrwcprzqupcjan"},"bls_pub_key":{"type":"string","format":"byte","example":"rwxaQLgWzc95IbeM6yJ3GyjgCzTN1zFCADddHH31ZGMbs3YyTTMDkNcxUOVE9bXJFp9/mHTaq/h6hHgynXR9doqKV1XDN7fJRRPsnue5fMgToiRY0pGThc1Zk+qQn+TJ"},"voting_power":{"type":"string","format":"uint64","example":"100"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."}}}},"400":{"description":"Incorrect height parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: height, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain value/ height value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"chain with ID sandbox does not have a timestamped header before height 123"},"details":{"type":"array","example":[]}}}}}},"501":{"description":"Empty one or all of the required parameters: chain_id/height.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","description":"chain_id is the ID of the CZ","in":"path","required":true,"schema":{"type":"string"}},{"name":"height","description":"height is the height of the CZ chain\\nsuch that the returned finalised chain info will be no later than this height","in":"path","required":true,"schema":{"type":"string","format":"uint64"}},{"name":"prove","description":"prove indicates whether the querier wants to get proofs of this timestamp.","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}":{"get":{"summary":"list_headers","description":"ListHeaders queries the headers of a chain in Babylon\'s view, with pagination support","operationId":"ListHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/127767843567?pagination.key=2&pagination.offset=1&pagination.limit=10&pagination.count_total=true&pagination.reverse=true\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"prJrrFy0Q3La0fFJVhVQGPc4q9bhtTi/BRS0QIQC6Xc="},"height":{"type":"string","format":"uint64","example":"1213369","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"22996"},"time":{"type":"string","format":"date-time","example":"2023-02-06T06:44:51.233287559Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"A7lPd/YZkULe0ObDe2A/rajydoFo40X0jvYRTZ4AFrw="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":1},"hash":{"type":"string","format":"byte","example":"kPMTYlaz9PvLsUHVWoWLdLB/tcGtItAa13qbC5l13GQ="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VmsRvtj7+MmGZif+xwUZ/oDdFSH8oVm2U0QAZNhjnNs="},"data_hash":{"type":"string","format":"byte","example":"DM//joE6ATqIU+LhoHF4DzMLBCDlM3VbvQZxYCR0XT0="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"next_validators_hash":{"type":"string","format":"byte","example":"ZSNW89DreulvecG6RUnLdtD/H6wt/aXryxaBY0/Yh0I="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"tgpbBuP/OV1F3g0Ha+juh39hGXrPl4/W0b5jgKaT3x8="},"last_results_hash":{"type":"string","format":"byte","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"CVXoIx+yZYjKWNyRm8dyFUlVwGo="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"115","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"JyS7vVs9FVOGMWvxafG1gqyHYgoVWUgizBsSG9KCXRA=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"},"title":"IndexedHeader is the metadata of a CZ header"}},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\nmessage SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n}"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."}}}},"400":{"description":"Missing one or more of the required parameters: start_epoch/end_epoch/offset/limit/count_total/reverse.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"strconv.ParseUint: parsing \\\\\\"\\\\\\": invalid syntax"},"details":{"type":"array","example":[]}}}}}},"404":{"description":"Not Found - Incorrect base_url parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pagination.key","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set.","in":"query","required":false,"schema":{"type":"string","format":"byte"}},{"name":"pagination.offset","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.limit","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app.","in":"query","required":false,"schema":{"type":"string","format":"uint64"}},{"name":"pagination.count_total","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pagination.reverse","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43","in":"query","required":false,"schema":{"type":"boolean"}}]}},"/babylon/zoneconcierge/v1/headers/{chain_id}/epochs/{epoch_num}":{"get":{"summary":"list_epoch_headers","description":"ListEpochHeaders queries the headers of a chain timestamped in a given epoch of Babylon, with pagination support","operationId":"ListEpochHeaders","tags":["ZoneConcierge"],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl --request GET \\\\\\n--url \'http://api.testnet.babylonchain.io/api/babylon/zoneconcierge/v1/headers/qwertydev55667734/epochs/12778967855\'\\\\\\n--header \'accept: application/json\' \\\\\\n"}],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain","example":"sandbox"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header","example":"nwbmL+O9naKWlcXPF/ydfidWolnDTtdrTHpauJszR0Q="},"height":{"type":"string","format":"uint64","example":"1214966","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64","example":"11"},"app":{"type":"string","format":"uint64","example":"0"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string","example":"bbn-test2"},"height":{"type":"string","format":"int64","example":"47"},"time":{"type":"string","format":"date-time","example":"2023-02-06T09:06:55.265087672Z"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte","example":"7X371fiUPmi7CJAn8mn0o0jZW/gSHYW1FDr72hBJmCo="},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64","example":"1"},"hash":{"type":"string","format":"byte","example":"T0U/P/ytKEtrED92o/P99NeYrETfHxPnVipdjXe11D0="}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data","example":"VDr+2Sv74IpnFUZdNed1GQesT+fKmObQD+JLfMWKjGk="},"data_hash":{"type":"string","format":"byte","example":"VAsoaSNOik8BToJxRrGT+juYVfowMsKgB8iH4Ye1Gxw="},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"next_validators_hash":{"type":"string","format":"byte","example":"xp7fUgT7a3NGAowzc2YMlx3smaxcw+b/+UDN0bf1FWQ="},"consensus_hash":{"type":"string","format":"byte","example":"BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8="},"app_hash":{"type":"string","format":"byte","example":"84/hCGj7As1EQHkNWPoKbltTgI4ygC9DMUTR7h5Cs7M="},"last_results_hash":{"type":"string","format":"byte","example":"BwHP9RZ9QBG+AGyekgyk4QypbzCw/LPGkUNL4Af/eIc="},"evidence_hash":{"type":"string","format":"byte","title":"consensus info","example":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="},"proposer_address":{"type":"string","format":"byte","example":"WLEoPJImsAOqoq9N2DNs/F3Iag0="}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","example":"1","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","example":"ZQQkMMnDn8xMHOjjtUeuyPVB9l6AgXAA5X+BDKzvucI=","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."}}}},"400":{"description":"Incorrect epoch_num parameter value format.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":3},"message":{"type":"string","example":"type mismatch, parameter: epoch_num, error: strconv.ParseUint: parsing \\\\\\"bbntest\\\\\\": invalid syntax"},"details":{"type":"array"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}},"500":{"description":"Incorrect chain_id parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":2},"message":{"type":"string","example":"codespace zoneconcierge code 1109: no chain info exists at this epoch"},"details":{"type":"array"}}}}}},"501":{"description":"Empty chain_id/epoch_num parameter value.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","example":12},"message":{"type":"string","example":"Not Implemented"},"details":{"type":"array"}}}}}}},"parameters":[{"name":"chain_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"epoch_num","in":"path","required":true,"schema":{"type":"string","format":"uint64"}}]}},"/babylon/zoneconcierge/v1/params":{"get":{"summary":"params","description":"Parameters queries the parameters of the module.","operationId":"ZoneConciergeParams","tags":["ZoneConcierge"],"responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Not Found"},"status":{"type":"integer","example":404}}}}}}}}}},"components":{"schemas":{"babylon.btccheckpoint.v1.Params":{"type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}},"description":"Params defines the parameters for the module."},"babylon.btccheckpoint.v1.QueryBtcCheckpointHeightAndHashResponse":{"type":"object","properties":{"earliest_btc_block_number":{"type":"string","format":"uint64","title":"Earliest btc block number containing given raw checkpoint"},"earliest_btc_block_hash":{"type":"string","format":"byte"}},"title":"QueryBtcCheckpointHeightAndHashResponse is response type for the Query/BtcCheckpointHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryBtcCheckpointsHeightAndHashResponse":{"type":"object","properties":{"epoch_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_numbers":{"type":"array","items":{"type":"string","format":"uint64"}},"earliest_btc_block_hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryBtcCheckpointsHeightAndHashResponse is response type for the Query/BtcCheckpointsHeightAndHash RPC method"},"babylon.btccheckpoint.v1.QueryEpochSubmissionsResponse":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"description":"All submissions saved during an epoch."},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.btccheckpoint.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"btc_confirmation_depth":{"type":"string","format":"uint64","title":"btc_confirmation_depth is the confirmation depth in BTC.\\nA block is considered irreversible only when it is at least k-deep in BTC\\n(k in research paper)"},"checkpoint_finalization_timeout":{"type":"string","format":"uint64","title":"checkpoint_finalization_timeout is the maximum time window (measured in BTC blocks) between a checkpoint\\n- being submitted to BTC, and\\n- being reported back to BBN\\nIf a checkpoint has not been reported back within w BTC blocks, then BBN has dishonest majority and is stalling checkpoints\\n(w in research paper)"}}}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btccheckpoint.v1.SubmissionKey":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}},"title":"Checkpoint can be composed from multiple transactions, so to identify whole\\nsubmission we need list of transaction keys.\\nEach submission can generally be identified by this list of (txIdx, blockHash)\\ntuples.\\nNote: this could possibly be optimized as if transactions were in one block\\nthey would have the same block hash and different indexes, but each blockhash\\nis only 33 (1 byte for prefix encoding and 32 byte hash), so there should\\nbe other strong arguments for this optimization"},"babylon.btccheckpoint.v1.TransactionKey":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"},"cosmos.base.query.v1beta1.PageRequest":{"type":"object","properties":{"key":{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\\nquerying the next page most efficiently. Only one of offset or key\\nshould be set."},"offset":{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\\nIt is less efficient than using key. Only one of offset or key should\\nbe set."},"limit":{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\\nIf left empty it will default to a value to be set by each app."},"count_total":{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\\na count of the total number of items available for pagination in UIs.\\ncount_total is only respected when offset is used. It is ignored when key\\nis set."},"reverse":{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\\n\\nSince: cosmos-sdk 0.43"}},"description":"message SomeRequest {\\n Foo some_parameter = 1;\\n PageRequest pagination = 2;\\n }","title":"PageRequest is to be embedded in gRPC request messages for efficient\\npagination. Ex:"},"cosmos.base.query.v1beta1.PageResponse":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"},"google.protobuf.Any":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"grpc.gateway.runtime.Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"}}}},"babylon.btclightclient.v1.BTCHeaderInfo":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}},"babylon.btclightclient.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.btclightclient.v1.QueryBaseHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.btclightclient.v1.QueryContainsBytesResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the temporary Query/ContainsBytes RPC method."},"babylon.btclightclient.v1.QueryContainsResponse":{"type":"object","properties":{"contains":{"type":"boolean"}},"description":"QueryContainsResponse is response type for the Query/Contains RPC method."},"babylon.btclightclient.v1.QueryHashesResponse":{"type":"object","properties":{"hashes":{"type":"array","items":{"type":"string","format":"byte"}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryHashesResponse is response type for the Query/Hashes RPC method."},"babylon.btclightclient.v1.QueryMainChainResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryMainChainResponse is response type for the Query/MainChain RPC method."},"babylon.btclightclient.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.btclightclient.v1.QueryTipResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"header":{"type":"string","format":"byte"},"hash":{"type":"string","format":"byte"},"height":{"type":"string","format":"uint64"},"work":{"type":"string","format":"byte"}}}}},"babylon.epoching.v1.BondState":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"babylon.epoching.v1.DelegationLifecycle":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"babylon.epoching.v1.DelegationStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"babylon.epoching.v1.Params":{"type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}},"description":"Params defines the parameters for the module."},"babylon.epoching.v1.QueryCurrentEpochResponse":{"type":"object","properties":{"current_epoch":{"type":"string","format":"uint64","title":"current_epoch is the current epoch number"},"epoch_boundary":{"type":"string","format":"uint64","title":"epoch_boundary is the height of this epoch\'s last block"}},"title":"QueryCurrentEpochResponse is the response type for the Query/CurrentEpoch RPC method"},"babylon.epoching.v1.QueryDelegationLifecycleResponse":{"type":"object","properties":{"del_life":{"type":"object","properties":{"del_addr":{"type":"string"},"del_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"val_addr":{"type":"string"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueryEpochInfoResponse":{"type":"object","properties":{"epoch":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}}},"babylon.epoching.v1.QueryEpochMsgsResponse":{"type":"object","properties":{"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"title":"msgs is the list of messages queued in the current epoch"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryEpochMsgsResponse is the response type for the Query/EpochMsgs RPC method"},"babylon.epoching.v1.QueryEpochValSetResponse":{"type":"object","properties":{"validators":{"type":"array","items":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}}},"total_voting_power":{"type":"string","format":"int64"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryEpochsInfoResponse":{"type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}}},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}}},"babylon.epoching.v1.QueryLatestEpochMsgsResponse":{"type":"object","properties":{"latest_epoch_msgs":{"type":"array","items":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"title":"epoch_msg_map is a list of QueuedMessageList\\neach QueuedMessageList has a field identifying the epoch number"},"pagination":{"type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"title":"QueryLatestEpochMsgsResponse is the response type for the Query/LatestEpochMsgs RPC method"},"babylon.epoching.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object","properties":{"epoch_interval":{"type":"string","format":"uint64","title":"epoch_interval is the number of consecutive blocks to form an epoch"}}}},"description":"QueryParamsResponse is the response type for the Query/Params RPC method."},"babylon.epoching.v1.QueryValidatorLifecycleResponse":{"type":"object","properties":{"val_life":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}}}},"babylon.epoching.v1.QueuedMessage":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"},"babylon.epoching.v1.QueuedMessageList":{"type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"msgs":{"type":"array","items":{"type":"object","properties":{"tx_id":{"type":"string","format":"byte","title":"tx_id is the ID of the tx that contains the message"},"msg_id":{"type":"string","format":"byte","title":"msg_id is the original message ID, i.e., hash of the marshaled message"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height when this msg is submitted to Babylon"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp when this msg is submitted to Babylon"},"msg_create_validator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"msg_delegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"msg_undelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"msg_begin_redelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."}},"title":"QueuedMessage is a message that can change the validator set and is delayed to the epoch boundary"}}}},"babylon.epoching.v1.ValStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}},"babylon.epoching.v1.Validator":{"type":"object","properties":{"addr":{"type":"string","format":"byte","title":"addr is the validator\'s address (in sdk.ValAddress)"},"power":{"type":"string","format":"int64","title":"power is the validator\'s voting power"}}},"babylon.epoching.v1.ValidatorLifecycle":{"type":"object","properties":{"val_addr":{"type":"string"},"val_life":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CREATED","BONDED","UNBONDING","UNBONDED","REMOVED"],"default":"CREATED"},"block_height":{"type":"string","format":"uint64"},"block_time":{"type":"string","format":"date-time"}}}}}},"cosmos.base.v1beta1.Coin":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."},"cosmos.staking.v1beta1.CommissionRates":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"cosmos.staking.v1beta1.Description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_src_address":{"type":"string"},"validator_dst_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\\nof coins from a delegator and source validator to a destination validator."},"cosmos.staking.v1beta1.MsgCreateValidator":{"type":"object","properties":{"description":{"type":"object","properties":{"moniker":{"type":"string","description":"moniker defines a human-readable name for the validator."},"identity":{"type":"string","description":"identity defines an optional identity signature (ex. UPort or Keybase)."},"website":{"type":"string","description":"website defines an optional website link."},"security_contact":{"type":"string","description":"security_contact defines an optional email for security contact."},"details":{"type":"string","description":"details define other optional details."}},"description":"Description defines a validator description."},"commission":{"type":"object","properties":{"rate":{"type":"string","description":"rate is the commission rate charged to delegators, as a fraction."},"max_rate":{"type":"string","description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction."},"max_change_rate":{"type":"string","description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction."}},"description":"CommissionRates defines the initial commission rates to be used for creating\\na validator."},"min_self_delegation":{"type":"string"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"pubkey":{"type":"object","properties":{"type_url":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\\nprotocol buffer message. This string must contain at least\\none \\"/\\" character. The last segment of the URL\'s path must represent\\nthe fully qualified name of the type (as in\\n`path/google.protobuf.Duration`). The name should be in a canonical form\\n(e.g., leading \\".\\" is not accepted).\\n\\nIn practice, teams usually precompile into the binary all types that they\\nexpect it to use in the context of Any. However, for URLs which use the\\nscheme `http`, `https`, or no scheme, one can optionally set up a type\\nserver that maps type URLs to message definitions as follows:\\n\\n* If no scheme is provided, `https` is assumed.\\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\\n value in binary format, or produce an error.\\n* Applications are allowed to cache lookup results based on the\\n URL, or have them precompiled into a binary to avoid any\\n lookup. Therefore, binary compatibility needs to be preserved\\n on changes to types. (Use versioned type names to manage\\n breaking changes.)\\n\\nNote: this functionality is not currently available in the official\\nprotobuf release, and it is not used for type URLs beginning with\\ntype.googleapis.com.\\n\\nSchemes other than `http`, `https` (or the empty scheme) might be\\nused with implementation specific semantics."},"value":{"type":"string","format":"byte","description":"Must be a valid serialized protocol buffer of the above specified type."}},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\\nURL that describes the type of the serialized message.\\n\\nProtobuf library provides support to pack/unpack Any values in the form\\nof utility functions or additional generated methods of the Any type.\\n\\nExample 1: Pack and unpack a message in C++.\\n\\n Foo foo = ...;\\n Any any;\\n any.PackFrom(foo);\\n ...\\n if (any.UnpackTo(&foo)) {\\n ...\\n }\\n\\nExample 2: Pack and unpack a message in Java.\\n\\n Foo foo = ...;\\n Any any = Any.pack(foo);\\n ...\\n if (any.is(Foo.class)) {\\n foo = any.unpack(Foo.class);\\n }\\n\\n Example 3: Pack and unpack a message in Python.\\n\\n foo = Foo(...)\\n any = Any()\\n any.Pack(foo)\\n ...\\n if any.Is(Foo.DESCRIPTOR):\\n any.Unpack(foo)\\n ...\\n\\n Example 4: Pack and unpack a message in Go\\n\\n foo := &pb.Foo{...}\\n any, err := anypb.New(foo)\\n if err != nil {\\n ...\\n }\\n ...\\n foo := &pb.Foo{}\\n if err := any.UnmarshalTo(foo); err != nil {\\n ...\\n }\\n\\nThe pack methods provided by protobuf library will by default use\\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\\nmethods only use the fully qualified type name after the last \'/\'\\nin the type URL, for example \\"foo.bar.com/x/y.z\\" will yield type\\nname \\"y.z\\".\\n\\n\\nJSON\\n====\\nThe JSON representation of an `Any` value uses the regular\\nrepresentation of the deserialized, embedded message, with an\\nadditional field `@type` which contains the type URL. Example:\\n\\n package google.profile;\\n message Person {\\n string first_name = 1;\\n string last_name = 2;\\n }\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.profile.Person\\",\\n \\"firstName\\": ,\\n \\"lastName\\": \\n }\\n\\nIf the embedded message type is well-known and has a custom JSON\\nrepresentation, that representation will be embedded adding a field\\n`value` which holds the custom JSON in addition to the `@type`\\nfield. Example (for message [google.protobuf.Duration][]):\\n\\n {\\n \\"@type\\": \\"type.googleapis.com/google.protobuf.Duration\\",\\n \\"value\\": \\"1.212s\\"\\n }"},"value":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgCreateValidator defines a SDK message for creating a new validator."},"cosmos.staking.v1beta1.MsgDelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgDelegate defines a SDK message for performing a delegation of coins\\nfrom a delegator to a validator."},"cosmos.staking.v1beta1.MsgUndelegate":{"type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"},"amount":{"type":"object","properties":{"denom":{"type":"string"},"amount":{"type":"string"}},"description":"Coin defines a token with a denomination and an amount.\\n\\nNOTE: The amount field is an Int which implements the custom method\\nsignatures required by gogoproto."}},"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\\ndelegate and a validator."},"tendermint.types.BlockID":{"type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}},"title":"BlockID"},"tendermint.types.Header":{"type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"tendermint.types.PartSetHeader":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"},"tendermint.version.Consensus":{"type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"babylon.checkpointing.v1.CheckpointStateUpdate":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"babylon.checkpointing.v1.CheckpointStatus":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."},"babylon.checkpointing.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.checkpointing.v1.QueryBlsPublicKeyListResponse":{"type":"object","properties":{"validator_with_bls_keys":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"}},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryBlsPublicKeyListResponse is the response type for the Query/BlsPublicKeys\\nRPC method."},"babylon.checkpointing.v1.QueryEpochStatusResponse":{"type":"object","properties":{"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC."}},"description":"QueryEpochStatusResponse is the response type for the Query/EpochStatus\\nRPC method."},"babylon.checkpointing.v1.QueryLastCheckpointWithStatusResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"}}},"babylon.checkpointing.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"babylon.checkpointing.v1.QueryRawCheckpointListResponse":{"type":"object","properties":{"raw_checkpoints":{"type":"array","items":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"title":"the order is going from the newest to oldest based on the epoch number"},"pagination":{"description":"pagination defines the pagination in the response.","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}}}},"description":"QueryRawCheckpointListResponse is the response type for the Query/RawCheckpoints\\nRPC method."},"babylon.checkpointing.v1.QueryRawCheckpointResponse":{"type":"object","properties":{"raw_checkpoint":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."}},"description":"QueryRawCheckpointResponse is the response type for the Query/RawCheckpoint\\nRPC method."},"babylon.checkpointing.v1.QueryRecentEpochStatusCountResponse":{"type":"object","properties":{"tip_epoch":{"type":"string","format":"uint64"},"epoch_count":{"type":"string","format":"uint64"},"status_count":{"type":"object","additionalProperties":{"type":"string","format":"uint64"}}},"description":"QueryRecentEpochStatusCountResponse is the response type for the Query/EpochStatusCount\\nRPC method."},"babylon.checkpointing.v1.RawCheckpoint":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"babylon.checkpointing.v1.RawCheckpointWithMeta":{"type":"object","properties":{"ckpt":{"type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}},"title":"RawCheckpoint wraps the BLS multi sig with meta data"},"status":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"status defines the status of the checkpoint"},"bls_aggr_pk":{"type":"string","format":"byte","title":"bls_aggr_pk defines the aggregated BLS public key"},"power_sum":{"type":"string","format":"uint64","title":"power_sum defines the accumulated voting power for the checkpoint"},"lifecycle":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["CKPT_STATUS_ACCUMULATING","CKPT_STATUS_SEALED","CKPT_STATUS_SUBMITTED","CKPT_STATUS_CONFIRMED","CKPT_STATUS_FINALIZED"],"default":"CKPT_STATUS_ACCUMULATING","description":"CkptStatus is the status of a checkpoint.\\n\\n - CKPT_STATUS_ACCUMULATING: ACCUMULATING defines a checkpoint that is awaiting for BLS signatures.\\n - CKPT_STATUS_SEALED: SEALED defines a checkpoint that has accumulated sufficient BLS signatures.\\n - CKPT_STATUS_SUBMITTED: SUBMITTED defines a checkpoint that is included on BTC.\\n - CKPT_STATUS_CONFIRMED: CONFIRMED defines a checkpoint that is k-deep on BTC.\\n - CKPT_STATUS_FINALIZED: FINALIZED defines a checkpoint that is w-deep on BTC.","title":"state defines the event of a state transition towards this state"},"block_height":{"type":"string","format":"uint64","title":"block_height is the height of the Babylon block that triggers the state update"},"block_time":{"type":"string","format":"date-time","title":"block_time is the timestamp in the Babylon block that triggers the state update"}}},"description":"lifecycle defines the lifecycle of this checkpoint, i.e., each state transition and\\nthe time (in both timestamp and block height) of this transition."}},"description":"RawCheckpointWithMeta wraps the raw checkpoint with meta data."},"babylon.checkpointing.v1.ValidatorWithBlsKey":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"babylon.btccheckpoint.v1.TransactionInfo":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"babylon.zoneconcierge.v1.ChainInfo":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}},"title":"ChainInfo is the information of a CZ"},"babylon.zoneconcierge.v1.Forks":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"babylon.zoneconcierge.v1.IndexedHeader":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"babylon.zoneconcierge.v1.Params":{"type":"object","description":"Params defines the parameters for the module."},"babylon.zoneconcierge.v1.ProofEpochSealed":{"type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}},"title":"ProofEpochSealed is the proof that an epoch is sealed by the sealer header, i.e., the 2nd header of the next epoch\\nWith the access of metadata\\n- Metadata of this epoch, which includes the sealer header\\n- Raw checkpoint of this epoch\\nThe verifier can perform the following verification rules:\\n- The raw checkpoint\'s `last_commit_hash` is same as in the sealer header\\n- More than 1/3 (in voting power) validators in the validator set of this epoch have signed `last_commit_hash` of the sealer header\\n- The epoch medatata is committed to the `app_hash` of the sealer header\\n- The validator set is committed to the `app_hash` of the sealer header"},"babylon.zoneconcierge.v1.ProofFinalizedChainInfo":{"type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}},"title":"ProofFinalizedChainInfo is a set of proofs that attest a chain info is BTC-finalised"},"babylon.zoneconcierge.v1.QueryChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryChainInfoResponse is response type for the Query/ChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryChainListResponse":{"type":"object","properties":{"chain_ids":{"type":"array","items":{"type":"string"}}},"title":"QueryChainListResponse is response type for the Query/ChainList RPC method"},"babylon.zoneconcierge.v1.QueryEpochChainInfoResponse":{"type":"object","properties":{"chain_info":{"title":"chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}}},"description":"QueryEpochChainInfoResponse is response type for the Query/EpochChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoResponse is response type for the Query/FinalizedChainInfo RPC method."},"babylon.zoneconcierge.v1.QueryFinalizedChainInfoUntilHeightResponse":{"type":"object","properties":{"finalized_chain_info":{"title":"finalized_chain_info is the info of the CZ","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the ID of the chain"},"latest_header":{"title":"latest_header is the latest header in CZ\'s canonical chain","type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}}},"latest_forks":{"title":"latest_forks is the latest forks, formed as a series of IndexedHeader (from low to high)","type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."},"timestamped_headers_count":{"type":"string","format":"uint64","title":"timestamped_headers_count is the number of timestamped headers in CZ\'s canonical chain"}}},"epoch_info":{"title":"epoch_info is the metadata of the last BTC-finalised epoch","type":"object","properties":{"epoch_number":{"type":"string","format":"uint64"},"current_epoch_interval":{"type":"string","format":"uint64"},"first_block_height":{"type":"string","format":"uint64"},"last_block_header":{"description":"last_block_header is the header of the last block in this epoch.\\nBabylon needs to remember the last header of each epoch to complete unbonding validators/delegations when a previous epoch\'s checkpoint is finalised.\\nThe last_block_header field is nil in the epoch\'s beginning, and is set upon the end of this epoch.","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}}},"app_hash_root":{"type":"string","format":"byte","title":"app_hash_root is the Merkle root of all AppHashs in this epoch\\nIt will be used for proving a block is in an epoch"},"sealer_header":{"title":"sealer_header is the 2nd header of the next epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."}}},"raw_checkpoint":{"title":"raw_checkpoint is the raw checkpoint of this epoch","type":"object","properties":{"epoch_num":{"type":"string","format":"uint64","title":"epoch_num defines the epoch number the raw checkpoint is for"},"last_commit_hash":{"type":"string","format":"byte","title":"last_commit_hash defines the \'LastCommitHash\' that individual BLS sigs are signed on"},"bitmap":{"type":"string","format":"byte","title":"bitmap defines the bitmap that indicates the signers of the BLS multi sig"},"bls_multi_sig":{"type":"string","format":"byte","title":"bls_multi_sig defines the multi sig that is aggregated from individual BLS sigs"}}},"btc_submission_key":{"title":"btc_submission_key is position of two BTC txs that include the raw checkpoint of this epoch","type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block"}}}},"proof":{"title":"proof is the proof that the chain info is finalized","type":"object","properties":{"proof_tx_in_block":{"title":"proof_tx_in_block is the proof that tx that carries the header is included in a certain Babylon block","type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."},"proof_header_in_epoch":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}},"title":"proof_header_in_epoch is the proof that the Babylon header is in a certain epoch"},"proof_epoch_sealed":{"title":"proof_epoch_sealed is the proof that the epoch is sealed","type":"object","properties":{"validator_set":{"type":"array","items":{"type":"object","properties":{"validator_address":{"type":"string"},"bls_pub_key":{"type":"string","format":"byte"},"voting_power":{"type":"string","format":"uint64"}},"title":"ValidatorWithBlsKey couples validator address, voting power, and its bls public key"},"title":"validator_set is the validator set of the sealed epoch\\nThis validator set has generated a BLS multisig on `last_commit_hash` of the sealer header"},"proof_epoch_info":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s metadata is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}},"proof_epoch_val_set":{"title":"proof_epoch_info is the Merkle proof that the epoch\'s validator set is committed to `app_hash` of the sealer header","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}}}}},"proof_epoch_submitted":{"type":"array","items":{"type":"object","properties":{"key":{"type":"object","properties":{"index":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"Each provided OP_RETURN transaction can be idendtified by hash of block in\\nwhich transaction was included and transaction index in the block","description":"key is the position (txIdx, blockHash) of this tx on BTC blockchain\\nAlthough it is already a part of SubmissionKey, we store it here again\\nto make TransactionInfo self-contained.\\nFor example, storing the key allows TransactionInfo to not relay on\\nthe fact that TransactionInfo will be ordered in the same order as\\nTransactionKeys in SubmissionKey."},"transaction":{"type":"string","format":"byte","title":"transaction is the full transaction in bytes"},"proof":{"type":"string","format":"byte","title":"proof is the Merkle proof that this tx is included in the position in `key`\\nTODO: maybe it could use here better format as we already processed and\\nvalideated the proof?"}},"title":"TransactionInfo is the info of a tx that contains Babylon checkpoint, including\\n- the position of the tx on BTC blockchain\\n- the full tx content\\n- the Merkle proof that this tx is on the above position"},"title":"proof_epoch_submitted is the proof that the epoch\'s checkpoint is included in BTC ledger\\nIt is the two TransactionInfo in the best (i.e., earliest) checkpoint submission"}}}},"description":"QueryFinalizedChainInfoUntilHeightResponse is response type for the Query/FinalizedChainInfoUntilHeight RPC method."},"babylon.zoneconcierge.v1.QueryHeaderResponse":{"type":"object","properties":{"header":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"fork_headers":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"blocks is the list of non-canonical indexed headers at the same height"}},"description":"Forks is a list of non-canonical `IndexedHeader`s at the same height.\\nFor example, assuming the following blockchain\\n```\\nA <- B <- C <- D <- E\\n \\\\ -- D1\\n \\\\ -- D2\\n```\\nThen the fork will be {[D1, D2]} where each item is in struct `IndexedBlock`.\\n\\nNote that each `IndexedHeader` in the fork should have a valid quorum certificate. \\nSuch forks exist since Babylon considers CZs might have dishonest majority.\\nAlso note that the IBC-Go implementation will only consider the first header in a fork valid, since\\nthe subsequent headers cannot be verified without knowing the validator set in the previous header."}},"description":"QueryParamsResponse is response type for the Query/Header RPC method."},"babylon.zoneconcierge.v1.QueryListEpochHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"}},"description":"QueryListEpochHeadersResponse is response type for the Query/ListEpochHeaders RPC method."},"babylon.zoneconcierge.v1.QueryListHeadersResponse":{"type":"object","properties":{"headers":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"string","title":"chain_id is the unique ID of the chain"},"hash":{"type":"string","format":"byte","title":"hash is the hash of this header"},"height":{"type":"string","format":"uint64","title":"height is the height of this header on CZ ledger\\n(hash, height) jointly provides the position of the header on CZ ledger"},"babylon_header":{"title":"babylon_header is the header of the babylon block that includes this CZ header","type":"object","properties":{"version":{"title":"basic block info","type":"object","properties":{"block":{"type":"string","format":"uint64"},"app":{"type":"string","format":"uint64"}},"description":"Consensus captures the consensus rules for processing a block in the blockchain,\\nincluding all blockchain data structures and the rules of the application\'s\\nstate transition machine."},"chain_id":{"type":"string"},"height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"last_block_id":{"title":"prev block info","type":"object","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"type":"object","properties":{"total":{"type":"integer","format":"int64"},"hash":{"type":"string","format":"byte"}},"title":"PartsetHeader"}}},"last_commit_hash":{"type":"string","format":"byte","title":"hashes of block data"},"data_hash":{"type":"string","format":"byte"},"validators_hash":{"type":"string","format":"byte","title":"hashes from the app output from the prev block"},"next_validators_hash":{"type":"string","format":"byte"},"consensus_hash":{"type":"string","format":"byte"},"app_hash":{"type":"string","format":"byte"},"last_results_hash":{"type":"string","format":"byte"},"evidence_hash":{"type":"string","format":"byte","title":"consensus info"},"proposer_address":{"type":"string","format":"byte"}},"description":"Header defines the structure of a Tendermint block header."},"babylon_epoch":{"type":"string","format":"uint64","title":"epoch is the epoch number of this header on Babylon ledger"},"babylon_tx_hash":{"type":"string","format":"byte","title":"babylon_tx_hash is the hash of the tx that includes this header\\n(babylon_block_height, babylon_tx_hash) jointly provides the position of the header on Babylon ledger"}},"title":"IndexedHeader is the metadata of a CZ header"},"title":"headers is the list of headers"},"pagination":{"title":"pagination defines the pagination in the response","type":"object","properties":{"next_key":{"type":"string","format":"byte","description":"next_key is the key to be passed to PageRequest.key to\\nquery the next page most efficiently. It will be empty if\\nthere are no more results."},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\\nwas set, its value is undefined otherwise"}},"description":"PageResponse is to be embedded in gRPC response messages where the\\ncorresponding request message has used PageRequest.\\n\\n message SomeResponse {\\n repeated Bar results = 1;\\n PageResponse page = 2;\\n }"}},"description":"QueryListHeadersResponse is response type for the Query/ListHeaders RPC method."},"babylon.zoneconcierge.v1.QueryParamsResponse":{"type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","type":"object"}},"description":"QueryParamsResponse is response type for the Query/Params RPC method."},"tendermint.crypto.Proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.crypto.ProofOp":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"},"tendermint.crypto.ProofOps":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"key":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"}},"title":"ProofOp defines an operation used for calculating Merkle root\\nThe data could be arbitrary format, providing nessecary data\\nfor example neighbouring node hash"}}},"title":"ProofOps is Merkle proof defined by the list of ProofOps"},"tendermint.types.TxProof":{"type":"object","properties":{"root_hash":{"type":"string","format":"byte"},"data":{"type":"string","format":"byte"},"proof":{"type":"object","properties":{"total":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"leaf_hash":{"type":"string","format":"byte"},"aunts":{"type":"array","items":{"type":"string","format":"byte"}}}}},"description":"TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree."}}}}}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"introduction/overview","docs":[{"id":"cli/babylond/babylond","path":"/docs/cli/babylond/","sidebar":"docs"},{"id":"cli/babylond/babylond_query","path":"/docs/cli/babylond/babylond_query","sidebar":"docs"},{"id":"cli/babylond/babylond_rollback","path":"/docs/cli/babylond/babylond_rollback","sidebar":"docs"},{"id":"cli/babylond/babylond_rosetta","path":"/docs/cli/babylond/babylond_rosetta","sidebar":"docs"},{"id":"cli/babylond/babylond_start","path":"/docs/cli/babylond/babylond_start","sidebar":"docs"},{"id":"cli/babylond/babylond_status","path":"/docs/cli/babylond/babylond_status","sidebar":"docs"},{"id":"cli/babylond/babylond_tendermint","path":"/docs/cli/babylond/babylond_tendermint","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_reset-state","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_reset-state","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_show-address","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-address","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_show-node-id","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-node-id","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_show-validator","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_show-validator","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_unsafe-reset-all","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_unsafe-reset-all","sidebar":"docs"},{"id":"cli/babylond/Babylond_tendermint/babylond_tendermint_version","path":"/docs/cli/babylond/Babylond_tendermint/babylond_tendermint_version","sidebar":"docs"},{"id":"cli/babylond/babylond_testnet","path":"/docs/cli/babylond/babylond_testnet","sidebar":"docs"},{"id":"cli/babylond/babylond_tx","path":"/docs/cli/babylond/babylond_tx","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_authz","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_authz","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_exec","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_exec","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_grant","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_grant","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_revoke","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_authz/babylond_tx_authz_revoke","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_bank","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_bank","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_multi-send","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_multi-send","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_send","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_bank/babylond_tx_bank_send","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_broadcast","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_broadcast","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_btccheckpoint","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_btccheckpoint","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_btclightclient","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_btclightclient","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_btclightclient/babylond_tx_btclightclient_insert-header","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_btclightclient/babylond_tx_btclightclient_insert-header","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_checkpointing","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_checkpointing","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_create-validator","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_create-validator","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_submit","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_checkpointing/babylond_tx_checkpointing_submit","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_crisis","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_crisis","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_crisis/babylond_tx_crisis_invariant-broken","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_crisis/babylond_tx_crisis_invariant-broken","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_decode","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_decode","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_distribution","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_distribution","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_fund-community-pool","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_fund-community-pool","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_set-withdraw-addr","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_set-withdraw-addr","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-all-rewards","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-all-rewards","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-rewards","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_distribution/babylond_tx_distribution_withdraw-rewards","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_encode","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_encode","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_epoching","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_epoching","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_cancel-unbond","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_cancel-unbond"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_delegate","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_delegate","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_redelegate","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_redelegate","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_unbond","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_epoching/babylond_tx_epoching_unbond","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_evidence","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_evidence","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_feegrant","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_feegrant","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_grant","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_grant","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_revoke","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_feegrant/babylond_tx_feegrant_revoke","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_gov","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_gov","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_deposit","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_deposit","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_draft-proposal","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_draft-proposal","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-legacy-proposal","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-legacy-proposal","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-proposal","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_submit-proposal","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_vote","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_vote","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_weighted-vote","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/babylond_tx_gov_weighted-vote","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_cancel","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_cancel","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_community","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_community","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_param","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_param","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_software","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_gov/submit-legacy/babylond_tx_gov_submit-legacy-proposal_software","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_ibc","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_ibc","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_ibc-transfer","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_ibc-transfer","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer/babylond_tx_ibc-transfer_transfer","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc-transfer/babylond_tx_ibc-transfer_transfer","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_channel","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_channel","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_client","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/babylond_tx_ibc_client","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_create","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_create","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_misbehaviour","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_misbehaviour","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_update","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_update","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_upgrade","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_ibc/client/babylond_tx_ibc_client_upgrade","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_multi-sign","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_multi-sign","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_multi-sign/babylond_tx_multi-sign-batch","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_multi-sign/babylond_tx_multi-sign-batch","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_sign","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_sign","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_sign/babylond_tx_sign-batch","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_sign/babylond_tx_sign-batch","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_slashing","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_slashing","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_slashing/babylond_tx_slashing_unjail","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_slashing/babylond_tx_slashing_unjail","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_staking","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_staking","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_cancel-unbond","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_cancel-unbond","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_create-validator","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_create-validator","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_delegate","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_delegate","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_edit-validator","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_edit-validator","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_redelegate","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_redelegate","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_unbond","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_staking/babylond_tx_staking_unbond","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_validate-signatures","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_validate-signatures","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_vesting","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_vesting","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-periodic-vesting-account","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-periodic-vesting-account","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-permanent-locked-account","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-permanent-locked-account","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-vesting-account","path":"/docs/cli/babylond/Babylond_tx/Babylond_tx_vesting/babylond_tx_vesting_create-vesting-account","sidebar":"docs"},{"id":"cli/babylond/Babylond_tx/babylond_tx_zoneconcierge","path":"/docs/cli/babylond/Babylond_tx/babylond_tx_zoneconcierge","sidebar":"docs"},{"id":"cli/babylond/babylond_validate-genesis","path":"/docs/cli/babylond/babylond_validate-genesis","sidebar":"docs"},{"id":"cli/babylond/babylond_version","path":"/docs/cli/babylond/babylond_version","sidebar":"docs"},{"id":"cli/babylond/babylondaddgenesisaccount","path":"/docs/cli/babylond/babylondaddgenesisaccount","sidebar":"docs"},{"id":"cli/babylond/babylondaddgenesisbls","path":"/docs/cli/babylond/babylondaddgenesisbls","sidebar":"docs"},{"id":"cli/babylond/babylondcollectgentxs","path":"/docs/cli/babylond/babylondcollectgentxs","sidebar":"docs"},{"id":"cli/babylond/babylondconfig","path":"/docs/cli/babylond/babylondconfig","sidebar":"docs"},{"id":"cli/babylond/babylondcreatebls","path":"/docs/cli/babylond/babylondcreatebls","sidebar":"docs"},{"id":"cli/babylond/babylondcreategenesiskey","path":"/docs/cli/babylond/babylondcreategenesiskey","sidebar":"docs"},{"id":"cli/babylond/babylondexport","path":"/docs/cli/babylond/babylondexport","sidebar":"docs"},{"id":"cli/babylond/babylondgentx","path":"/docs/cli/babylond/babylondgentx","sidebar":"docs"},{"id":"cli/babylond/babylondhelp","path":"/docs/cli/babylond/babylondhelp","sidebar":"docs"},{"id":"cli/babylond/babylondinit","path":"/docs/cli/babylond/babylondinit","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_account","path":"/docs/cli/babylond/BabylondQuery/babylond_query_account","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_auth","path":"/docs/cli/babylond/BabylondQuery/babylond_query_auth","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_account","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_account","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_accounts","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_accounts","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_address_by_acc_num","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_address_by_acc_num","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_account","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_account","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_accounts","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_module_accounts","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_auth/babylond_query_auth_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_authz","path":"/docs/cli/babylond/BabylondQuery/babylond_query_authz","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_authz/babylond_query_authz_grants","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/babylond_query_authz_grants","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_grantee","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_grantee","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_granter","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_authz/Babylond_query_authz_grants/babylond_query_authz_grants_by_granter","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_bank","path":"/docs/cli/babylond/BabylondQuery/babylond_query_bank","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_balances","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_balances","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_denom_metadata","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_denom_metadata","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_total","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_bank/babylond_query_bank_total","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_block","path":"/docs/cli/babylond/BabylondQuery/babylond_query_block","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_btccheckpoint","path":"/docs/cli/babylond/BabylondQuery/babylond_query_btccheckpoint","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_btc-height","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_btc-height","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_epoch_submissions","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_epoch_submissions","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btccheckpoint/babylond_query_btccheckpoint_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_btclightclient","path":"/docs/cli/babylond/BabylondQuery/babylond_query_btclightclient","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_base-header","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_base-header","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_contains","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_contains","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_hashes","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_hashes","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_main-chain","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_main-chain","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_tip","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_btclightclient/babylond_query_btclightclient_tip","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_checkpointing","path":"/docs/cli/babylond/BabylondQuery/babylond_query_checkpointing","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_raw_checkpoint","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/babylond_query_checkpointing_raw_checkpoint","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint/babylond_query_checkpointing_raw-checkpoint_list","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_checkpointing/Babylond_query_checkpointing_raw-checkpoint/babylond_query_checkpointing_raw-checkpoint_list","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_distribution","path":"/docs/cli/babylond/BabylondQuery/babylond_query_distribution","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_commission","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_commission","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_community-pool","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_community-pool","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_rewards","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_rewards","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_slashes","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_slashes","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_validator-outstanding-rewards","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_distribution/babylond_query_distribution_validator-outstanding-rewards","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_epoching","path":"/docs/cli/babylond/BabylondQuery/babylond_query_epoching","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_epoching/babylond_query_epoching_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_epoching/babylond_query_epoching_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_evidence","path":"/docs/cli/babylond/BabylondQuery/babylond_query_evidence","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_freegrant","path":"/docs/cli/babylond/BabylondQuery/babylond_query_freegrant","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grant","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grant","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-grantee","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-grantee","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-granter","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_freegrant/babylond_query_freegrant_grants-by-granter","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_gov","path":"/docs/cli/babylond/BabylondQuery/babylond_query_gov","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposit","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposit","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposits","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_deposits","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_param","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_param","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposal","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposal","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposals","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposals"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposer","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_proposer","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_tally","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_tally","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_vote","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_vote","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_votes","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_gov/babylond_query_gov_votes","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_channels","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_channels","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_client-state","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_client-state","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_connections","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_connections","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_end","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_end","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_next-sequence-receive","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_next-sequence-receive","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-ack","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-ack","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitment","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitment","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitments","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-commitments","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-receipt","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_packet-receipt","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-acks","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-acks","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-packets","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_channel/Babylond_query_ibc_channel_unreceived-packets","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state-heights","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-state-heights","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-states","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_consensus-states","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_header","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_header","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_self-consensus-state","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_self-consensus-state","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_state","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_state","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_states","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_states","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_status","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_client/Babylond_query_ibc_client_status","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_connections","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_connections","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_end","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_end","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_path","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_connection/Babylond_query_ibc_connection_path","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-hash","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-hash","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-trace","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-trace","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-traces","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_denom-traces","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_escrow-address","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_escrow-address","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_ibc/Babylond_query_ibc_transfer_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_mint","path":"/docs/cli/babylond/BabylondQuery/babylond_query_mint","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_annual-provisions","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_annual-provisions","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_inflation","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_inflation","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_mint/babylond_query_mint_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_params","path":"/docs/cli/babylond/BabylondQuery/babylond_query_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_params/babylond_query_params_subspace","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_params/babylond_query_params_subspace","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_slashing","path":"/docs/cli/babylond/BabylondQuery/babylond_query_slashing","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-info","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-info","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-infos","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_slashing/babylond_query_slashing_signing-infos","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_staking","path":"/docs/cli/babylond/BabylondQuery/babylond_query_staking","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegation","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegation","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations-to","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_delegations-to","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_historical-info","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_historical-info","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_params","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_pool","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_pool","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation-from","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegation-from","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegations","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_redelegations","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegation","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegation","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations-from","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_unbounding-delegations-from","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validator","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validator","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validators","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_staking/babylond_query_staking_validators","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_tendermint-validator-set","path":"/docs/cli/babylond/BabylondQuery/babylond_query_tendermint-validator-set","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_tx","path":"/docs/cli/babylond/BabylondQuery/babylond_query_tx","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_txs","path":"/docs/cli/babylond/BabylondQuery/babylond_query_txs","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_upgrade","path":"/docs/cli/babylond/BabylondQuery/babylond_query_upgrade","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_applied","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_applied","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_module_versions","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_module_versions","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_plan","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_upgrade/babylond_query_upgrade_plan","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/babylond_query_zoneconcierge","path":"/docs/cli/babylond/BabylondQuery/babylond_query_zoneconcierge","sidebar":"docs"},{"id":"cli/babylond/BabylondQuery/Babylond_query_zoneconcierge/babylond_query_zoneconcierge_params","path":"/docs/cli/babylond/BabylondQuery/Babylond_query_zoneconcierge/babylond_query_zoneconcierge_params","sidebar":"docs"},{"id":"cli/babylond/cli","path":"/docs/cli/babylond/cli","sidebar":"docs"},{"id":"cli/babylond/debug/babylonddebug","path":"/docs/cli/babylond/debug/babylonddebug","sidebar":"docs"},{"id":"cli/babylond/debug/babylonddebugaddr","path":"/docs/cli/babylond/debug/babylonddebugaddr","sidebar":"docs"},{"id":"cli/babylond/debug/babylonddebugpubkey","path":"/docs/cli/babylond/debug/babylonddebugpubkey","sidebar":"docs"},{"id":"cli/babylond/debug/babylonddebugpubkeyraw","path":"/docs/cli/babylond/debug/babylonddebugpubkeyraw","sidebar":"docs"},{"id":"cli/babylond/debug/babylonddebugrawbytes","path":"/docs/cli/babylond/debug/babylonddebugrawbytes","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeys","path":"/docs/cli/babylond/keys/babylondkeys","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysdd","path":"/docs/cli/babylond/keys/babylondkeysdd","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysdelete","path":"/docs/cli/babylond/keys/babylondkeysdelete","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysexport","path":"/docs/cli/babylond/keys/babylondkeysexport","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysimport","path":"/docs/cli/babylond/keys/babylondkeysimport","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeyslist","path":"/docs/cli/babylond/keys/babylondkeyslist","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysmigrate","path":"/docs/cli/babylond/keys/babylondkeysmigrate","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysmnemonic","path":"/docs/cli/babylond/keys/babylondkeysmnemonic","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysparse","path":"/docs/cli/babylond/keys/babylondkeysparse","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysrename","path":"/docs/cli/babylond/keys/babylondkeysrename","sidebar":"docs"},{"id":"cli/babylond/keys/babylondkeysshow","path":"/docs/cli/babylond/keys/babylondkeysshow","sidebar":"docs"},{"id":"cli/babylond/migrate","path":"/docs/cli/babylond/migrate","sidebar":"docs"},{"id":"cli/babylond/preparegenesis","path":"/docs/cli/babylond/preparegenesis","sidebar":"docs"},{"id":"developer-guides/grpcrestapi","path":"/docs/developer-guides/grpcrestapi","sidebar":"docs"},{"id":"developer-guides/modules/btccheckpoint","path":"/docs/developer-guides/modules/btccheckpoint","sidebar":"docs"},{"id":"developer-guides/modules/btclightclient","path":"/docs/developer-guides/modules/btclightclient","sidebar":"docs"},{"id":"developer-guides/modules/checkpointing","path":"/docs/developer-guides/modules/checkpointing","sidebar":"docs"},{"id":"developer-guides/modules/epoching","path":"/docs/developer-guides/modules/epoching","sidebar":"docs"},{"id":"developer-guides/modules/monitor","path":"/docs/developer-guides/modules/monitor"},{"id":"developer-guides/modules/overview","path":"/docs/developer-guides/modules/overview","sidebar":"docs"},{"id":"developer-guides/modules/reporter","path":"/docs/developer-guides/modules/reporter"},{"id":"developer-guides/modules/submitter","path":"/docs/developer-guides/modules/submitter"},{"id":"developer-guides/modules/zoneconcierge","path":"/docs/developer-guides/modules/zoneconcierge","sidebar":"docs"},{"id":"developer-guides/overview","path":"/docs/developer-guides/overview","sidebar":"docs"},{"id":"developer-guides/vigilantes/monitor","path":"/docs/developer-guides/vigilantes/monitor","sidebar":"docs"},{"id":"developer-guides/vigilantes/overview","path":"/docs/developer-guides/vigilantes/overview","sidebar":"docs"},{"id":"developer-guides/vigilantes/reporter","path":"/docs/developer-guides/vigilantes/reporter","sidebar":"docs"},{"id":"developer-guides/vigilantes/submitter","path":"/docs/developer-guides/vigilantes/submitter","sidebar":"docs"},{"id":"faq/overview","path":"/docs/faq/overview","sidebar":"docs"},{"id":"introduction/architecture","path":"/docs/introduction/architecture","sidebar":"docs"},{"id":"introduction/babylon-overview","path":"/docs/introduction/babylon-overview","sidebar":"docs"},{"id":"introduction/btc-staking","path":"/docs/introduction/btc-staking","sidebar":"docs"},{"id":"introduction/btc-timestamping","path":"/docs/introduction/btc-timestamping","sidebar":"docs"},{"id":"introduction/overview","path":"/docs/introduction/overview","sidebar":"docs"},{"id":"papers","path":"/docs/papers","sidebar":"docs"},{"id":"rpc-gateway/btccheckpoint/epochnum","path":"/docs/rpc-gateway/btccheckpoint/epochnum"},{"id":"rpc-gateway/btccheckpoint/overview","path":"/docs/rpc-gateway/btccheckpoint/overview"},{"id":"rpc-gateway/btccheckpoint/params","path":"/docs/rpc-gateway/btccheckpoint/params"},{"id":"rpc-gateway/btccheckpoint/submissions","path":"/docs/rpc-gateway/btccheckpoint/submissions"},{"id":"rpc-gateway/btclightclient/contains","path":"/docs/rpc-gateway/btclightclient/contains"},{"id":"rpc-gateway/btclightclient/containsbytes","path":"/docs/rpc-gateway/btclightclient/containsbytes"},{"id":"rpc-gateway/btclightclient/hashes","path":"/docs/rpc-gateway/btclightclient/hashes"},{"id":"rpc-gateway/btclightclient/header","path":"/docs/rpc-gateway/btclightclient/header"},{"id":"rpc-gateway/btclightclient/mainchain","path":"/docs/rpc-gateway/btclightclient/mainchain"},{"id":"rpc-gateway/btclightclient/overview","path":"/docs/rpc-gateway/btclightclient/overview"},{"id":"rpc-gateway/btclightclient/params","path":"/docs/rpc-gateway/btclightclient/params"},{"id":"rpc-gateway/btclightclient/tip","path":"/docs/rpc-gateway/btclightclient/tip"},{"id":"rpc-gateway/checkpointing/overview","path":"/docs/rpc-gateway/checkpointing/overview"},{"id":"rpc-gateway/checkpointing/rawcheckpoint","path":"/docs/rpc-gateway/checkpointing/rawcheckpoint"},{"id":"rpc-gateway/checkpointing/rawcheckpointlistepochnum","path":"/docs/rpc-gateway/checkpointing/rawcheckpointlistepochnum"},{"id":"rpc-gateway/checkpointing/rawcheckpointliststatus","path":"/docs/rpc-gateway/checkpointing/rawcheckpointliststatus"},{"id":"rpc-gateway/epoching/currentepoch","path":"/docs/rpc-gateway/epoching/currentepoch"},{"id":"rpc-gateway/epoching/delegationlifecycle","path":"/docs/rpc-gateway/epoching/delegationlifecycle"},{"id":"rpc-gateway/epoching/epoch","path":"/docs/rpc-gateway/epoching/epoch"},{"id":"rpc-gateway/epoching/epochinfomod","path":"/docs/rpc-gateway/epoching/epochinfomod"},{"id":"rpc-gateway/epoching/epochmsgs","path":"/docs/rpc-gateway/epoching/epochmsgs"},{"id":"rpc-gateway/epoching/latestepochmsgs","path":"/docs/rpc-gateway/epoching/latestepochmsgs"},{"id":"rpc-gateway/epoching/overview","path":"/docs/rpc-gateway/epoching/overview"},{"id":"rpc-gateway/epoching/params","path":"/docs/rpc-gateway/epoching/params"},{"id":"rpc-gateway/epoching/validatorlifecycle","path":"/docs/rpc-gateway/epoching/validatorlifecycle"},{"id":"rpc-gateway/overview","path":"/docs/rpc-gateway/overview"},{"id":"rpc-gateway/zcconcierge/overview","path":"/docs/rpc-gateway/zcconcierge/overview"},{"id":"rpc-gateway/zcconcierge/params","path":"/docs/rpc-gateway/zcconcierge/params"},{"id":"support","path":"/docs/support","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/become-btc-staker","path":"/docs/user-guides/btc-staking-testnet/become-btc-staker","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/become-validator","path":"/docs/user-guides/btc-staking-testnet/become-validator","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/become-vigilante","path":"/docs/user-guides/btc-staking-testnet/become-vigilante","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/czintegrate","path":"/docs/user-guides/btc-staking-testnet/czintegrate","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/deployment-overview","path":"/docs/user-guides/btc-staking-testnet/deployment-overview","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/finality-providers/eots-manager","path":"/docs/user-guides/btc-staking-testnet/finality-providers/eots-manager","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/finality-providers/finality-provider","path":"/docs/user-guides/btc-staking-testnet/finality-providers/finality-provider","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/finality-providers/overview","path":"/docs/user-guides/btc-staking-testnet/finality-providers/overview","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/getting-funds","path":"/docs/user-guides/btc-staking-testnet/getting-funds","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/network-information","path":"/docs/user-guides/btc-staking-testnet/network-information","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/overview","path":"/docs/user-guides/btc-staking-testnet/overview","sidebar":"docs"},{"id":"user-guides/btc-staking-testnet/setup-node","path":"/docs/user-guides/btc-staking-testnet/setup-node","sidebar":"docs"},{"id":"user-guides/installation","path":"/docs/user-guides/installation","sidebar":"docs"},{"id":"user-guides/overview","path":"/docs/user-guides/overview","sidebar":"docs"},{"id":"user-guides/testnet4","path":"/docs/user-guides/testnet4","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/introduction/overview","label":"Introduction"}}}}],"breadcrumbs":true}}}'),r=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const l=JSON.parse('{"docusaurusVersion":"2.2.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.2.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.2.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.2.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.2.0"},"docusaurus-plugin-redoc":{"type":"package","name":"docusaurus-plugin-redoc","version":"1.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.2.0"},"docusaurus-theme-redoc":{"type":"package","name":"docusaurus-theme-redoc","version":"1.4.0"}}}'),c={siteConfig:a.default,siteMetadata:l,globalData:i,i18n:r,codeTranslations:s},d=o.createContext(c);function p(e){let{children:t}=e;return o.createElement(d.Provider,{value:c},t)}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(67294),a=n(10412),i=n(35742),r=n(93285);function s(e){let{error:t,tryAgain:n}=e;return o.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},o.createElement("h1",null,"This page crashed."),o.createElement("p",null,t.message),o.createElement("button",{type:"button",onClick:n},"Try again"))}function l(e){let{error:t,tryAgain:n}=e;return o.createElement(d,{fallback:()=>o.createElement(s,{error:t,tryAgain:n})},o.createElement(i.Z,null,o.createElement("title",null,"Page Error")),o.createElement(r.Z,null,o.createElement(s,{error:t,tryAgain:n})))}const c=e=>o.createElement(l,e);class d extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.default.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??c)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const o="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:o,canUseEventListeners:o&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:o&&"IntersectionObserver"in window,canUseViewport:o&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(67294),a=n(70405);function i(e){return o.createElement(a.ql,e)}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(87462),a=n(67294),i=n(73727),r=n(18780),s=n(52263),l=n(13919),c=n(10412);const d=a.createContext({collectLink:()=>{}});var p=n(44996);function b(e,t){var n;let{isNavLink:b,to:u,href:y,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":f,autoAddBaseUrl:_=!0,...g}=e;const{siteConfig:{trailingSlash:v,baseUrl:k}}=(0,s.Z)(),{withBaseUrl:x}=(0,p.C)(),B=(0,a.useContext)(d),w=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>w.current));const q=u||y;const T=(0,l.Z)(q),C=null==q?void 0:q.replace("pathname://","");let E=void 0!==C?(S=C,_&&(e=>e.startsWith("/"))(S)?x(S):S):void 0;var S;E&&T&&(E=(0,r.applyTrailingSlash)(E,{trailingSlash:v,baseUrl:k}));const A=(0,a.useRef)(!1),I=b?i.OL:i.rU,j=c.default.canUseIntersectionObserver,R=(0,a.useRef)(),P=()=>{A.current||null==E||(window.docusaurus.preload(E),A.current=!0)};(0,a.useEffect)((()=>(!j&&T&&null!=E&&window.docusaurus.prefetch(E),()=>{j&&R.current&&R.current.disconnect()})),[R,E,j,T]);const L=(null==(n=E)?void 0:n.startsWith("#"))??!1,D=!E||!T||L;return D||f||B.collectLink(E),D?a.createElement("a",(0,o.Z)({ref:w,href:E},q&&!T&&{target:"_blank",rel:"noopener noreferrer"},g)):a.createElement(I,(0,o.Z)({},g,{onMouseEnter:P,onTouchStart:P,innerRef:e=>{w.current=e,j&&e&&T&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=E&&window.docusaurus.prefetch(E))}))})),R.current.observe(e))},to:E},b&&{isActive:m,activeClassName:h}))}const u=a.forwardRef(b)},11875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o=()=>null},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var o=n(67294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,o.isValidElement)(e)))?n.map(((e,t)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function r(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:o}=e;return a(r({message:n,id:o}),t)}function l(e){let{children:t,id:n,values:i}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=r({message:t,id:n});return o.createElement(o.Fragment,null,a(s,i))}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>o});const o="default"},13919:(e,t,n)=>{"use strict";function o(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!o(e)}n.d(t,{Z:()=>a,b:()=>o})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>r});var o=n(52263),a=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)();return{withBaseUrl:(n,o)=>function(e,t,n,o){let{forcePrependBaseUrl:i=!1,absolute:r=!1}=void 0===o?{}:o;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(i)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return r?e+s:s}(t,e,n,o)}}function r(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(67294),a=n(58940);function i(){return(0,o.useContext)(a._)}},28084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>i,eZ:()=>r});var o=n(52263),a=n(29935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function r(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const o=i(e),r=null==o?void 0:o[t];if(!r&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return r}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(67294),a=n(98934);function i(){return(0,o.useContext)(a._)}},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const r=o?`${o}.${a}`:a;var s;"object"==typeof(s=i)&&s&&Object.keys(s).length>0?e(i,r):t[r]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var o=n(67294);const a=o.createContext(null);function i(e){let{children:t,value:n}=e;const i=o.useContext(a),r=(0,o.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const o={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:o}}({parent:i,value:n})),[i,n]);return o.createElement(a.Provider,{value:r},t)}},94104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>u,gA:()=>d,_r:()=>l,Jo:()=>y,zh:()=>c,yW:()=>b,gB:()=>p});var o=n(16550),a=n(28084);const i=e=>e.versions.find((e=>e.isLast));function r(e,t){const n=function(e,t){const n=i(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,o.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=null==n?void 0:n.docs.find((e=>!!(0,o.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((o=>{o.id===t&&(n[e.name]=o)}))})),n}(a.id):{}}}const s={},l=()=>(0,a.OD)("docusaurus-plugin-content-docs")??s,c=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=l(),{pathname:n}=(0,o.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,o.LX)(t,{path:n.path,exact:!1,strict:!1})})),i=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!i&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return i}(t,n,e)}function p(e){return c(e).versions}function b(e){const t=c(e);return i(t)}function u(e){const t=c(e),{pathname:n}=(0,o.TH)();return r(t,n)}function y(e){const t=c(e),{pathname:n}=(0,o.TH)();return function(e,t){const n=i(e);return{latestDocSuggestion:r(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var o=n(74865),a=n.n(o);a().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var o=n(87410),a=n(36809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:o}=t;globalThis.Prism=e,o.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(o.Z)},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(67294);const a="iconExternalLink_nPIU";function i(e){let{width:t=13.5,height:n=13.5}=e;return o.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},o.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},93285:(e,t,n)=>{"use strict";n.d(t,{Z:()=>pt});var o=n(67294),a=n(86010),i=n(44763),r=n(1944),s=n(87462),l=n(16550),c=n(95999),d=n(85936);const p="docusaurus_skipToContent_fallback";function b(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function u(){const e=(0,o.useRef)(null),{action:t}=(0,l.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(p);t&&b(t)}),[]);return(0,d.S)((n=>{let{location:o}=n;e.current&&!o.hash&&"PUSH"===t&&b(e.current)})),{containerRef:e,onClick:n}}const y=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??y,{containerRef:n,onClick:a}=u();return o.createElement("div",{ref:n,role:"region","aria-label":y},o.createElement("a",(0,s.Z)({},e,{href:`#${p}`,onClick:a}),t))}var m=n(35281),f=n(19727);const _="skipToContent_fXgn";function g(){return o.createElement(h,{className:_})}var v=n(86668),k=n(59689);function x(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:i=1.2,className:r,...l}=e;return o.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),o.createElement("g",{stroke:a,strokeWidth:i},o.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const B="closeButton_CVFx";function w(e){return o.createElement("button",(0,s.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",B,e.className)}),o.createElement(x,{width:14,height:14,strokeWidth:3.1}))}const q="content_knG7";function T(e){const{announcementBar:t}=(0,v.L)(),{content:n}=t;return o.createElement("div",(0,s.Z)({},e,{className:(0,a.Z)(q,e.className),dangerouslySetInnerHTML:{__html:n}}))}const C="announcementBar_mb4j",E="announcementBarPlaceholder_vyr4",S="announcementBarClose_gvF7",A="announcementBarContent_xLdY";function I(){const{announcementBar:e}=(0,v.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:i,isCloseable:r}=e;return o.createElement("div",{className:C,style:{backgroundColor:a,color:i},role:"banner"},r&&o.createElement("div",{className:E}),o.createElement(T,{className:A}),r&&o.createElement(w,{onClick:n,className:S}))}var j=n(72961),R=n(12466);var P=n(902),L=n(13102);const D=o.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,j.e)(),t=(0,L.HY)(),[n,a]=(0,o.useState)(!1),i=null!==t.component,r=(0,P.D9)(i);return(0,o.useEffect)((()=>{i&&!r&&a(!0)}),[i,r]),(0,o.useEffect)((()=>{i?e.shown||a(!0):a(!1)}),[e.shown,i]),(0,o.useMemo)((()=>[n,a]),[n])}();return o.createElement(D.Provider,{value:n},t)}function U(e){if(e.component){const t=e.component;return o.createElement(t,e.props)}}function Q(){const e=(0,o.useContext)(D);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,o.useCallback)((()=>n(!1)),[n]),i=(0,L.HY)();return(0,o.useMemo)((()=>({shown:t,hide:a,content:U(i)})),[a,i,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:i}=e;const{shown:r}=Q();return o.createElement("div",{className:"navbar-sidebar"},t,o.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":r})},o.createElement("div",{className:"navbar-sidebar__item menu"},n),o.createElement("div",{className:"navbar-sidebar__item menu"},i)))}var O=n(92949),F=n(72389);function z(e){return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function H(e){return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const Z={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,value:n,onChange:i}=e;const r=(0,F.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return o.createElement("div",{className:(0,a.Z)(Z.toggle,t)},o.createElement("button",{className:(0,a.Z)("clean-btn",Z.toggleButton,!r&&Z.toggleButtonDisabled),type:"button",onClick:()=>i("dark"===n?"light":"dark"),disabled:!r,title:s,"aria-label":s,"aria-live":"polite"},o.createElement(z,{className:(0,a.Z)(Z.toggleIcon,Z.lightToggleIcon)}),o.createElement(H,{className:(0,a.Z)(Z.toggleIcon,Z.darkToggleIcon)})))}const K=o.memo(G);function W(e){let{className:t}=e;const n=(0,v.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,O.I)();return n?null:o.createElement(K,{className:t,value:a,onChange:i})}var V=n(21327);function $(){return o.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,j.e)();return o.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},o.createElement(x,{color:"var(--ifm-color-emphasis-600)"}))}function J(){return o.createElement("div",{className:"navbar-sidebar__brand"},o.createElement($,null),o.createElement(W,{className:"margin-right--md"}),o.createElement(Y,null))}var X=n(39960),ee=n(44996),te=n(13919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var oe=n(39471);function ae(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:i,label:r,html:l,isDropdownLink:c,prependBaseUrlToHref:d,...p}=e;const b=(0,ee.Z)(a),u=(0,ee.Z)(t),y=(0,ee.Z)(i,{forcePrependBaseUrl:!0}),h=r&&i&&!(0,te.Z)(i),m=l?{dangerouslySetInnerHTML:{__html:l}}:{children:o.createElement(o.Fragment,null,r,h&&o.createElement(oe.Z,c&&{width:12,height:12}))};return i?o.createElement(X.Z,(0,s.Z)({href:d?y:i},p,m)):o.createElement(X.Z,(0,s.Z)({to:b,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ne(n,t.pathname):t.pathname.startsWith(u)},p,m))}function ie(e){let{className:t,isDropdownItem:n=!1,...i}=e;const r=o.createElement(ae,(0,s.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},i));return n?o.createElement("li",null,r):r}function re(e){let{className:t,isDropdownItem:n,...i}=e;return o.createElement("li",{className:"menu__list-item"},o.createElement(ae,(0,s.Z)({className:(0,a.Z)("menu__link",t)},i)))}function se(e){let{mobile:t=!1,position:n,...a}=e;const i=t?re:ie;return o.createElement(i,(0,s.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var le=n(86043),ce=n(48596),de=n(52263);function pe(e,t){return e.some((e=>function(e,t){return!!(0,ce.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function be(e){let{items:t,position:n,className:i,onClick:r,...l}=e;const c=(0,o.useRef)(null),[d,p]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&p(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[c]),o.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":d})},o.createElement(ae,(0,s.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),p(!d))}}),l.children??l.label),o.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>o.createElement(Te,(0,s.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),p(!1);const t=c.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function ue(e){let{items:t,className:n,position:i,onClick:r,...c}=e;const d=function(){const{siteConfig:{baseUrl:e}}=(0,de.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),p=pe(t,d),{collapsed:b,toggleCollapsed:u,setCollapsed:y}=(0,le.u)({initialState:()=>!p});return(0,o.useEffect)((()=>{p&&y(!p)}),[d,p,y]),o.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":b})},o.createElement(ae,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),u()}}),c.children??c.label),o.createElement(le.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:b},t.map(((e,t)=>o.createElement(Te,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:r,activeClassName:"menu__link--active"},e,{key:t}))))))}function ye(e){let{mobile:t=!1,...n}=e;const a=t?ue:be;return o.createElement(a,n)}var he=n(94711);function me(e){let{width:t=20,height:n=20,...a}=e;return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),o.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const fe="iconLanguage_nlXk";var _e=n(11875);const ge="searchBox_ZlJk";function ve(e){let{children:t,className:n}=e;return o.createElement("div",{className:(0,a.Z)(n,ge)},t)}var ke=n(94104),xe=n(52802);var Be=n(60373);const we=e=>e.docs.find((t=>t.id===e.mainDocId));const qe={default:se,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...i}=e;const{i18n:{currentLocale:r,locales:d,localeConfigs:p}}=(0,de.Z)(),b=(0,he.l)(),{search:u,hash:y}=(0,l.TH)(),h=[...n,...d.map((e=>{const n=`${`pathname://${b.createUrl({locale:e,fullyQualified:!1})}`}${u}${y}`;return{label:p[e].label,lang:p[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===r?t?"menu__link--active":"dropdown__link--active":""}})),...a],m=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):p[r].label;return o.createElement(ye,(0,s.Z)({},i,{mobile:t,label:o.createElement(o.Fragment,null,o.createElement(me,{className:fe}),m),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:o.createElement(ve,{className:n},o.createElement(_e.Z,null))},dropdown:ye,html:function(e){let{value:t,className:n,mobile:i=!1,isDropdownItem:r=!1}=e;const s=r?"li":"div";return o.createElement(s,{className:(0,a.Z)({navbar__item:!i&&!r,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:r}=(0,ke.Iw)(a),l=(0,xe.vY)(t,a);return null===l?null:o.createElement(se,(0,s.Z)({exact:!0},i,{isActive:()=>(null==r?void 0:r.path)===l.path||!(null==r||!r.sidebar)&&r.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:r}=(0,ke.Iw)(a),l=(0,xe.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return o.createElement(se,(0,s.Z)({exact:!0},i,{isActive:()=>(null==r?void 0:r.sidebar)===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...i}=e;const r=(0,xe.lO)(a)[0],l=t??r.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(r).path;return o.createElement(se,(0,s.Z)({},i,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:i,dropdownItemsAfter:r,...d}=e;const{search:p,hash:b}=(0,l.TH)(),u=(0,ke.Iw)(n),y=(0,ke.gB)(n),{savePreferredVersionName:h}=(0,Be.J)(n),m=[...i,...y.map((e=>{const t=u.alternateDocVersions[e.name]??we(e);return{label:e.label,to:`${t.path}${p}${b}`,isActive:()=>e===u.activeVersion,onClick:()=>h(e.name)}})),...r],f=(0,xe.lO)(n)[0],_=t&&m.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):f.label,g=t&&m.length>1?void 0:we(f).path;return m.length<=1?o.createElement(se,(0,s.Z)({},d,{mobile:t,label:_,to:g,isActive:a?()=>!1:void 0})):o.createElement(ye,(0,s.Z)({},d,{mobile:t,label:_,to:g,items:m,isActive:a?()=>!1:void 0}))}};function Te(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),i=qe[a];if(!i)throw new Error(`No NavbarItem component found for type "${t}".`);return o.createElement(i,n)}function Ce(){const e=(0,j.e)(),t=(0,v.L)().navbar.items;return o.createElement("ul",{className:"menu__list"},t.map(((t,n)=>o.createElement(Te,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ee(e){return o.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),o.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Se(){const e=0===(0,v.L)().navbar.items.length,t=Q();return o.createElement(o.Fragment,null,!e&&o.createElement(Ee,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,j.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,o.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?o.createElement(M,{header:o.createElement(J,null),primaryMenu:o.createElement(Ce,null),secondaryMenu:o.createElement(Se,null)}):null}const Ie="navbarHideable_m1mJ",je="navbarHidden_jGov";function Re(e){return o.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:i}}=(0,v.L)(),r=(0,j.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,o.useState)(e),a=(0,o.useRef)(!1),i=(0,o.useRef)(0),r=(0,o.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,R.RF)(((t,o)=>{let{scrollY:r}=t;if(!e)return;if(r=s?n(!1):r+c{if(!e)return;const o=t.location.hash;if(o?document.getElementById(o.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:r,isNavbarVisible:t}}(n);return o.createElement("nav",{ref:s,className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ie,!l&&je],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":r.shown})},t,o.createElement(Re,{onClick:r.toggle}),o.createElement(Ae,null))}function Le(e){let{width:t=30,height:n=30,className:a,...i}=e;return o.createElement("svg",(0,s.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},i),o.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function De(){const{toggle:e,shown:t}=(0,j.e)();return o.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},o.createElement(Le,null))}const Ne="colorModeToggle_DEke";function Ue(e){let{items:t}=e;return o.createElement(o.Fragment,null,t.map(((e,t)=>o.createElement(Te,(0,s.Z)({},e,{key:t})))))}function Qe(e){let{left:t,right:n}=e;return o.createElement("div",{className:"navbar__inner"},o.createElement("div",{className:"navbar__items"},t),o.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Me(){const e=(0,j.e)(),t=(0,v.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),i=t.find((e=>"search"===e.type));return o.createElement(Qe,{left:o.createElement(o.Fragment,null,!e.disabled&&o.createElement(De,null),o.createElement($,null),o.createElement(Ue,{items:n})),right:o.createElement(o.Fragment,null,o.createElement(Ue,{items:a}),o.createElement(W,{className:Ne}),!i&&o.createElement(ve,null,o.createElement(_e.Z,null)))})}function Oe(){return o.createElement(Pe,null,o.createElement(Me,null))}function Fe(e){let{item:t}=e;const{to:n,href:a,label:i,prependBaseUrlToHref:r,...l}=t,c=(0,ee.Z)(n),d=(0,ee.Z)(a,{forcePrependBaseUrl:!0});return o.createElement(X.Z,(0,s.Z)({className:"footer__link-item"},a?{href:r?d:a}:{to:c},l),i,a&&!(0,te.Z)(a)&&o.createElement(oe.Z,null))}function ze(e){let{item:t}=e;return t.html?o.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):o.createElement("li",{key:t.href??t.to,className:"footer__item"},o.createElement(Fe,{item:t}))}function He(e){let{column:t}=e;return o.createElement("div",{className:"col footer__col"},o.createElement("div",{className:"footer__title"},t.title),o.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>o.createElement(ze,{key:t,item:e})))))}function Ze(e){let{columns:t}=e;return o.createElement("div",{className:"row footer__links"},t.map(((e,t)=>o.createElement(He,{key:t,column:e}))))}function Ge(){return o.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?o.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):o.createElement(Fe,{item:t})}function We(e){let{links:t}=e;return o.createElement("div",{className:"footer__links text--center"},o.createElement("div",{className:"footer__links"},t.map(((e,n)=>o.createElement(o.Fragment,{key:n},o.createElement(Ke,{item:e}),t.length!==n+1&&o.createElement(Ge,null))))))}function Ve(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?o.createElement(Ze,{columns:t}):o.createElement(We,{links:t})}var $e=n(50941);const Ye="footerLogoLink_BH7S";function Je(e){let{logo:t}=e;const{withBaseUrl:n}=(0,ee.C)(),i={light:n(t.src),dark:n(t.srcDark??t.src)};return o.createElement($e.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:i,width:t.width,height:t.height,style:t.style})}function Xe(e){let{logo:t}=e;return t.href?o.createElement(X.Z,{href:t.href,className:Ye,target:t.target},o.createElement(Je,{logo:t})):o.createElement(Je,{logo:t})}function et(e){let{copyright:t}=e;return o.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function tt(e){let{style:t,links:n,logo:i,copyright:r}=e;return o.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},o.createElement("div",{className:"container container-fluid"},n,(i||r)&&o.createElement("div",{className:"footer__bottom text--center"},i&&o.createElement("div",{className:"margin-bottom--sm"},i),r)))}function nt(){const{footer:e}=(0,v.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:i}=e;return o.createElement(tt,{style:i,links:n&&n.length>0&&o.createElement(Ve,{links:n}),logo:a&&o.createElement(Xe,{logo:a}),copyright:t&&o.createElement(et,{copyright:t})})}const ot=o.memo(nt);var at=n(50012);const it="docusaurus.tab.",rt=o.createContext(void 0);const st=(0,P.Qc)([O.S,k.pl,function(e){let{children:t}=e;const n=function(){const[e,t]=(0,o.useState)({}),n=(0,o.useCallback)(((e,t)=>{(0,at.W)(`docusaurus.tab.${e}`).set(t)}),[]);(0,o.useEffect)((()=>{try{const e={};(0,at._)().forEach((t=>{if(t.startsWith(it)){const n=t.substring(it.length);e[n]=(0,at.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const a=(0,o.useCallback)(((e,o)=>{t((t=>({...t,[e]:o}))),n(e,o)}),[n]);return(0,o.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:a})),[e,a])}();return o.createElement(rt.Provider,{value:n},t)},R.OC,Be.L5,r.VC,function(e){let{children:t}=e;return o.createElement(L.n2,null,o.createElement(j.M,null,o.createElement(N,null,t)))}]);function lt(e){let{children:t}=e;return o.createElement(st,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return o.createElement("main",{className:"container margin-vert--xl"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col col--6 col--offset-3"},o.createElement("h1",{className:"hero__title"},o.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),o.createElement("p",null,t.message),o.createElement("div",null,o.createElement("button",{type:"button",onClick:n},o.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const dt="mainWrapper_z2l0";function pt(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:c}=e;return(0,f.t)(),o.createElement(lt,null,o.createElement(r.d,{title:l,description:c}),o.createElement(g,null),o.createElement(I,null),o.createElement(Oe,null),o.createElement("div",{id:p,className:(0,a.Z)(m.k.wrapper.main,dt,s)},o.createElement(i.Z,{fallback:e=>o.createElement(ct,e)},t)),!n&&o.createElement(ot,null))}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(87462),a=n(67294),i=n(39960),r=n(44996),s=n(52263),l=n(86668),c=n(50941);function d(e){let{logo:t,alt:n,imageClassName:o}=e;const i={light:(0,r.Z)(t.src),dark:(0,r.Z)(t.srcDark||t.src)},s=a.createElement(c.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return o?a.createElement("div",{className:o},s):s}function p(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:c}}=(0,l.L)(),{imageClassName:p,titleClassName:b,...u}=e,y=(0,r.Z)((null==c?void 0:c.href)||"/"),h=n?"":t,m=(null==c?void 0:c.alt)??h;return a.createElement(i.Z,(0,o.Z)({to:y},u,(null==c?void 0:c.target)&&{target:c.target}),c&&a.createElement(d,{logo:c,alt:m,imageClassName:p}),null!=n&&a.createElement("b",{className:b},n))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(67294),a=n(35742);function i(e){let{locale:t,version:n,tag:i}=e;const r=t;return o.createElement(a.Z,null,t&&o.createElement("meta",{name:"docusaurus_locale",content:t}),n&&o.createElement("meta",{name:"docusaurus_version",content:n}),i&&o.createElement("meta",{name:"docusaurus_tag",content:i}),r&&o.createElement("meta",{name:"docsearch:language",content:r}),n&&o.createElement("meta",{name:"docsearch:version",content:n}),i&&o.createElement("meta",{name:"docsearch:docusaurus_tag",content:i}))}},50941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(87462),a=n(67294),i=n(86010),r=n(72389),s=n(92949);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,r.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:d,alt:p,...b}=e,u=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,u.map((e=>a.createElement("img",(0,o.Z)({key:e,src:c[e],alt:p,className:(0,i.Z)(l.themedImage,l[`themedImage--${e}`],d)},b)))))}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>r,z:()=>y});var o=n(87462),a=n(67294),i=n(10412);function r(e){let{initialState:t}=e;const[n,o]=(0,a.useState)(t??!1),i=(0,a.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:i}}const s={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:l;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const i=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=(null==o?void 0:o.duration)??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${(null==o?void 0:o.easing)??"ease-in-out"}`,height:`${t}px`}}function r(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return c(e,n),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(r(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{r()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function p(e){if(!i.default.canUseDOM)return e?s:l}function b(e){let{as:t="div",collapsed:n,children:o,animation:i,onCollapseTransitionEnd:r,className:s,disableSSRStyle:l}=e;const b=(0,a.useRef)(null);return d({collapsibleRef:b,collapsed:n,animation:i}),a.createElement(t,{ref:b,style:l?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(b.current,n),null==r||r(n))},className:s},o)}function u(e){let{collapsed:t,...n}=e;const[i,r]=(0,a.useState)(!t),[s,l]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||r(!0)}),[t]),(0,a.useLayoutEffect)((()=>{i&&l(t)}),[i,t]),i?a.createElement(b,(0,o.Z)({},n,{collapsed:s})):null}function y(e){let{lazy:t,...n}=e;const o=t?u:b;return a.createElement(o,n)}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>y,pl:()=>u});var o=n(67294),a=n(72389),i=n(50012),r=n(902),s=n(86668);const l=(0,i.W)("docusaurus.announcement.dismiss"),c=(0,i.W)("docusaurus.announcement.id"),d=()=>"true"===l.get(),p=e=>l.set(String(e)),b=o.createContext(null);function u(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,i]=(0,o.useState)((()=>!!t&&d()));(0,o.useEffect)((()=>{i(d())}),[]);const r=(0,o.useCallback)((()=>{p(!0),i(!0)}),[]);return(0,o.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const o=t!==n;c.set(t),o&&p(!1),!o&&d()||i(!1)}),[e]),(0,o.useMemo)((()=>({isActive:!!e&&!n,close:r})),[e,n,r])}();return o.createElement(b.Provider,{value:n},t)}function y(){const e=(0,o.useContext)(b);if(!e)throw new r.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>m,S:()=>h});var o=n(67294),a=n(10412),i=n(902),r=n(50012),s=n(86668);const l=o.createContext(void 0),c="theme",d=(0,r.W)(c),p="light",b="dark",u=e=>e===b?b:p;function y(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[i,r]=(0,o.useState)((e=>a.default.canUseDOM?u(document.documentElement.getAttribute("data-theme")):u(e))(e));(0,o.useEffect)((()=>{t&&d.del()}),[t]);const l=(0,o.useCallback)((function(t,o){void 0===o&&(o={});const{persist:a=!0}=o;t?(r(t),a&&(e=>{d.set(u(e))})(t)):(r(n?window.matchMedia("(prefers-color-scheme: dark)").matches?b:p:e),d.del())}),[n,e]);(0,o.useEffect)((()=>{document.documentElement.setAttribute("data-theme",u(i))}),[i]),(0,o.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&l(u(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,l]);const y=(0,o.useRef)(!1);return(0,o.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),o=()=>{window.matchMedia("print").matches||y.current?y.current=window.matchMedia("print").matches:l(null)};return e.addListener(o),()=>e.removeListener(o)}),[l,t,n]),(0,o.useMemo)((()=>({colorMode:i,setColorMode:l,get isDarkTheme(){return i===b},setLightTheme(){l(p)},setDarkTheme(){l(b)}})),[i,l])}function h(e){let{children:t}=e;const n=y();return o.createElement(l.Provider,{value:n},t)}function m(){const e=(0,o.useContext)(l);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>g,L5:()=>f});var o=n(67294),a=n(94104),i=n(29935),r=n(86668),s=n(52802),l=n(902),c=n(50012);const d=e=>`docs-preferred-version-${e}`,p=(e,t,n)=>{(0,c.W)(d(e),{persistence:t}).set(n)},b=(e,t)=>(0,c.W)(d(e),{persistence:t}).get(),u=(e,t)=>{(0,c.W)(d(e),{persistence:t}).del()};const y=o.createContext(null);function h(){const e=(0,a._r)(),t=(0,r.L)().docs.versionPersistence,n=(0,o.useMemo)((()=>Object.keys(e)),[e]),[i,s]=(0,o.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,o.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:o}=e;function a(e){const t=b(e,n);return o[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(u(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[i,(0,o.useMemo)((()=>({savePreferredVersion:function(e,n){p(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return o.createElement(y.Provider,{value:n},t)}function f(e){let{children:t}=e;return s.cE?o.createElement(m,null,t):o.createElement(o.Fragment,null,t)}function _(){const e=(0,o.useContext)(y);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function g(e){void 0===e&&(e=i.m);const t=(0,a.zh)(e),[n,r]=_(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,o.useCallback)((t=>{r.savePreferredVersion(e,t)}),[r,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var o=n(67294),a=n(902);const i=Symbol("EmptyContext"),r=o.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,o.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return o.createElement(r.Provider,{value:i},t)}function l(){const e=(0,o.useContext)(r);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>r});var o=n(67294),a=n(902);const i=o.createContext(null);function r(e){let{children:t,version:n}=e;return o.createElement(i.Provider,{value:n},t)}function s(){const e=(0,o.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>b,e:()=>u});var o=n(67294),a=n(13102),i=n(87524),r=n(16550),s=n(902);function l(e){!function(e){const t=(0,r.k6)(),n=(0,s.zX)(e);(0,o.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(86668);const d=o.createContext(void 0);function p(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[r,s]=(0,o.useState)(!1);l((()=>{if(r)return s(!1),!1}));const d=(0,o.useCallback)((()=>{s((e=>!e))}),[]);return(0,o.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,o.useMemo)((()=>({disabled:e,shouldRender:n,toggle:d,shown:r})),[e,n,d,r])}function b(e){let{children:t}=e;const n=p();return o.createElement(d.Provider,{value:n},t)}function u(){const e=o.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>r});var o=n(67294),a=n(902);const i=o.createContext(null);function r(e){let{children:t}=e;const n=(0,o.useState)({component:null,props:null});return o.createElement(i.Provider,{value:n},t)}function s(){const e=(0,o.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const r=(0,o.useContext)(i);if(!r)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=r,l=(0,a.Ql)(n);return(0,o.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,o.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>i});var o=n(67294);const a="navigation-with-keyboard";function i(){(0,o.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var o=n(67294),a=n(10412);const i="desktop",r="mobile",s="ssr";function l(){return a.default.canUseDOM?window.innerWidth>996?i:r:s}function c(){const[e,t]=(0,o.useState)((()=>l()));return(0,o.useEffect)((()=>{function e(){t(l())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>o});const o={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},52802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>w,Wl:()=>y,_F:()=>f,cE:()=>b,jA:()=>h,xz:()=>u,hI:()=>B,lO:()=>v,vY:()=>x,oz:()=>k,s1:()=>g});var o=n(67294),a=n(16550),i=n(18790),r=n(94104),s=n(60373),l=n(74477),c=n(1116);function d(e){return Array.from(new Set(e))}var p=n(48596);const b=!!r._r;function u(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function y(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=y(t);if(e)return e}}}function h(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=_({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,p.Mg)(e,t);function f(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||((e,t)=>e.some((e=>f(e,t))))(e.items,t))}function _(e){let{sidebarItems:t,pathname:n,onlyCategories:o=!1}=e;const a=[];return function e(t){for(const i of t)if("category"===i.type&&((0,p.Mg)(i.href,n)||e(i.items))||"link"===i.type&&(0,p.Mg)(i.href,n)){return o&&"category"!==i.type||a.unshift(i),!0}return!1}(t),a}function g(){var e;const t=(0,c.V)(),{pathname:n}=(0,a.TH)();return!1!==(null==(e=(0,r.gA)())?void 0:e.pluginData.breadcrumbs)&&t?_({sidebarItems:t.items,pathname:n}):null}function v(e){const{activeVersion:t}=(0,r.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,r.yW)(e);return(0,o.useMemo)((()=>d([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=v(t);return(0,o.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),o=t.find((t=>t[0]===e));if(!o)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return o[1]}),[e,n])}function x(e,t){const n=v(t);return(0,o.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),o=t.find((t=>t.id===e));if(!o){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${d(t.map((e=>e.id))).join("\n- ")}`)}return o}),[e,n])}function B(e){let{route:t,versionMetadata:n}=e;const o=(0,a.TH)(),r=t.routes,s=r.find((e=>(0,a.LX)(o.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,i.H)(r),sidebarName:l,sidebarItems:c}}function w(e){return e.filter((e=>"category"!==e.type||!!y(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>b,d:()=>d,VC:()=>u});var o=n(67294),a=n(86010),i=n(35742),r=n(30226);function s(){const e=o.useContext(r._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(44996),c=n(52263);function d(e){let{title:t,description:n,keywords:a,image:r,children:s}=e;const d=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:o}=t;return null!=e&&e.trim().length?`${e.trim()} ${o} ${n}`:n}(t),{withBaseUrl:p}=(0,l.C)(),b=r?p(r,{absolute:!0}):void 0;return o.createElement(i.Z,null,t&&o.createElement("title",null,d),t&&o.createElement("meta",{property:"og:title",content:d}),n&&o.createElement("meta",{name:"description",content:n}),n&&o.createElement("meta",{property:"og:description",content:n}),a&&o.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),b&&o.createElement("meta",{property:"og:image",content:b}),b&&o.createElement("meta",{name:"twitter:image",content:b}),s)}const p=o.createContext(void 0);function b(e){let{className:t,children:n}=e;const r=o.useContext(p),s=(0,a.Z)(r,t);return o.createElement(p.Provider,{value:s},o.createElement(i.Z,null,o.createElement("html",{className:s})),n)}function u(e){let{children:t}=e;const n=s(),i=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const r=`plugin-id-${n.plugin.id}`;return o.createElement(b,{className:(0,a.Z)(i,r)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>r,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>i});var o=n(67294);const a=n(10412).default.canUseDOM?o.useLayoutEffect:o.useEffect;function i(e){const t=(0,o.useRef)(e);return a((()=>{t.current=e}),[e]),(0,o.useCallback)((function(){return t.current(...arguments)}),[])}function r(e){const t=(0,o.useRef)();return a((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){var n,o,a;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(o=n.split("\n")[1])||null==(a=o.match(/at (?:\w+\.)?(?\w+)/))?void 0:a.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,o.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return o.createElement(o.Fragment,null,e.reduceRight(((e,t)=>o.createElement(t,null,e)),n))}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>r,Ns:()=>s});var o=n(67294),a=n(723),i=n(52263);function r(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function s(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,o.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function o(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(o)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>b,OC:()=>l,RF:()=>p});var o=n(67294),a=n(10412),i=n(72389),r=n(902);const s=o.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,o.useRef)(!0);return(0,o.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return o.createElement(s.Provider,{value:n},t)}function c(){const e=(0,o.useContext)(s);if(null==e)throw new r.i6("ScrollControllerProvider");return e}const d=()=>a.default.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,o.useRef)(d()),i=(0,r.zX)(e);(0,o.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();i(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,n,...t])}function b(){const e=(0,o.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function o(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>o,os:()=>a});n(52263);const o="default";function a(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{W:()=>s,_:()=>l});const o="localStorage";function a(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const r={get:()=>null,set:()=>{},del:()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(null==t?void 0:t.persistence);return null===n?r:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(o){console.error(`Docusaurus storage error, can't set ${e}=${t}`,o)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function l(e){void 0===e&&(e=o);const t=a(e);if(!t)return[];const n=[];for(let o=0;o{"use strict";n.d(t,{l:()=>i});var o=n(52263),a=n(16550);function i(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:i}}=(0,o.Z)(),{pathname:r}=(0,a.TH)(),s=i===n?e:e.replace(`/${i}/`,"/"),l=r.replace(e,"");return{createUrl:function(e){let{locale:o,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(o)}${l}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>r});var o=n(67294),a=n(16550),i=n(902);function r(e){const t=(0,a.TH)(),n=(0,i.D9)(t),r=(0,i.zX)(e);(0,o.useEffect)((()=>{n&&t!==n&&r({location:t,previousLocation:n})}),[r,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var o=n(52263);function a(){return(0,o.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:o}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),i="/"===a||a===o?a:(r=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(r):function(e){return e.endsWith("/")?e.slice(0,-1):e}(r));var r;return e.replace(a,i)}},18780:function(e,t,n){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return o(a).default}})},4750:function(e,t,n){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});o(n(10412)).default.canUseDOM&&(window.Prism=window.Prism||{},window.Prism.manual=!0)},86010:(e,t,n)=>{"use strict";function o(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>v,q_:()=>T,ob:()=>u,PP:()=>E,Ep:()=>b});var o=n(87462);function a(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,o=n+1,a=e.length;o=0;b--){var u=r[b];"."===u?i(r,b):".."===u?(i(r,b),p++):p&&(i(r,b),p--)}if(!c)for(;p--;p)r.unshift("..");!c||""===r[0]||r[0]&&a(r[0])||r.unshift("");var y=r.join("/");return n&&"/"!==y.substr(-1)&&(y+="/"),y};var s=n(38776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function b(e){var t=e.pathname,n=e.search,o=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),o&&"#"!==o&&(a+="#"===o.charAt(0)?o:"#"+o),a}function u(e,t,n,a){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",o="",a=t.indexOf("#");-1!==a&&(o=t.substr(a),t=t.substr(0,a));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===o?"":o}}(e),i.state=t):(void 0===(i=(0,o.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(i.key=n),a?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=r(i.pathname,a.pathname)):i.pathname=a.pathname:i.pathname||(i.pathname="/"),i}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,o,a){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof o?o(i,a):a(!0):a(!1!==i)}else a(!0)},appendListener:function(e){var n=!0;function o(){n&&e.apply(void 0,arguments)}return t.push(o),function(){n=!1,t=t.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),o=0;ot?n.splice(t,n.length-t,a):n.push(a),p({action:o,location:a,index:t,entries:n})}}))},replace:function(e,t){var o="REPLACE",a=u(e,t,h(),v.location);d.confirmTransitionTo(a,o,n,(function(e){e&&(v.entries[v.index]=a,p({action:o,location:a}))}))},go:g,goBack:function(){g(-1)},goForward:function(){g(1)},canGo:function(e){var t=v.index+e;return t>=0&&t{"use strict";var o=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},r={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return o.isMemo(e)?r:s[e.$$typeof]||a}s[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[o.Memo]=r;var c=Object.defineProperty,d=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,b=Object.getOwnPropertyDescriptor,u=Object.getPrototypeOf,y=Object.prototype;e.exports=function e(t,n,o){if("string"!=typeof n){if(y){var a=u(n);a&&a!==y&&e(t,a,o)}var r=d(n);p&&(r=r.concat(p(n)));for(var s=l(t),h=l(n),m=0;m{"use strict";e.exports=function(e,t,n,o,a,i,r,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,a,i,r,s],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},41304:(e,t,n)=>{"use strict";n.r(t)},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var o,a;o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}function r(e,t,n){var a;return(a="translate3d"===o.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,o.minimum,1),n.status=1===e?null:e;var i=n.render(!t),c=i.querySelector(o.barSelector),d=o.speed,p=o.easing;return i.offsetWidth,s((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),l(c,r(e,d,p)),1===e?(l(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){l(i,{transition:"all "+d+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),d)}),d)):setTimeout(t,d)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var a,r=t.querySelector(o.barSelector),s=e?"-100":i(n.status||0),c=document.querySelector(o.parent);return l(r,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),o.showSpinner||(a=t.querySelector(o.spinnerSelector))&&u(a),c!=document.body&&d(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){p(document.documentElement,"nprogress-busy"),p(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&u(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function o(t){var n=document.body.style;if(t in n)return t;for(var o,a=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((o=e[a]+i)in n)return o;return t}function a(e){return e=n(e),t[e]||(t[e]=o(e))}function i(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,o,a=arguments;if(2==a.length)for(n in t)void 0!==(o=t[n])&&t.hasOwnProperty(n)&&i(e,n,o);else i(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:b(e)).indexOf(" "+t+" ")>=0}function d(e,t){var n=b(e),o=n+t;c(n,t)||(e.className=o.substring(1))}function p(e,t){var n,o=b(e);c(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function b(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function u(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof o?o.call(t,n,t,e):o)||(e.exports=a)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach((function(e){o[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(a){return!1}}()?Object.assign:function(e,i){for(var r,s,l=a(e),c=1;c{"use strict";n.d(t,{Z:()=>i});var o=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},o={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=p.reach);B+=x.value.length,x=x.next){var w=x.value;if(t.length>e.length)return;if(!(w instanceof a)){var q,T=1;if(_){if(!(q=i(k,B,e,f))||q.index>=e.length)break;var C=q.index,E=q.index+q[0].length,S=B;for(S+=x.value.length;C>=S;)S+=(x=x.next).value.length;if(B=S-=x.value.length,x.value instanceof a)continue;for(var A=x;A!==t.tail&&(Sp.reach&&(p.reach=P);var L=x.prev;if(j&&(L=l(t,L,j),B+=j.length),c(t,L,T),x=l(t,L,new a(b,m?o.tokenize(I,m):I,g,I)),R&&l(t,x,R),T>1){var D={cause:b+","+y,reach:P};r(e,t,n,x.prev,B,D),p&&D.reach>p.reach&&(p.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var o=t.next,a={value:n,prev:t,next:o};return t.next=a,o.prev=a,e.length++,a}function c(e,t,n){for(var o=t.next,a=0;a"+i.content+""},o}(),a=o;o.default=o,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var o={"included-cdata":{pattern://i,inside:n}};o["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:o},a.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},o={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:o},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:o},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:o.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:o.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=o.variable[1].inside,r=0;r]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var o={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:o,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:o,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,o="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function r(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return o})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return o}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return o})).replace(/<>/g,(function(){return"(?:"+a+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:r(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:r(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:r(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:r(i),lookbehind:!0,greedy:!0},number:{pattern:r(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var o=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return o})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+i+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+i+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,o=t.length;n",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=b(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l=0&&u(c,"variable-input")}}}}function d(e){return t[n+e]}function p(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,o=t.inside.interpolation,a=o.inside["interpolation-punctuation"],i=o.pattern.source;function r(t,o){if(e.languages[t])return{pattern:RegExp("((?:"+o+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,o){var a={code:t,grammar:n,language:o};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var i=e.tokenize(t,n);if(3===i.length){var r=[1,1];r.push.apply(r,l(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,r)}return new e.Token("interpolation",i,o.alias,t)}function d(t,n,o){var a=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),r=0,d={},p=l(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(r++,o)););return d[n]=a,n})).join(""),n,o),b=Object.keys(d);return r=0,function e(t){for(var n=0;n=b.length)return;var o=t[n];if("string"==typeof o||"string"==typeof o.content){var a=b[r],i="string"==typeof o?o:o.content,s=i.indexOf(a);if(-1!==s){++r;var l=i.substring(0,s),p=c(d[a]),u=i.substring(s+a.length),y=[];if(l&&y.push(l),y.push(p),u){var h=[u];e(h),y.push.apply(y,h)}"string"==typeof o?(t.splice.apply(t,[n,1].concat(y)),n+=y.length-1):o.content=y}}else{var m=o.content;Array.isArray(m)?e(m):e([m])}}}(p),new e.Token(o,p,"language-"+o,t)}e.languages.javascript["template-string"]=[r("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),r("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),r("svg",/\bsvg/.source),r("markdown",/\b(?:markdown|md)/.source),r("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),r("sql",/\bsql/.source),t].filter(Boolean);var p={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function b(e){return"string"==typeof e?e:Array.isArray(e)?e.map(b).join(""):b(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in p&&function t(n){for(var o=0,a=n.length;o]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],o=0;o*\.{3}(?:[^{}]|)*\})/.source;function i(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return o})).replace(//g,(function(){return a})),RegExp(e,t)}a=i(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var r=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(r).join(""):""},s=function(t){for(var n=[],o=0;o0&&n[n.length-1].tagName===r(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:r(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:i=!0),(i||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var l=r(a);o0&&("string"==typeof t[o-1]||"plain-text"===t[o-1].type)&&(l=r(t[o-1])+l,t.splice(o-1,1),o--),t[o]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var o=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+o+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,o,a,i){if(n.language===o){var r=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof i&&!i(e))return e;for(var a,s=r.length;-1!==n.code.indexOf(a=t(o,s));)++s;return r[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,o){if(n.language===o&&n.tokenStack){n.grammar=e.languages[o];var a=0,i=Object.keys(n.tokenStack);!function r(s){for(var l=0;l=i.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var d=i[a],p=n.tokenStack[d],b="string"==typeof c?c:c.content,u=t(o,d),y=b.indexOf(u);if(y>-1){++a;var h=b.substring(0,y),m=new e.Token(o,e.tokenize(p,n.grammar),"language-"+o,p),f=b.substring(y+u.length),_=[];h&&_.push.apply(_,r([h])),_.push(m),f&&_.push.apply(_,r([f])),"string"==typeof c?s.splice.apply(s,[l,1].concat(_)):c.content=_}}else c.content&&r(c.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},o={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};o.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:o}},o.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:o}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:o}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:o}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:o}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:o.interpolation}},rest:o}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:o.interpolation,comment:o.comment,punctuation:/[{},]/}},func:o.func,string:o.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:o.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const i=a},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const o=n(29901),a=n(39642),i=new Set;function r(e){void 0===e?e=Object.keys(o.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...i,...Object.keys(Prism.languages)];a(o,e,t).load((e=>{if(!(e in o.languages))return void(r.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),i.add(e)}))}r.silent=!1,e.exports=r},6726:(e,t,n)=>{var o={"./":2885};function a(e){var t=i(e);return n(t)}function i(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}a.keys=function(){return Object.keys(o)},a.resolve=i,e.exports=a,a.id=6726},16500:(e,t,n)=>{var o={"./":2885};function a(e){var t=i(e);return n(t)}function i(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}a.keys=function(){return Object.keys(o)},a.resolve=i,e.exports=a,a.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,o=e.length;n "));var s={},l=e[o];if(l){function c(t){if(!(t in e))throw new Error(o+" depends on an unknown component "+t);if(!(t in s))for(var r in a(t,i),s[t]=!0,n[t])s[r]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[o]=s,i.pop()}}return function(e){var t=n[e];return t||(a(e,o),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(i,r,s){var l=function(e){var t={};for(var n in e){var o=e[n];for(var a in o)if("meta"!=a){var i=o[a];t[a]="string"==typeof i?{title:i}:i}}return t}(i),c=function(e){var n;return function(o){if(o in e)return o;if(!n)for(var a in n={},e){var i=e[a];t(i&&i.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[o]||o}}(l);r=r.map(c),s=(s||[]).map(c);var d=n(r),p=n(s);r.forEach((function e(n){var o=l[n];t(o&&o.require,(function(t){t in p||(d[t]=!0,e(t))}))}));for(var b,u=o(l),y=d;a(y);){for(var h in b={},y){var m=l[h];t(m&&m.modify,(function(e){e in p&&(b[e]=!0)}))}for(var f in p)if(!(f in d))for(var _ in u(f))if(_ in d){b[f]=!0;break}for(var g in y=b)d[g]=!0}var v={getIds:function(){var e=[];return v.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,o,a){var i=a?a.series:void 0,r=a?a.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var a,d=[];for(var p in t(e))p in n&&d.push(p);if(0===d.length)a=o(e);else{var b=r(d.map((function(e){var t=c(e);return delete l[e],t})));i?a=i(b,(function(){return o(e)})):o(e)}return s[e]=a}for(var d in n)c(d);var p=[];for(var b in l)p.push(s[b]);return r(p)}(u,d,t,n)}};return v}}();e.exports=t},92703:(e,t,n)=>{"use strict";var o=n(50414);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,r){if(r!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var o=n(67294),a=n(27418),i=n(54142);function r(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n

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%0DA^#Jn7^H1a~U5Nun|?m=HJk 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