From caa81af407d6de93afb3201763d35c10728e1a7d Mon Sep 17 00:00:00 2001 From: Software Engineer Date: Mon, 10 Feb 2025 13:44:46 +0100 Subject: [PATCH] v1.0.7 Upgrade (#140) * feat: add migrations for v1.0.7 upgrade * feat: add script for simulation of chain upgrade with 1 validator * feat: add cli command to obtain verification holder by verification id * fix: fix issue with upgrade handler * feat: add hack to deploy Arachnid Proxy * refactor: more meaningful error * feat: add deployment of Arachnid Deterministic Deployer * feat: add is_revoked to QueryVerificationsDetailsResponse * feat: return only non-revoked verification details in x/compliance precompile * refactor: remove redundant line * refactor: return in precompile only verifications with active issuers * refactor: prohibit to convert credential with inactive issuer * feat: add ffi query to revoke verification * feat: add precompile handler to revoke verification * feat: update compliance proxy contract * test: add test for revocation by issuer * feat: provide caller address during credential revocation * feat: add check for caller during credential revocation * fix: fix issue with invalid non-revocation proof * feat: add VT_BIOMETRIC verification type * refactor: remove unused dependencies * feat: add convertCredential function to precompile interface * test: add test for converting credential * feat: add convert credential function signature * feat: add method to encode convert credential request * feat: add precompile handler to convert credential * feat: add cli command to get attached holder public key * chore: intermediate commit * feat: add convertCredential method to precompile * test: fix test for converting v1 verification to v2 * fix: applying fix for pointer problem from https://github.com/CosmWasm/wasmvm/pull/571 * test: add test for non-revocation proof * refactor: remove unused consts and imports * refactor: add index variable * fix: fix build using `make build-docker-local` * ci: use actions/upload-artifact@v4 * fix: add checks in keeper for max sizes of verification data fields * test: add test for x/compliance keeper for case with huge original data * fix: add checks for verification details sizes in compliance_bridge precompile * feat: start refactoring self attestation to DCAP instead of deprecated EPID * feat: add DCAP-based self attestation for mainnet / testnet checks * chore: fix some clippy warnings * chore: run cargo clippy --fix --- .github/workflows/build-ci-multiplatform.yml | 10 +- .gitignore | 6 + app/app.go | 11 + app/upgrades/v1_0_7/constants.go | 5 + app/upgrades/v1_0_7/upgrades.go | 65 + docker/node.Dockerfile | 10 +- go-sgxvm/lib.go | 6 + go-sgxvm/src/enclave/enclave_api.rs | 6 +- go-sgxvm/src/enclave/mod.rs | 8 +- go-sgxvm/types/ffi.pb.go | 963 +++-- go.mod | 20 +- go.sum | 239 +- proto/swisstronik/compliance/entities.proto | 1 + proto/swisstronik/compliance/query.proto | 12 + scripts/local-node.sh | 18 +- scripts/upgrade/init.sh | 119 + scripts/upgrade/proposal.json | 19 + scripts/upgrade/run.sh | 91 + sgxvm/Enclave.edl | 5 +- sgxvm/proto/ffi.proto | 15 + sgxvm/src/attestation/hex.rs | 8 +- sgxvm/src/attestation/self_attestation.rs | 81 +- sgxvm/src/attestation/tls/helpers.rs | 2 +- sgxvm/src/attestation/utils.rs | 6 +- sgxvm/src/coder.rs | 25 +- sgxvm/src/encryption.rs | 4 +- sgxvm/src/handlers/tx.rs | 4 +- sgxvm/src/handlers/utils.rs | 34 +- sgxvm/src/key_manager/mod.rs | 20 +- sgxvm/src/key_manager/utils.rs | 2 +- sgxvm/src/lib.rs | 10 +- sgxvm/src/memory.rs | 118 +- sgxvm/src/ocall.rs | 92 +- sgxvm/src/precompiles/compliance_bridge.rs | 159 +- sgxvm/src/precompiles/mod.rs | 2 +- sgxvm/src/protobuf_generated/ffi.rs | 3306 +++++++++++------ sgxvm/src/storage.rs | 2 +- tests/solidity/contracts/ComplianceBridge.sol | 12 + tests/solidity/test/ComplianceBridge.js | 58 + tests/solidity/test/SDI.js | 89 +- x/compliance/client/cli/query.go | 56 + x/compliance/keeper/keeper.go | 119 +- x/compliance/keeper/keeper_test.go | 20 + x/compliance/keeper/msg_server.go | 11 +- x/compliance/keeper/msg_server_test.go | 9 + x/compliance/keeper/query.go | 17 + x/compliance/keeper/tree_manager.go | 12 +- x/compliance/keeper/tree_manager_test.go | 16 + x/compliance/types/consts.go | 8 + x/compliance/types/entities.go | 21 + x/compliance/types/entities.pb.go | 105 +- x/compliance/types/interfaces.go | 3 + x/compliance/types/query.pb.go | 633 +++- x/compliance/types/query.pb.gw.go | 101 + x/evm/keeper/sgxvm_connector.go | 78 +- x/evm/types/interfaces.go | 3 + 56 files changed, 4758 insertions(+), 2117 deletions(-) create mode 100644 app/upgrades/v1_0_7/constants.go create mode 100644 app/upgrades/v1_0_7/upgrades.go create mode 100755 scripts/upgrade/init.sh create mode 100644 scripts/upgrade/proposal.json create mode 100755 scripts/upgrade/run.sh create mode 100644 x/compliance/types/consts.go diff --git a/.github/workflows/build-ci-multiplatform.yml b/.github/workflows/build-ci-multiplatform.yml index d56a104b..db5a2fa0 100644 --- a/.github/workflows/build-ci-multiplatform.yml +++ b/.github/workflows/build-ci-multiplatform.yml @@ -2,7 +2,7 @@ name: Build CI multiplatform on: push: - branches: [ develop, '**-release', 'feat/sdi-changes' ] + branches: [ develop, '**-release' ] workflow_dispatch: env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} @@ -19,7 +19,7 @@ jobs: - name: "Build linux-amd64" run: make build-linux-cli-amd - name: "Upload file" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: swisstronikcli-linux-amd64 path: build/swisstronikcli-linux-amd64 @@ -34,7 +34,7 @@ jobs: - name: "Build macos-amd64" run: make build-macos-cli-amd - name: "Upload file" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: swisstronikcli-macos-amd64 path: build/swisstronikcli-macos-amd64 @@ -49,7 +49,7 @@ jobs: - name: "Build macos-arm64" run: make build-macos-cli-arm - name: "Upload file" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: swisstronikcli-macos-arm64 path: build/swisstronikcli-macos-arm64 @@ -66,7 +66,7 @@ jobs: - name: "Build windows-amd64" run: make build-windows-cli - name: "Upload file" - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: swisstronikcli-windows path: build/swisstronikcli-windows diff --git a/.gitignore b/.gitignore index c27c3ce2..8594c10e 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,9 @@ sgxvm/Enclave_private.pem # Other **target** *run.xml* + +# Upgrade testing +scripts/upgrade/old/ +scripts/upgrade/pid +scripts/upgrade/*.log +scripts/upgrade/.swisstronik* diff --git a/app/app.go b/app/app.go index cea8016d..4a41c5c6 100644 --- a/app/app.go +++ b/app/app.go @@ -118,6 +118,7 @@ import ( "swisstronik/app/upgrades/v1_0_4" "swisstronik/app/upgrades/v1_0_5" "swisstronik/app/upgrades/v1_0_6" + "swisstronik/app/upgrades/v1_0_7" "swisstronik/docs" "swisstronik/encoding" srvflags "swisstronik/server/flags" @@ -1088,6 +1089,16 @@ func (app *App) setupUpgradeHandlers() { ), ) + app.UpgradeKeeper.SetUpgradeHandler( + v1_0_7.UpgradeName, + v1_0_7.CreateUpgradeHandler( + app.ModuleManager, + app.ComplianceKeeper, + app.EvmKeeper, + app.configurator, + ), + ) + // When a planned update height is reached, the old binary will panic // writing on disk the height and name of the update that triggered it // This will read that value, and execute the preparations for the upgrade. diff --git a/app/upgrades/v1_0_7/constants.go b/app/upgrades/v1_0_7/constants.go new file mode 100644 index 00000000..22ec7c5f --- /dev/null +++ b/app/upgrades/v1_0_7/constants.go @@ -0,0 +1,5 @@ +package v1_0_7 + +const ( + UpgradeName = "v1.0.7" +) diff --git a/app/upgrades/v1_0_7/upgrades.go b/app/upgrades/v1_0_7/upgrades.go new file mode 100644 index 00000000..07ae1247 --- /dev/null +++ b/app/upgrades/v1_0_7/upgrades.go @@ -0,0 +1,65 @@ +package v1_0_7 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + compliancemoduletypes "swisstronik/x/compliance/types" + evmkeeper "swisstronik/x/evm/keeper" +) + +func CreateUpgradeHandler( + mm *module.Manager, + complianceKeeper compliancemoduletypes.ComplianceKeeper, + evmkeeper *evmkeeper.Keeper, + configurator module.Configurator, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Starting module migrations...") + + var migrationError error + + // Link verification id -> holder + complianceKeeper.IterateAddressDetails(ctx, func(addr sdk.AccAddress) (continue_ bool) { + addressDetails, err := complianceKeeper.GetAddressDetails(ctx, addr) + if err != nil { + migrationError = err + return false + } + + for _, verification := range addressDetails.Verifications { + if err = complianceKeeper.LinkVerificationToHolder(ctx, addr, verification.VerificationId); err != nil { + migrationError = err + return false + } + } + return true + }) + if migrationError != nil { + return vm, migrationError + } + + // Set bytecode of Arachnid Deterministic Deployment Proxy + // We use this dirty hack since non-EIP-155 transactions are not allowed + // in Swisstronik Network + proxyAddress := common.HexToAddress("0x4e59b44847b379578588920cA78FbF26c0B4956C") + codeBytes, err := hexutil.Decode("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3") + if err != nil { + return vm, err + } + + if err = evmkeeper.SetAccountCode(ctx, proxyAddress, codeBytes); err != nil { + return vm, err + } + + vm, err = mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade complete") + return vm, err + } +} diff --git a/docker/node.Dockerfile b/docker/node.Dockerfile index f70a7391..508d55a9 100644 --- a/docker/node.Dockerfile +++ b/docker/node.Dockerfile @@ -1,5 +1,5 @@ ############ Install Intel SGX SDK & SGX PSW -FROM ghcr.io/sigmagmbh/sgx:2.19-jammy as base +FROM ghcr.io/sigmagmbh/sgx:2.23-jammy-554238b as base RUN wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add - RUN apt-get update @@ -18,7 +18,7 @@ RUN curl https://sh.rustup.rs -sSf | bash -s -- -y > /dev/null 2>&1 RUN cargo install protobuf-codegen --version "2.8.1" -f # Install golang -ADD https://go.dev/dl/go1.19.linux-amd64.tar.gz go.linux-amd64.tar.gz +ADD https://go.dev/dl/go1.22.11.linux-amd64.tar.gz go.linux-amd64.tar.gz RUN tar -C /usr/local -xzf go.linux-amd64.tar.gz && rm go.linux-amd64.tar.gz RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest > /dev/null 2>&1 @@ -46,7 +46,7 @@ FROM base as hw-node COPY --from=compile-chain /root/chain/build/swisstronikd /usr/local/bin/swisstronikd COPY --from=compile-chain /root/.swisstronik-enclave /root/.swisstronik-enclave -COPY --from=compile-chain /root/chain/go-sgxvm/internal/api/libsgx_wrapper_v1.0.7.x86_64.so /lib/x86_64-linux-gnu/libsgx_wrapper_v1.0.5.x86_64.so +COPY --from=compile-chain /root/chain/go-sgxvm/internal/api/libsgx_wrapper_v1.0.7.x86_64.so /lib/x86_64-linux-gnu/libsgx_wrapper_v1.0.7.x86_64.so COPY --from=compile-chain /opt/intel /opt/intel EXPOSE 26656 26657 1317 9090 8545 8546 8999 @@ -62,11 +62,11 @@ RUN rm -rf /var/lib/apt/lists/* COPY --from=compile-chain /root/chain/build/swisstronikd /usr/bin/swisstronikd COPY --from=compile-chain /root/.swisstronik-enclave /root/.swisstronik-enclave -COPY --from=compile-chain /root/chain/go-sgxvm/internal/api/libsgx_wrapper_v1.0.7/x86_64.so /lib/x86_64-linux-gnu/libsgx_wrapper_v1.0.5.x86_64.so +COPY --from=compile-chain /root/chain/go-sgxvm/internal/api/libsgx_wrapper_v1.0.7.x86_64.so /lib/x86_64-linux-gnu/libsgx_wrapper_v1.0.7.x86_64.so COPY --from=compile-chain /opt/intel/sgxsdk/sdk_libs/* /lib/x86_64-linux-gnu/ COPY --from=compile-chain /root/chain/scripts/local-node.sh /root/local-node.sh -RUN /bin/bash /root/local-node.sh +RUN SWTR_BINARY="/usr/bin/swisstronikd" /bin/bash /root/local-node.sh EXPOSE 26656 26657 1317 9090 8545 8546 8999 diff --git a/go-sgxvm/lib.go b/go-sgxvm/lib.go index 08a549eb..d7d3d373 100644 --- a/go-sgxvm/lib.go +++ b/go-sgxvm/lib.go @@ -58,6 +58,10 @@ type QueryRevocationTreeRoot = types.QueryRevocationTreeRoot type QueryRevocationTreeRootResponse = types.QueryRevocationTreeRootResponse type QueryAddVerificationDetailsV2 = types.QueryAddVerificationDetailsV2 type QueryAddVerificationDetailsV2Response = types.QueryAddVerificationDetailsV2Response +type QueryRevokeVerification = types.QueryRevokeVerification +type QueryRevokeVerificationResponse = types.QueryRevokeVerificationResponse +type QueryConvertCredential = types.QueryConvertCredential +type QueryConvertCredentialResponse = types.QueryConvertCredentialResponse // Storage requests type CosmosRequest_GetAccount = types.CosmosRequest_GetAccount @@ -78,6 +82,8 @@ type CosmosRequest_InsertAccountNonce = types.CosmosRequest_InsertAccountNonce type CosmosRequest_IssuanceTreeRoot = types.CosmosRequest_IssuanceTreeRoot type CosmosRequest_RevocationTreeRoot = types.CosmosRequest_RevocationTreeRoot type CosmosRequest_AddVerificationDetailsV2 = types.CosmosRequest_AddVerificationDetailsV2 +type CosmosRequest_RevokeVerification = types.CosmosRequest_RevokeVerification +type CosmosRequest_ConvertCredential = types.CosmosRequest_ConvertCredential // Backend requests type CosmosRequest_BlockHash = types.CosmosRequest_BlockHash diff --git a/go-sgxvm/src/enclave/enclave_api.rs b/go-sgxvm/src/enclave/enclave_api.rs index f20737be..b4f8d175 100644 --- a/go-sgxvm/src/enclave/enclave_api.rs +++ b/go-sgxvm/src/enclave/enclave_api.rs @@ -6,9 +6,13 @@ use sgx_types::*; pub struct EnclaveApi; impl EnclaveApi { + #[cfg(feature = "hardware_mode")] pub fn check_node_status(eid: sgx_enclave_id_t) -> Result<(), Error> { + let qe_target_info = dcap_utils::get_qe_target_info()?; + let quote_size = dcap_utils::get_quote_size()?; + let mut ret_val = sgx_status_t::SGX_ERROR_UNEXPECTED; - let res = unsafe { super::ecall_status(eid, &mut ret_val) }; + let res = unsafe { super::ecall_status(eid, &mut ret_val, &qe_target_info, quote_size) }; match (res, ret_val) { (sgx_status_t::SGX_SUCCESS, sgx_status_t::SGX_SUCCESS) => Ok(()), diff --git a/go-sgxvm/src/enclave/mod.rs b/go-sgxvm/src/enclave/mod.rs index 941e3c15..338b0da3 100644 --- a/go-sgxvm/src/enclave/mod.rs +++ b/go-sgxvm/src/enclave/mod.rs @@ -66,7 +66,12 @@ extern "C" { socket_fd: c_int, ) -> sgx_status_t; - pub fn ecall_status(eid: sgx_enclave_id_t, retval: *mut sgx_status_t) -> sgx_status_t; + pub fn ecall_status( + eid: sgx_enclave_id_t, + retval: *mut sgx_status_t, + qe_target_info: &sgx_target_info_t, + quote_size: u32, + ) -> sgx_status_t; pub fn ecall_request_epoch_keys_dcap( eid: sgx_enclave_id_t, @@ -151,6 +156,7 @@ pub unsafe extern "C" fn handle_initialization_request( let result = match request.req { Some(req) => { match req { + #[cfg(feature = "hardware_mode")] node::SetupRequest_oneof_req::nodeStatus(_req) => { enclave_api::EnclaveApi::check_node_status(evm_enclave.geteid())?; let response = node::NodeStatusResponse::new(); diff --git a/go-sgxvm/types/ffi.pb.go b/go-sgxvm/types/ffi.pb.go index deb2e4a5..4885912c 100644 --- a/go-sgxvm/types/ffi.pb.go +++ b/go-sgxvm/types/ffi.pb.go @@ -2339,6 +2339,99 @@ func (x *QueryAddVerificationDetailsV2Response) GetVerificationId() []byte { return nil } +type QueryRevokeVerification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VerificationId []byte `protobuf:"bytes,1,opt,name=verificationId,proto3" json:"verificationId,omitempty"` + Issuer []byte `protobuf:"bytes,2,opt,name=issuer,proto3" json:"issuer,omitempty"` +} + +func (x *QueryRevokeVerification) Reset() { + *x = QueryRevokeVerification{} + if protoimpl.UnsafeEnabled { + mi := &file_ffi_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryRevokeVerification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryRevokeVerification) ProtoMessage() {} + +func (x *QueryRevokeVerification) ProtoReflect() protoreflect.Message { + mi := &file_ffi_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryRevokeVerification.ProtoReflect.Descriptor instead. +func (*QueryRevokeVerification) Descriptor() ([]byte, []int) { + return file_ffi_proto_rawDescGZIP(), []int{43} +} + +func (x *QueryRevokeVerification) GetVerificationId() []byte { + if x != nil { + return x.VerificationId + } + return nil +} + +func (x *QueryRevokeVerification) GetIssuer() []byte { + if x != nil { + return x.Issuer + } + return nil +} + +type QueryRevokeVerificationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryRevokeVerificationResponse) Reset() { + *x = QueryRevokeVerificationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ffi_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryRevokeVerificationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryRevokeVerificationResponse) ProtoMessage() {} + +func (x *QueryRevokeVerificationResponse) ProtoReflect() protoreflect.Message { + mi := &file_ffi_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryRevokeVerificationResponse.ProtoReflect.Descriptor instead. +func (*QueryRevokeVerificationResponse) Descriptor() ([]byte, []int) { + return file_ffi_proto_rawDescGZIP(), []int{44} +} + type QueryHasVerification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2353,7 +2446,7 @@ type QueryHasVerification struct { func (x *QueryHasVerification) Reset() { *x = QueryHasVerification{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[43] + mi := &file_ffi_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2366,7 +2459,7 @@ func (x *QueryHasVerification) String() string { func (*QueryHasVerification) ProtoMessage() {} func (x *QueryHasVerification) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[43] + mi := &file_ffi_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2379,7 +2472,7 @@ func (x *QueryHasVerification) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryHasVerification.ProtoReflect.Descriptor instead. func (*QueryHasVerification) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{43} + return file_ffi_proto_rawDescGZIP(), []int{45} } func (x *QueryHasVerification) GetUserAddress() []byte { @@ -2421,7 +2514,7 @@ type QueryHasVerificationResponse struct { func (x *QueryHasVerificationResponse) Reset() { *x = QueryHasVerificationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[44] + mi := &file_ffi_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2434,7 +2527,7 @@ func (x *QueryHasVerificationResponse) String() string { func (*QueryHasVerificationResponse) ProtoMessage() {} func (x *QueryHasVerificationResponse) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[44] + mi := &file_ffi_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2447,7 +2540,7 @@ func (x *QueryHasVerificationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryHasVerificationResponse.ProtoReflect.Descriptor instead. func (*QueryHasVerificationResponse) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{44} + return file_ffi_proto_rawDescGZIP(), []int{46} } func (x *QueryHasVerificationResponse) GetHasVerification() bool { @@ -2469,7 +2562,7 @@ type QueryGetVerificationData struct { func (x *QueryGetVerificationData) Reset() { *x = QueryGetVerificationData{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[45] + mi := &file_ffi_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2482,7 +2575,7 @@ func (x *QueryGetVerificationData) String() string { func (*QueryGetVerificationData) ProtoMessage() {} func (x *QueryGetVerificationData) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[45] + mi := &file_ffi_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2495,7 +2588,7 @@ func (x *QueryGetVerificationData) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryGetVerificationData.ProtoReflect.Descriptor instead. func (*QueryGetVerificationData) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{45} + return file_ffi_proto_rawDescGZIP(), []int{47} } func (x *QueryGetVerificationData) GetUserAddress() []byte { @@ -2545,7 +2638,7 @@ type VerificationDetails struct { func (x *VerificationDetails) Reset() { *x = VerificationDetails{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[46] + mi := &file_ffi_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2558,7 +2651,7 @@ func (x *VerificationDetails) String() string { func (*VerificationDetails) ProtoMessage() {} func (x *VerificationDetails) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[46] + mi := &file_ffi_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2571,7 +2664,7 @@ func (x *VerificationDetails) ProtoReflect() protoreflect.Message { // Deprecated: Use VerificationDetails.ProtoReflect.Descriptor instead. func (*VerificationDetails) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{46} + return file_ffi_proto_rawDescGZIP(), []int{48} } func (x *VerificationDetails) GetVerificationType() uint32 { @@ -2655,7 +2748,7 @@ type QueryGetVerificationDataResponse struct { func (x *QueryGetVerificationDataResponse) Reset() { *x = QueryGetVerificationDataResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[47] + mi := &file_ffi_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2668,7 +2761,7 @@ func (x *QueryGetVerificationDataResponse) String() string { func (*QueryGetVerificationDataResponse) ProtoMessage() {} func (x *QueryGetVerificationDataResponse) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[47] + mi := &file_ffi_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2681,7 +2774,7 @@ func (x *QueryGetVerificationDataResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryGetVerificationDataResponse.ProtoReflect.Descriptor instead. func (*QueryGetVerificationDataResponse) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{47} + return file_ffi_proto_rawDescGZIP(), []int{49} } func (x *QueryGetVerificationDataResponse) GetData() []*VerificationDetails { @@ -2691,6 +2784,107 @@ func (x *QueryGetVerificationDataResponse) GetData() []*VerificationDetails { return nil } +type QueryConvertCredential struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VerificationId []byte `protobuf:"bytes,1,opt,name=verificationId,proto3" json:"verificationId,omitempty"` + HolderPublicKey []byte `protobuf:"bytes,2,opt,name=holderPublicKey,proto3" json:"holderPublicKey,omitempty"` + Caller []byte `protobuf:"bytes,3,opt,name=caller,proto3" json:"caller,omitempty"` +} + +func (x *QueryConvertCredential) Reset() { + *x = QueryConvertCredential{} + if protoimpl.UnsafeEnabled { + mi := &file_ffi_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryConvertCredential) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryConvertCredential) ProtoMessage() {} + +func (x *QueryConvertCredential) ProtoReflect() protoreflect.Message { + mi := &file_ffi_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryConvertCredential.ProtoReflect.Descriptor instead. +func (*QueryConvertCredential) Descriptor() ([]byte, []int) { + return file_ffi_proto_rawDescGZIP(), []int{50} +} + +func (x *QueryConvertCredential) GetVerificationId() []byte { + if x != nil { + return x.VerificationId + } + return nil +} + +func (x *QueryConvertCredential) GetHolderPublicKey() []byte { + if x != nil { + return x.HolderPublicKey + } + return nil +} + +func (x *QueryConvertCredential) GetCaller() []byte { + if x != nil { + return x.Caller + } + return nil +} + +type QueryConvertCredentialResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryConvertCredentialResponse) Reset() { + *x = QueryConvertCredentialResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ffi_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryConvertCredentialResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryConvertCredentialResponse) ProtoMessage() {} + +func (x *QueryConvertCredentialResponse) ProtoReflect() protoreflect.Message { + mi := &file_ffi_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryConvertCredentialResponse.ProtoReflect.Descriptor instead. +func (*QueryConvertCredentialResponse) Descriptor() ([]byte, []int) { + return file_ffi_proto_rawDescGZIP(), []int{51} +} + type CosmosRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2718,13 +2912,15 @@ type CosmosRequest struct { // *CosmosRequest_IssuanceTreeRoot // *CosmosRequest_RevocationTreeRoot // *CosmosRequest_AddVerificationDetailsV2 + // *CosmosRequest_RevokeVerification + // *CosmosRequest_ConvertCredential Req isCosmosRequest_Req `protobuf_oneof:"req"` } func (x *CosmosRequest) Reset() { *x = CosmosRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[48] + mi := &file_ffi_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2737,7 +2933,7 @@ func (x *CosmosRequest) String() string { func (*CosmosRequest) ProtoMessage() {} func (x *CosmosRequest) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[48] + mi := &file_ffi_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2750,7 +2946,7 @@ func (x *CosmosRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CosmosRequest.ProtoReflect.Descriptor instead. func (*CosmosRequest) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{48} + return file_ffi_proto_rawDescGZIP(), []int{52} } func (m *CosmosRequest) GetReq() isCosmosRequest_Req { @@ -2900,6 +3096,20 @@ func (x *CosmosRequest) GetAddVerificationDetailsV2() *QueryAddVerificationDetai return nil } +func (x *CosmosRequest) GetRevokeVerification() *QueryRevokeVerification { + if x, ok := x.GetReq().(*CosmosRequest_RevokeVerification); ok { + return x.RevokeVerification + } + return nil +} + +func (x *CosmosRequest) GetConvertCredential() *QueryConvertCredential { + if x, ok := x.GetReq().(*CosmosRequest_ConvertCredential); ok { + return x.ConvertCredential + } + return nil +} + type isCosmosRequest_Req interface { isCosmosRequest_Req() } @@ -2984,6 +3194,14 @@ type CosmosRequest_AddVerificationDetailsV2 struct { AddVerificationDetailsV2 *QueryAddVerificationDetailsV2 `protobuf:"bytes,20,opt,name=addVerificationDetailsV2,proto3,oneof"` } +type CosmosRequest_RevokeVerification struct { + RevokeVerification *QueryRevokeVerification `protobuf:"bytes,21,opt,name=revokeVerification,proto3,oneof"` +} + +type CosmosRequest_ConvertCredential struct { + ConvertCredential *QueryConvertCredential `protobuf:"bytes,22,opt,name=convertCredential,proto3,oneof"` +} + func (*CosmosRequest_GetAccount) isCosmosRequest_Req() {} func (*CosmosRequest_ContainsKey) isCosmosRequest_Req() {} @@ -3024,6 +3242,10 @@ func (*CosmosRequest_RevocationTreeRoot) isCosmosRequest_Req() {} func (*CosmosRequest_AddVerificationDetailsV2) isCosmosRequest_Req() {} +func (*CosmosRequest_RevokeVerification) isCosmosRequest_Req() {} + +func (*CosmosRequest_ConvertCredential) isCosmosRequest_Req() {} + // Message with data required to execute `call` operation type SGXVMCallParams struct { state protoimpl.MessageState @@ -3045,7 +3267,7 @@ type SGXVMCallParams struct { func (x *SGXVMCallParams) Reset() { *x = SGXVMCallParams{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[49] + mi := &file_ffi_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3058,7 +3280,7 @@ func (x *SGXVMCallParams) String() string { func (*SGXVMCallParams) ProtoMessage() {} func (x *SGXVMCallParams) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[49] + mi := &file_ffi_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3071,7 +3293,7 @@ func (x *SGXVMCallParams) ProtoReflect() protoreflect.Message { // Deprecated: Use SGXVMCallParams.ProtoReflect.Descriptor instead. func (*SGXVMCallParams) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{49} + return file_ffi_proto_rawDescGZIP(), []int{53} } func (x *SGXVMCallParams) GetFrom() []byte { @@ -3163,7 +3385,7 @@ type SGXVMCreateParams struct { func (x *SGXVMCreateParams) Reset() { *x = SGXVMCreateParams{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[50] + mi := &file_ffi_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3176,7 +3398,7 @@ func (x *SGXVMCreateParams) String() string { func (*SGXVMCreateParams) ProtoMessage() {} func (x *SGXVMCreateParams) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[50] + mi := &file_ffi_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3189,7 +3411,7 @@ func (x *SGXVMCreateParams) ProtoReflect() protoreflect.Message { // Deprecated: Use SGXVMCreateParams.ProtoReflect.Descriptor instead. func (*SGXVMCreateParams) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{50} + return file_ffi_proto_rawDescGZIP(), []int{54} } func (x *SGXVMCreateParams) GetFrom() []byte { @@ -3261,7 +3483,7 @@ type SGXVMCallRequest struct { func (x *SGXVMCallRequest) Reset() { *x = SGXVMCallRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[51] + mi := &file_ffi_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3274,7 +3496,7 @@ func (x *SGXVMCallRequest) String() string { func (*SGXVMCallRequest) ProtoMessage() {} func (x *SGXVMCallRequest) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[51] + mi := &file_ffi_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3287,7 +3509,7 @@ func (x *SGXVMCallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SGXVMCallRequest.ProtoReflect.Descriptor instead. func (*SGXVMCallRequest) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{51} + return file_ffi_proto_rawDescGZIP(), []int{55} } func (x *SGXVMCallRequest) GetParams() *SGXVMCallParams { @@ -3317,7 +3539,7 @@ type SGXVMCreateRequest struct { func (x *SGXVMCreateRequest) Reset() { *x = SGXVMCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[52] + mi := &file_ffi_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3330,7 +3552,7 @@ func (x *SGXVMCreateRequest) String() string { func (*SGXVMCreateRequest) ProtoMessage() {} func (x *SGXVMCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[52] + mi := &file_ffi_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3343,7 +3565,7 @@ func (x *SGXVMCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SGXVMCreateRequest.ProtoReflect.Descriptor instead. func (*SGXVMCreateRequest) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{52} + return file_ffi_proto_rawDescGZIP(), []int{56} } func (x *SGXVMCreateRequest) GetParams() *SGXVMCreateParams { @@ -3372,7 +3594,7 @@ type NodePublicKeyRequest struct { func (x *NodePublicKeyRequest) Reset() { *x = NodePublicKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[53] + mi := &file_ffi_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3385,7 +3607,7 @@ func (x *NodePublicKeyRequest) String() string { func (*NodePublicKeyRequest) ProtoMessage() {} func (x *NodePublicKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[53] + mi := &file_ffi_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3398,7 +3620,7 @@ func (x *NodePublicKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NodePublicKeyRequest.ProtoReflect.Descriptor instead. func (*NodePublicKeyRequest) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{53} + return file_ffi_proto_rawDescGZIP(), []int{57} } func (x *NodePublicKeyRequest) GetBlockNumber() uint64 { @@ -3420,7 +3642,7 @@ type NodePublicKeyResponse struct { func (x *NodePublicKeyResponse) Reset() { *x = NodePublicKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[54] + mi := &file_ffi_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3433,7 +3655,7 @@ func (x *NodePublicKeyResponse) String() string { func (*NodePublicKeyResponse) ProtoMessage() {} func (x *NodePublicKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[54] + mi := &file_ffi_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3446,7 +3668,7 @@ func (x *NodePublicKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NodePublicKeyResponse.ProtoReflect.Descriptor instead. func (*NodePublicKeyResponse) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{54} + return file_ffi_proto_rawDescGZIP(), []int{58} } func (x *NodePublicKeyResponse) GetPublicKey() []byte { @@ -3469,7 +3691,7 @@ type EpochData struct { func (x *EpochData) Reset() { *x = EpochData{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[55] + mi := &file_ffi_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3482,7 +3704,7 @@ func (x *EpochData) String() string { func (*EpochData) ProtoMessage() {} func (x *EpochData) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[55] + mi := &file_ffi_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3495,7 +3717,7 @@ func (x *EpochData) ProtoReflect() protoreflect.Message { // Deprecated: Use EpochData.ProtoReflect.Descriptor instead. func (*EpochData) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{55} + return file_ffi_proto_rawDescGZIP(), []int{59} } func (x *EpochData) GetEpochNumber() uint32 { @@ -3530,7 +3752,7 @@ type ListEpochsResponse struct { func (x *ListEpochsResponse) Reset() { *x = ListEpochsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[56] + mi := &file_ffi_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3543,7 +3765,7 @@ func (x *ListEpochsResponse) String() string { func (*ListEpochsResponse) ProtoMessage() {} func (x *ListEpochsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[56] + mi := &file_ffi_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3556,7 +3778,7 @@ func (x *ListEpochsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEpochsResponse.ProtoReflect.Descriptor instead. func (*ListEpochsResponse) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{56} + return file_ffi_proto_rawDescGZIP(), []int{60} } func (x *ListEpochsResponse) GetEpochs() []*EpochData { @@ -3582,7 +3804,7 @@ type FFIRequest struct { func (x *FFIRequest) Reset() { *x = FFIRequest{} if protoimpl.UnsafeEnabled { - mi := &file_ffi_proto_msgTypes[57] + mi := &file_ffi_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3595,7 +3817,7 @@ func (x *FFIRequest) String() string { func (*FFIRequest) ProtoMessage() {} func (x *FFIRequest) ProtoReflect() protoreflect.Message { - mi := &file_ffi_proto_msgTypes[57] + mi := &file_ffi_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3608,7 +3830,7 @@ func (x *FFIRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FFIRequest.ProtoReflect.Descriptor instead. func (*FFIRequest) Descriptor() ([]byte, []int) { - return file_ffi_proto_rawDescGZIP(), []int{57} + return file_ffi_proto_rawDescGZIP(), []int{61} } func (m *FFIRequest) GetReq() isFFIRequest_Req { @@ -3889,242 +4111,271 @@ var file_ffi_proto_rawDesc = []byte{ 0x61, 0x69, 0x6c, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x48, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x20, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, - 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x26, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x22, 0x48, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x48, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x62, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x72, 0x22, 0x21, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x61, + 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x2a, 0x0a, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, + 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x73, 0x22, 0x48, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x61, + 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, + 0x68, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x62, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x75, + 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x9b, 0x03, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9b, 0x03, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x73, 0x73, - 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x69, 0x73, 0x73, 0x75, 0x61, + 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x11, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x13, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x54, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x82, 0x01, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x68, 0x6f, + 0x6c, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x1e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, + 0x0d, 0x0a, 0x0d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3a, 0x0a, 0x0a, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0a, 0x67, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x0b, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x00, + 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, + 0x08, 0x63, 0x6f, 0x64, 0x65, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x61, 0x73, + 0x68, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3e, 0x0a, + 0x08, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, + 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x47, 0x0a, + 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x4f, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, + 0x65, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, + 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, + 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x43, 0x65, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x37, + 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5e, 0x0a, 0x16, 0x61, 0x64, 0x64, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, + 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x16, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x48, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x13, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, + 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x13, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, + 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, + 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, + 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x6e, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x69, 0x73, 0x73, 0x75, 0x61, + 0x6e, 0x63, 0x65, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, + 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x65, + 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x52, 0x0a, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x52, + 0x6f, 0x6f, 0x74, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x64, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf5, 0x0b, 0x0a, 0x0d, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x67, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, - 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x08, - 0x63, 0x6f, 0x64, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x64, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x48, 0x00, 0x52, 0x08, - 0x63, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, - 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, - 0x6c, 0x12, 0x4f, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x65, - 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, - 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x48, 0x00, - 0x52, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, - 0x65, 0x6c, 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x48, - 0x00, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x43, 0x65, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x12, 0x5e, 0x0a, 0x16, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x61, 0x64, 0x64, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x61, 0x73, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0f, 0x68, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, - 0x13, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x13, 0x67, 0x65, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x52, - 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, - 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x12, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x6e, - 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, - 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x73, 0x75, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x00, 0x52, 0x10, - 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x12, 0x52, 0x0a, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, - 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x48, 0x00, - 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x65, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x64, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x56, 0x32, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x56, 0x32, 0x48, 0x00, - 0x52, 0x18, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x56, 0x32, 0x42, 0x05, 0x0a, 0x03, 0x72, 0x65, - 0x71, 0x22, 0xa0, 0x02, 0x0a, 0x0f, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, - 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x67, 0x61, 0x73, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x22, 0xf0, 0x01, 0x0a, 0x11, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, - 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x7b, 0x0a, 0x10, 0x53, 0x47, 0x58, 0x56, 0x4d, - 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x7f, 0x0a, 0x12, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x66, 0x69, - 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, - 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x38, 0x0a, 0x14, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, - 0x35, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x79, 0x0a, 0x09, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x6e, - 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x22, 0x40, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0a, 0x46, 0x46, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, - 0x69, 0x2e, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x43, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, - 0x66, 0x69, 0x2e, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x42, 0x05, 0x0a, 0x03, 0x72, 0x65, 0x71, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x69, 0x67, 0x6d, 0x61, 0x47, 0x6d, - 0x62, 0x48, 0x2f, 0x6c, 0x69, 0x62, 0x72, 0x75, 0x73, 0x74, 0x67, 0x6f, 0x2f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6c, 0x73, 0x56, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x66, + 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x56, 0x32, 0x48, 0x00, 0x52, 0x18, 0x61, 0x64, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x56, 0x32, 0x12, + 0x52, 0x0a, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x66, + 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x12, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x48, + 0x00, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x42, 0x05, 0x0a, 0x03, 0x72, 0x65, 0x71, 0x22, 0xa0, 0x02, 0x0a, 0x0f, + 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, + 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x02, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x66, 0x69, 0x2e, + 0x66, 0x66, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x22, 0xf0, + 0x01, 0x0a, 0x11, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, + 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x67, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x22, 0x7b, 0x0a, 0x10, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, + 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, + 0x66, 0x69, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x7f, + 0x0a, 0x12, 0x53, 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x53, + 0x47, 0x58, 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, + 0x66, 0x66, 0x69, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, + 0x38, 0x0a, 0x14, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x35, 0x0a, 0x15, 0x4e, 0x6f, 0x64, + 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x22, 0x79, 0x0a, 0x09, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, + 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6e, 0x6f, + 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x40, 0x0a, 0x12, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x45, 0x70, 0x6f, 0x63, + 0x68, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x22, 0xe4, 0x01, + 0x0a, 0x0a, 0x46, 0x46, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, + 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x53, 0x47, 0x58, 0x56, + 0x4d, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, + 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x53, 0x47, 0x58, + 0x56, 0x4d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x4b, 0x0a, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x66, 0x69, + 0x2e, 0x66, 0x66, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x05, 0x0a, + 0x03, 0x72, 0x65, 0x71, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x53, 0x69, 0x67, 0x6d, 0x61, 0x47, 0x6d, 0x62, 0x48, 0x2f, 0x6c, 0x69, 0x62, + 0x72, 0x75, 0x73, 0x74, 0x67, 0x6f, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4139,7 +4390,7 @@ func file_ffi_proto_rawDescGZIP() []byte { return file_ffi_proto_rawDescData } -var file_ffi_proto_msgTypes = make([]protoimpl.MessageInfo, 58) +var file_ffi_proto_msgTypes = make([]protoimpl.MessageInfo, 62) var file_ffi_proto_goTypes = []any{ (*AccessListItem)(nil), // 0: ffi.ffi.AccessListItem (*TransactionData)(nil), // 1: ffi.ffi.TransactionData @@ -4184,21 +4435,25 @@ var file_ffi_proto_goTypes = []any{ (*QueryAddVerificationDetailsResponse)(nil), // 40: ffi.ffi.QueryAddVerificationDetailsResponse (*QueryAddVerificationDetailsV2)(nil), // 41: ffi.ffi.QueryAddVerificationDetailsV2 (*QueryAddVerificationDetailsV2Response)(nil), // 42: ffi.ffi.QueryAddVerificationDetailsV2Response - (*QueryHasVerification)(nil), // 43: ffi.ffi.QueryHasVerification - (*QueryHasVerificationResponse)(nil), // 44: ffi.ffi.QueryHasVerificationResponse - (*QueryGetVerificationData)(nil), // 45: ffi.ffi.QueryGetVerificationData - (*VerificationDetails)(nil), // 46: ffi.ffi.VerificationDetails - (*QueryGetVerificationDataResponse)(nil), // 47: ffi.ffi.QueryGetVerificationDataResponse - (*CosmosRequest)(nil), // 48: ffi.ffi.CosmosRequest - (*SGXVMCallParams)(nil), // 49: ffi.ffi.SGXVMCallParams - (*SGXVMCreateParams)(nil), // 50: ffi.ffi.SGXVMCreateParams - (*SGXVMCallRequest)(nil), // 51: ffi.ffi.SGXVMCallRequest - (*SGXVMCreateRequest)(nil), // 52: ffi.ffi.SGXVMCreateRequest - (*NodePublicKeyRequest)(nil), // 53: ffi.ffi.NodePublicKeyRequest - (*NodePublicKeyResponse)(nil), // 54: ffi.ffi.NodePublicKeyResponse - (*EpochData)(nil), // 55: ffi.ffi.EpochData - (*ListEpochsResponse)(nil), // 56: ffi.ffi.ListEpochsResponse - (*FFIRequest)(nil), // 57: ffi.ffi.FFIRequest + (*QueryRevokeVerification)(nil), // 43: ffi.ffi.QueryRevokeVerification + (*QueryRevokeVerificationResponse)(nil), // 44: ffi.ffi.QueryRevokeVerificationResponse + (*QueryHasVerification)(nil), // 45: ffi.ffi.QueryHasVerification + (*QueryHasVerificationResponse)(nil), // 46: ffi.ffi.QueryHasVerificationResponse + (*QueryGetVerificationData)(nil), // 47: ffi.ffi.QueryGetVerificationData + (*VerificationDetails)(nil), // 48: ffi.ffi.VerificationDetails + (*QueryGetVerificationDataResponse)(nil), // 49: ffi.ffi.QueryGetVerificationDataResponse + (*QueryConvertCredential)(nil), // 50: ffi.ffi.QueryConvertCredential + (*QueryConvertCredentialResponse)(nil), // 51: ffi.ffi.QueryConvertCredentialResponse + (*CosmosRequest)(nil), // 52: ffi.ffi.CosmosRequest + (*SGXVMCallParams)(nil), // 53: ffi.ffi.SGXVMCallParams + (*SGXVMCreateParams)(nil), // 54: ffi.ffi.SGXVMCreateParams + (*SGXVMCallRequest)(nil), // 55: ffi.ffi.SGXVMCallRequest + (*SGXVMCreateRequest)(nil), // 56: ffi.ffi.SGXVMCreateRequest + (*NodePublicKeyRequest)(nil), // 57: ffi.ffi.NodePublicKeyRequest + (*NodePublicKeyResponse)(nil), // 58: ffi.ffi.NodePublicKeyResponse + (*EpochData)(nil), // 59: ffi.ffi.EpochData + (*ListEpochsResponse)(nil), // 60: ffi.ffi.ListEpochsResponse + (*FFIRequest)(nil), // 61: ffi.ffi.FFIRequest } var file_ffi_proto_depIdxs = []int32{ 0, // 0: ffi.ffi.TransactionData.accessList:type_name -> ffi.ffi.AccessListItem @@ -4206,7 +4461,7 @@ var file_ffi_proto_depIdxs = []int32{ 2, // 2: ffi.ffi.HandleTransactionRequest.tx_context:type_name -> ffi.ffi.TransactionContext 6, // 3: ffi.ffi.HandleTransactionResponse.logs:type_name -> ffi.ffi.Log 5, // 4: ffi.ffi.Log.topics:type_name -> ffi.ffi.Topic - 46, // 5: ffi.ffi.QueryGetVerificationDataResponse.data:type_name -> ffi.ffi.VerificationDetails + 48, // 5: ffi.ffi.QueryGetVerificationDataResponse.data:type_name -> ffi.ffi.VerificationDetails 7, // 6: ffi.ffi.CosmosRequest.getAccount:type_name -> ffi.ffi.QueryGetAccount 13, // 7: ffi.ffi.CosmosRequest.containsKey:type_name -> ffi.ffi.QueryContainsKey 17, // 8: ffi.ffi.CosmosRequest.accountCode:type_name -> ffi.ffi.QueryGetAccountCode @@ -4220,28 +4475,30 @@ var file_ffi_proto_depIdxs = []int32{ 31, // 16: ffi.ffi.CosmosRequest.removeStorage:type_name -> ffi.ffi.QueryRemoveStorage 33, // 17: ffi.ffi.CosmosRequest.blockHash:type_name -> ffi.ffi.QueryBlockHash 39, // 18: ffi.ffi.CosmosRequest.addVerificationDetails:type_name -> ffi.ffi.QueryAddVerificationDetails - 43, // 19: ffi.ffi.CosmosRequest.hasVerification:type_name -> ffi.ffi.QueryHasVerification - 45, // 20: ffi.ffi.CosmosRequest.getVerificationData:type_name -> ffi.ffi.QueryGetVerificationData + 45, // 19: ffi.ffi.CosmosRequest.hasVerification:type_name -> ffi.ffi.QueryHasVerification + 47, // 20: ffi.ffi.CosmosRequest.getVerificationData:type_name -> ffi.ffi.QueryGetVerificationData 9, // 21: ffi.ffi.CosmosRequest.insertAccountBalance:type_name -> ffi.ffi.QueryInsertAccountBalance 11, // 22: ffi.ffi.CosmosRequest.insertAccountNonce:type_name -> ffi.ffi.QueryInsertAccountNonce 35, // 23: ffi.ffi.CosmosRequest.issuanceTreeRoot:type_name -> ffi.ffi.QueryIssuanceTreeRoot 37, // 24: ffi.ffi.CosmosRequest.revocationTreeRoot:type_name -> ffi.ffi.QueryRevocationTreeRoot 41, // 25: ffi.ffi.CosmosRequest.addVerificationDetailsV2:type_name -> ffi.ffi.QueryAddVerificationDetailsV2 - 0, // 26: ffi.ffi.SGXVMCallParams.accessList:type_name -> ffi.ffi.AccessListItem - 0, // 27: ffi.ffi.SGXVMCreateParams.accessList:type_name -> ffi.ffi.AccessListItem - 49, // 28: ffi.ffi.SGXVMCallRequest.params:type_name -> ffi.ffi.SGXVMCallParams - 2, // 29: ffi.ffi.SGXVMCallRequest.context:type_name -> ffi.ffi.TransactionContext - 50, // 30: ffi.ffi.SGXVMCreateRequest.params:type_name -> ffi.ffi.SGXVMCreateParams - 2, // 31: ffi.ffi.SGXVMCreateRequest.context:type_name -> ffi.ffi.TransactionContext - 55, // 32: ffi.ffi.ListEpochsResponse.epochs:type_name -> ffi.ffi.EpochData - 51, // 33: ffi.ffi.FFIRequest.callRequest:type_name -> ffi.ffi.SGXVMCallRequest - 52, // 34: ffi.ffi.FFIRequest.createRequest:type_name -> ffi.ffi.SGXVMCreateRequest - 53, // 35: ffi.ffi.FFIRequest.publicKeyRequest:type_name -> ffi.ffi.NodePublicKeyRequest - 36, // [36:36] is the sub-list for method output_type - 36, // [36:36] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 43, // 26: ffi.ffi.CosmosRequest.revokeVerification:type_name -> ffi.ffi.QueryRevokeVerification + 50, // 27: ffi.ffi.CosmosRequest.convertCredential:type_name -> ffi.ffi.QueryConvertCredential + 0, // 28: ffi.ffi.SGXVMCallParams.accessList:type_name -> ffi.ffi.AccessListItem + 0, // 29: ffi.ffi.SGXVMCreateParams.accessList:type_name -> ffi.ffi.AccessListItem + 53, // 30: ffi.ffi.SGXVMCallRequest.params:type_name -> ffi.ffi.SGXVMCallParams + 2, // 31: ffi.ffi.SGXVMCallRequest.context:type_name -> ffi.ffi.TransactionContext + 54, // 32: ffi.ffi.SGXVMCreateRequest.params:type_name -> ffi.ffi.SGXVMCreateParams + 2, // 33: ffi.ffi.SGXVMCreateRequest.context:type_name -> ffi.ffi.TransactionContext + 59, // 34: ffi.ffi.ListEpochsResponse.epochs:type_name -> ffi.ffi.EpochData + 55, // 35: ffi.ffi.FFIRequest.callRequest:type_name -> ffi.ffi.SGXVMCallRequest + 56, // 36: ffi.ffi.FFIRequest.createRequest:type_name -> ffi.ffi.SGXVMCreateRequest + 57, // 37: ffi.ffi.FFIRequest.publicKeyRequest:type_name -> ffi.ffi.NodePublicKeyRequest + 38, // [38:38] is the sub-list for method output_type + 38, // [38:38] is the sub-list for method input_type + 38, // [38:38] is the sub-list for extension type_name + 38, // [38:38] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_ffi_proto_init() } @@ -4767,7 +5024,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*QueryHasVerification); i { + switch v := v.(*QueryRevokeVerification); i { case 0: return &v.state case 1: @@ -4779,7 +5036,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*QueryHasVerificationResponse); i { + switch v := v.(*QueryRevokeVerificationResponse); i { case 0: return &v.state case 1: @@ -4791,7 +5048,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*QueryGetVerificationData); i { + switch v := v.(*QueryHasVerification); i { case 0: return &v.state case 1: @@ -4803,7 +5060,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*VerificationDetails); i { + switch v := v.(*QueryHasVerificationResponse); i { case 0: return &v.state case 1: @@ -4815,7 +5072,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[47].Exporter = func(v any, i int) any { - switch v := v.(*QueryGetVerificationDataResponse); i { + switch v := v.(*QueryGetVerificationData); i { case 0: return &v.state case 1: @@ -4827,7 +5084,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[48].Exporter = func(v any, i int) any { - switch v := v.(*CosmosRequest); i { + switch v := v.(*VerificationDetails); i { case 0: return &v.state case 1: @@ -4839,7 +5096,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[49].Exporter = func(v any, i int) any { - switch v := v.(*SGXVMCallParams); i { + switch v := v.(*QueryGetVerificationDataResponse); i { case 0: return &v.state case 1: @@ -4851,7 +5108,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[50].Exporter = func(v any, i int) any { - switch v := v.(*SGXVMCreateParams); i { + switch v := v.(*QueryConvertCredential); i { case 0: return &v.state case 1: @@ -4863,7 +5120,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[51].Exporter = func(v any, i int) any { - switch v := v.(*SGXVMCallRequest); i { + switch v := v.(*QueryConvertCredentialResponse); i { case 0: return &v.state case 1: @@ -4875,7 +5132,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[52].Exporter = func(v any, i int) any { - switch v := v.(*SGXVMCreateRequest); i { + switch v := v.(*CosmosRequest); i { case 0: return &v.state case 1: @@ -4887,7 +5144,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[53].Exporter = func(v any, i int) any { - switch v := v.(*NodePublicKeyRequest); i { + switch v := v.(*SGXVMCallParams); i { case 0: return &v.state case 1: @@ -4899,7 +5156,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[54].Exporter = func(v any, i int) any { - switch v := v.(*NodePublicKeyResponse); i { + switch v := v.(*SGXVMCreateParams); i { case 0: return &v.state case 1: @@ -4911,7 +5168,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[55].Exporter = func(v any, i int) any { - switch v := v.(*EpochData); i { + switch v := v.(*SGXVMCallRequest); i { case 0: return &v.state case 1: @@ -4923,7 +5180,7 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[56].Exporter = func(v any, i int) any { - switch v := v.(*ListEpochsResponse); i { + switch v := v.(*SGXVMCreateRequest); i { case 0: return &v.state case 1: @@ -4935,6 +5192,54 @@ func file_ffi_proto_init() { } } file_ffi_proto_msgTypes[57].Exporter = func(v any, i int) any { + switch v := v.(*NodePublicKeyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ffi_proto_msgTypes[58].Exporter = func(v any, i int) any { + switch v := v.(*NodePublicKeyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ffi_proto_msgTypes[59].Exporter = func(v any, i int) any { + switch v := v.(*EpochData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ffi_proto_msgTypes[60].Exporter = func(v any, i int) any { + switch v := v.(*ListEpochsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ffi_proto_msgTypes[61].Exporter = func(v any, i int) any { switch v := v.(*FFIRequest); i { case 0: return &v.state @@ -4947,7 +5252,7 @@ func file_ffi_proto_init() { } } } - file_ffi_proto_msgTypes[48].OneofWrappers = []any{ + file_ffi_proto_msgTypes[52].OneofWrappers = []any{ (*CosmosRequest_GetAccount)(nil), (*CosmosRequest_ContainsKey)(nil), (*CosmosRequest_AccountCode)(nil), @@ -4968,8 +5273,10 @@ func file_ffi_proto_init() { (*CosmosRequest_IssuanceTreeRoot)(nil), (*CosmosRequest_RevocationTreeRoot)(nil), (*CosmosRequest_AddVerificationDetailsV2)(nil), + (*CosmosRequest_RevokeVerification)(nil), + (*CosmosRequest_ConvertCredential)(nil), } - file_ffi_proto_msgTypes[57].OneofWrappers = []any{ + file_ffi_proto_msgTypes[61].OneofWrappers = []any{ (*FFIRequest_CallRequest)(nil), (*FFIRequest_CreateRequest)(nil), (*FFIRequest_PublicKeyRequest)(nil), @@ -4980,7 +5287,7 @@ func file_ffi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ffi_proto_rawDesc, NumEnums: 0, - NumMessages: 58, + NumMessages: 62, NumExtensions: 0, NumServices: 0, }, diff --git a/go.mod b/go.mod index 6542488e..7af9b815 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( cosmossdk.io/math v1.1.3-rc.1 cosmossdk.io/simapp v0.0.0-20230608160436-666c345ad23d cosmossdk.io/tools/rosetta v0.2.1 - filippo.io/edwards25519 v1.0.0 github.com/SigmaGmbH/go-merkletree-sql/v2 v2.0.0-20250116143543-b06326dac718 github.com/SigmaGmbH/librustgo v0.0.2-0.20230725120829-f1a254f14ac6 github.com/armon/go-metrics v0.4.1 @@ -24,21 +23,16 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 github.com/ethereum/go-ethereum v1.11.5 - github.com/gabriel-vasile/mimetype v1.4.2 github.com/getsentry/sentry-go v0.23.0 - github.com/go-ozzo/ozzo-validation/v4 v4.3.0 github.com/gogo/protobuf v1.3.2 + github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.3 - github.com/google/uuid v1.4.0 github.com/gorilla/mux v1.8.0 github.com/gorilla/websocket v1.5.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 github.com/iden3/go-iden3-crypto v0.0.17 github.com/improbable-eng/grpc-web v0.15.0 - github.com/lestrrat-go/jwx v1.2.26 - github.com/mr-tron/base58 v1.2.0 - github.com/multiformats/go-multibase v0.2.0 github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 github.com/onsi/ginkgo/v2 v2.10.0 github.com/onsi/gomega v1.27.8 @@ -55,7 +49,6 @@ require ( github.com/tyler-smith/go-bip39 v1.1.0 golang.org/x/crypto v0.16.0 golang.org/x/net v0.19.0 - golang.org/x/text v0.14.0 google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f google.golang.org/grpc v1.60.1 gopkg.in/yaml.v2 v2.4.0 @@ -71,6 +64,7 @@ require ( cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/log v1.2.0 // indirect + filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect @@ -123,13 +117,13 @@ require ( github.com/gogo/googleapis v1.4.1 // indirect github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 // indirect github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -155,11 +149,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.16.7 // indirect - github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect - github.com/lestrrat-go/blackmagic v1.0.1 // indirect - github.com/lestrrat-go/httpcc v1.0.1 // indirect - github.com/lestrrat-go/iter v1.0.2 // indirect - github.com/lestrrat-go/option v1.0.1 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.16 // indirect @@ -175,8 +164,6 @@ require ( github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.0.3 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/petermattis/goid v0.0.0-20230808133559-b036b712a89b // indirect @@ -210,6 +197,7 @@ require ( golang.org/x/sync v0.4.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/term v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.149.0 // indirect diff --git a/go.sum b/go.sum index 17d94e0a..937a595e 100644 --- a/go.sum +++ b/go.sum @@ -34,8 +34,6 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= -cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= @@ -75,8 +73,6 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= @@ -118,8 +114,6 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= @@ -203,8 +197,6 @@ cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= -cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.2.0 h1:BbykkDsutXPSy8RojFB3KZEWyvMsToLy0ykb/ZhsLqQ= @@ -223,30 +215,26 @@ git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFN git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/SigmaGmbH/go-merkletree-sql/v2 v2.0.0-20250116143543-b06326dac718 h1:jBN5sXVAZyY4mx4nGiG6Kw+o2f9yRMc4szwl4HX+Ico= @@ -259,11 +247,12 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -283,8 +272,6 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= -github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= @@ -300,7 +287,6 @@ github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7 github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -322,7 +308,6 @@ github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZg github.com/btcsuite/btcd v0.23.3 h1:4KH/JKy9WiCd+iUS9Mu0Zp7Dnj17TGdKrg9xc/FGj24= github.com/btcsuite/btcd v0.23.3/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= @@ -347,6 +332,7 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -390,19 +376,9 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230226194802-02d779ffbc46 h1:yMaoO76pV9knZ6bzEwzPSHnPSCTnrJohwkIQirmii70= -github.com/cockroachdb/pebble v0.0.0-20230226194802-02d779ffbc46/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= @@ -417,6 +393,7 @@ github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSM github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -452,15 +429,17 @@ github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFg github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= @@ -473,8 +452,6 @@ github.com/dchest/blake512 v1.0.0 h1:oDFEQFIqFSeuA34xLtXZ/rWxCXdSjirjzPhey5EUvmA github.com/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzhLMB92JI= github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= @@ -486,7 +463,6 @@ github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -502,11 +478,11 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -521,7 +497,6 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -533,18 +508,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/ethereum/go-ethereum v1.11.5 h1:3M1uan+LAUvdn+7wCEFrcMM4LJTeuxDrPTg/f31a5QQ= -github.com/ethereum/go-ethereum v1.11.5/go.mod h1:it7x0DWnTDMfVFdXcU6Ti4KEFQynLHVRarcSlPr0HBo= github.com/evmos/go-ethereum v1.10.26-evmos-rc2 h1:tYghk1ZZ8X4/OQ4YI9hvtm8aSN8OSqO0g9vo/sCMdBo= github.com/evmos/go-ethereum v1.10.26-evmos-rc2/go.mod h1:/6CsT5Ceen2WPLI/oCA3xMcZ5sWMF/D46SjM/ayY0Oo= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -553,38 +522,34 @@ github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlK github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -603,21 +568,21 @@ github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= -github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -637,11 +602,9 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -652,15 +615,11 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -704,7 +663,6 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= @@ -724,21 +682,21 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -759,23 +717,18 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 h1:CqYfpuYIjnlNxM3msdyPRKabhXZWbKjf3Q8BWROFBso= github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= -github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -879,20 +832,13 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/iden3/go-iden3-crypto v0.0.13 h1:ixWRiaqDULNyIDdOWz2QQJG5t4PpNHkQk2P6GV94cok= -github.com/iden3/go-iden3-crypto v0.0.13/go.mod h1:swXIv0HFbJKobbQBtsB50G7IHr6PbTowutSew/iBEoo= github.com/iden3/go-iden3-crypto v0.0.17 h1:NdkceRLJo/pI4UpcjVah4lN/a3yzxRUGXqxbWcYh9mY= github.com/iden3/go-iden3-crypto v0.0.17/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= -github.com/iden3/go-merkletree-sql v1.0.2 h1:R1VKrXQu2onBkGnM+M4VsuICIJG7MF8l3atB4WH7BCc= -github.com/iden3/go-merkletree-sql v1.0.2/go.mod h1:NhLFvX01F/3QqS0FUkC6T2BXPksz+9EbRhKQ7abaBSE= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -910,17 +856,13 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -937,6 +879,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -945,21 +888,13 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -967,7 +902,6 @@ github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrD github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -976,7 +910,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -986,24 +919,12 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= -github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= -github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= -github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= -github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= -github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= -github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= -github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx v1.2.26 h1:4iFo8FPRZGDYe1t19mQP0zTRqA7n8HnJ5lkIiDvJcB0= -github.com/lestrrat-go/jwx v1.2.26/go.mod h1:MaiCdGbn3/cckbOFSCluJlJMmp9dmZm5hDuIkx8ftpQ= -github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= -github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -1028,12 +949,10 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -1048,12 +967,9 @@ github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/Qd github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= @@ -1083,19 +999,11 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1113,6 +1021,7 @@ github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 h1:1102pQc2SEPp5+xrS26wEaeb26sZy6k9/ZXlZN+eXE4= github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7/go.mod h1:UqoUn6cHESlliMhOnKLWr+CBH+e3bazUPvFj1XZwAjs= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1127,6 +1036,7 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo/v2 v2.10.0 h1:sfUl4qgLdvkChZrWCYndY2EAu9BRIw1YphNAzy1VNWs= github.com/onsi/ginkgo/v2 v2.10.0/go.mod h1:UDQOh5wbQUlMnkLfVaIUMtQ1Vus92oM+P2JX1aulgcE= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -1137,8 +1047,11 @@ github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1149,6 +1062,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -1169,7 +1083,6 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1224,15 +1137,13 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1247,11 +1158,9 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= @@ -1265,6 +1174,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1280,8 +1190,6 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1345,12 +1253,12 @@ github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:s github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1360,28 +1268,18 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1434,7 +1332,6 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1445,12 +1342,7 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1499,8 +1391,8 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1513,7 +1405,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1523,7 +1414,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1555,7 +1445,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1570,10 +1459,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1601,8 +1486,6 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1619,9 +1502,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1694,7 +1574,6 @@ golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1706,12 +1585,9 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1736,10 +1612,7 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -1747,10 +1620,6 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1764,10 +1633,6 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1777,19 +1642,18 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1847,7 +1711,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E= golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1914,8 +1777,6 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= -google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1925,11 +1786,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -2040,19 +1899,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb h1:XFBgcDwm7irdHTbz4Zk2h7Mh+eis4nfJEFQFYzJzuIA= -google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1:lK0oleSc7IQsUxO3U5TjL9DWlsxpEBemh+zpB7IqhWI= -google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -2094,8 +1946,6 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -2114,8 +1964,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -2130,19 +1978,13 @@ gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2154,14 +1996,13 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/proto/swisstronik/compliance/entities.proto b/proto/swisstronik/compliance/entities.proto index a850ad2c..7a634dbe 100644 --- a/proto/swisstronik/compliance/entities.proto +++ b/proto/swisstronik/compliance/entities.proto @@ -17,6 +17,7 @@ enum VerificationType { VT_ADDRESS = 6; VT_CUSTOM = 7; VT_CREDIT_SCORE = 8; + VT_BIOMETRIC = 9; // Biometric Passports and other types of biometric verification } /// V1 /// diff --git a/proto/swisstronik/compliance/query.proto b/proto/swisstronik/compliance/query.proto index 3fe056f5..28c2c716 100644 --- a/proto/swisstronik/compliance/query.proto +++ b/proto/swisstronik/compliance/query.proto @@ -71,6 +71,10 @@ service Query { rpc CredentialHash(QueryCredentialHashRequest) returns (QueryCredentialHashResponse) { option (google.api.http).get = "/swisstronik/compliance/zk/credentialHash/{verificationId}"; } + + rpc VerificationHolder(QueryHolderByVerificationIdRequest) returns (QueryHolderByVerificationIdResponse) { + option (google.api.http).get = "/swisstronik/compliance/holder/{verificationId}"; + } } // QueryParamsRequest is request type for the Query/Params RPC method. @@ -193,6 +197,7 @@ message QueryVerificationsDetailsResponse { string schema = 8; string issuer_verification_id = 9; uint32 version = 10; + bool is_revoked = 11; } // verifications is a slice of registered verifications for the compliance module @@ -245,4 +250,11 @@ message QueryCredentialHashRequest { } message QueryCredentialHashResponse { bytes credentialHash = 1; +} + +message QueryHolderByVerificationIdRequest { + string verificationId = 1; +} +message QueryHolderByVerificationIdResponse { + string address = 1; } \ No newline at end of file diff --git a/scripts/local-node.sh b/scripts/local-node.sh index 604d45dd..77e2c28e 100755 --- a/scripts/local-node.sh +++ b/scripts/local-node.sh @@ -7,6 +7,12 @@ KEYALGO="eth_secp256k1" HOMEDIR="$HOME/.swisstronik" BINARY="./build/swisstronikd" +if [[ -z "$SWTR_BINARY" ]]; then + BINARY="./build/swisstronikd" +else + BINARY="${SWTR_BINARY}" +fi + # Path variables CONFIG=$HOMEDIR/config/config.toml APP_TOML=$HOMEDIR/config/app.toml @@ -14,8 +20,12 @@ GENESIS=$HOMEDIR/config/genesis.json TMP_GENESIS=$HOMEDIR/config/tmp_genesis.json # Compliance proxy contract -COMPLIANCE_PROXY_BYTECODE="608060405234801561000f575f80fd5b5060043610610086575f3560e01c806395183eb71161005957806395183eb714610126578063ace417e014610156578063d832c2f014610186578063d916d4e2146101b657610086565b80633fccb7481461008a57806344e48ac6146100a85780636be006d4146100c65780638cc2551d146100f6575b5f80fd5b6100926101d4565b60405161009f9190610ad8565b60405180910390f35b6100b0610298565b6040516100bd9190610ad8565b60405180910390f35b6100e060048036038101906100db9190610b63565b61035c565b6040516100ed9190610ad8565b60405180910390f35b610110600480360381019061010b9190610bc1565b6105a2565b60405161011d9190610ad8565b60405180910390f35b610140600480360381019061013b9190610b63565b610773565b60405161014d9190610e74565b60405180910390f35b610170600480360381019061016b9190610b63565b610866565b60405161017d9190610eae565b60405180910390f35b6101a0600480360381019061019b9190611007565b610966565b6040516101ad9190610eae565b60405180910390f35b6101be610a63565b6040516101cb9190611070565b60405180910390f35b60605f604051602401604051602081830303815290604052633db94a0460e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff168360405161024d91906110c3565b5f60405180830381855afa9150503d805f8114610285576040519150601f19603f3d011682016040523d82523d5f602084013e61028a565b606091505b509150915080935050505090565b60605f60405160240160405160208183030381529060405263d0376bd260e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff168360405161031191906110c3565b5f60405180830381855afa9150503d805f8114610349576040519150601f19603f3d011682016040523d82523d5f602084013e61034e565b606091505b509150915080935050505090565b60605f600167ffffffffffffffff81111561037a57610379610ecb565b5b6040519080825280601f01601f1916602001820160405280156103ac5781602001600182028036833780820191505090505b5090505f6040518060400160405280600c81526020017f636861696e5f313239312d31000000000000000000000000000000000000000081525090505f6040518060400160405280600681526020017f736368656d61000000000000000000000000000000000000000000000000000081525090505f6040518060400160405280601481526020017f697373756572566572696669636174696f6e496400000000000000000000000081525090505f808785600264010000000042610471919061110f565b5f8a89898960405160240161048e999897969594939291906111d8565b60405160208183030381529060405263e62364ab60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516104fe91906110c3565b5f604051808303815f865af19150503d805f8114610537576040519150601f19603f3d011682016040523d82523d5f602084013e61053c565b606091505b50915091505f818060200190518101906105569190611321565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc8382604051610589929190611368565b60405180910390a1809950505050505050505050919050565b60605f600167ffffffffffffffff8111156105c0576105bf610ecb565b5b6040519080825280601f01601f1916602001820160405280156105f25781602001600182028036833780820191505090505b5090505f6040518060400160405280601481526020017f697373756572566572696669636174696f6e496400000000000000000000000081525090505f8086600264010000000042610644919061110f565b5f8787878c604051602401610660989796959493929190611439565b60405160208183030381529060405263c220658060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516106d091906110c3565b5f604051808303815f865af19150503d805f8114610709576040519150601f19603f3d011682016040523d82523d5f602084013e61070e565b606091505b50915091505f818060200190518101906107289190611321565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc838260405161075b929190611368565b60405180910390a18097505050505050505092915050565b60605f82306040516024016107899291906114eb565b60405160208183030381529060405263cc8995ec60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516107f991906110c3565b5f60405180830381855afa9150503d805f8114610831576040519150601f19603f3d011682016040523d82523d5f602084013e610836565b606091505b50915091506060821561085a57818060200190518101906108579190611853565b90505b80945050505050919050565b5f60605f8360025f846040516024016108829493929190611942565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516108f291906110c3565b5f60405180830381855afa9150503d805f811461092a576040519150601f19603f3d011682016040523d82523d5f602084013e61092f565b606091505b50915091508115610959578080602001905181019061094e91906119b6565b945050505050610961565b5f9450505050505b919050565b5f808360025f856040516024016109809493929190611942565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516109f091906110c3565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50915091508115610a565780806020019051810190610a4c91906119b6565b9350505050610a5d565b5f93505050505b92915050565b600281565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610aaa82610a68565b610ab48185610a72565b9350610ac4818560208601610a82565b610acd81610a90565b840191505092915050565b5f6020820190508181035f830152610af08184610aa0565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b3282610b09565b9050919050565b610b4281610b28565b8114610b4c575f80fd5b50565b5f81359050610b5d81610b39565b92915050565b5f60208284031215610b7857610b77610b01565b5b5f610b8584828501610b4f565b91505092915050565b5f819050919050565b610ba081610b8e565b8114610baa575f80fd5b50565b5f81359050610bbb81610b97565b92915050565b5f8060408385031215610bd757610bd6610b01565b5b5f610be485828601610b4f565b9250506020610bf585828601610bad565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f63ffffffff82169050919050565b610c4081610c28565b82525050565b5f82825260208201905092915050565b5f610c6082610a68565b610c6a8185610c46565b9350610c7a818560208601610a82565b610c8381610a90565b840191505092915050565b610c9781610b28565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610cc182610c9d565b610ccb8185610ca7565b9350610cdb818560208601610a82565b610ce481610a90565b840191505092915050565b5f61014083015f830151610d055f860182610c37565b5060208301518482036020860152610d1d8282610c56565b9150506040830151610d326040860182610c8e565b5060608301518482036060860152610d4a8282610cb7565b9150506080830151610d5f6080860182610c37565b5060a0830151610d7260a0860182610c37565b5060c083015184820360c0860152610d8a8282610c56565b91505060e083015184820360e0860152610da48282610cb7565b915050610100830151848203610100860152610dc08282610cb7565b915050610120830151610dd7610120860182610c37565b508091505092915050565b5f610ded8383610cef565b905092915050565b5f602082019050919050565b5f610e0b82610bff565b610e158185610c09565b935083602082028501610e2785610c19565b805f5b85811015610e625784840389528151610e438582610de2565b9450610e4e83610df5565b925060208a01995050600181019050610e2a565b50829750879550505050505092915050565b5f6020820190508181035f830152610e8c8184610e01565b905092915050565b5f8115159050919050565b610ea881610e94565b82525050565b5f602082019050610ec15f830184610e9f565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f0182610a90565b810181811067ffffffffffffffff82111715610f2057610f1f610ecb565b5b80604052505050565b5f610f32610af8565b9050610f3e8282610ef8565b919050565b5f67ffffffffffffffff821115610f5d57610f5c610ecb565b5b602082029050602081019050919050565b5f80fd5b5f610f84610f7f84610f43565b610f29565b90508083825260208201905060208402830185811115610fa757610fa6610f6e565b5b835b81811015610fd05780610fbc8882610b4f565b845260208401935050602081019050610fa9565b5050509392505050565b5f82601f830112610fee57610fed610ec7565b5b8135610ffe848260208601610f72565b91505092915050565b5f806040838503121561101d5761101c610b01565b5b5f61102a85828601610b4f565b925050602083013567ffffffffffffffff81111561104b5761104a610b05565b5b61105785828601610fda565b9150509250929050565b61106a81610c28565b82525050565b5f6020820190506110835f830184611061565b92915050565b5f81905092915050565b5f61109d82610a68565b6110a78185611089565b93506110b7818560208601610a82565b80840191505092915050565b5f6110ce8284611093565b915081905092915050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611119826110d9565b9150611124836110d9565b925082611134576111336110e2565b5b828206905092915050565b61114881610b28565b82525050565b5f82825260208201905092915050565b5f61116882610c9d565b611172818561114e565b9350611182818560208601610a82565b61118b81610a90565b840191505092915050565b5f819050919050565b5f819050919050565b5f6111c26111bd6111b884611196565b61119f565b610c28565b9050919050565b6111d2816111a8565b82525050565b5f610120820190506111ec5f83018c61113f565b81810360208301526111fe818b61115e565b905061120d604083018a611061565b61121a6060830189611061565b61122760808301886111c9565b81810360a08301526112398187610aa0565b905081810360c083015261124d818661115e565b905081810360e0830152611261818561115e565b9050611271610100830184611061565b9a9950505050505050505050565b5f80fd5b5f67ffffffffffffffff82111561129d5761129c610ecb565b5b6112a682610a90565b9050602081019050919050565b5f6112c56112c084611283565b610f29565b9050828152602081018484840111156112e1576112e061127f565b5b6112ec848285610a82565b509392505050565b5f82601f83011261130857611307610ec7565b5b81516113188482602086016112b3565b91505092915050565b5f6020828403121561133657611335610b01565b5b5f82015167ffffffffffffffff81111561135357611352610b05565b5b61135f848285016112f4565b91505092915050565b5f60408201905061137b5f830185610e9f565b818103602083015261138d8184610aa0565b90509392505050565b7f636861696e5f313239312d3100000000000000000000000000000000000000005f82015250565b5f6113ca600c8361114e565b91506113d582611396565b602082019050919050565b7f736368656d6100000000000000000000000000000000000000000000000000005f82015250565b5f61141460068361114e565b915061141f826113e0565b602082019050919050565b61143381610b8e565b82525050565b5f6101408201905061144d5f83018b61113f565b818103602083015261145e816113be565b905061146d604083018a611061565b61147a6060830189611061565b61148760808301886111c9565b81810360a08301526114998187610aa0565b905081810360c08301526114ac81611408565b905081810360e08301526114c0818661115e565b90506114d0610100830185611061565b6114de61012083018461142a565b9998505050505050505050565b5f6040820190506114fe5f83018561113f565b61150b602083018461113f565b9392505050565b5f67ffffffffffffffff82111561152c5761152b610ecb565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b61154e81610c28565b8114611558575f80fd5b50565b5f8151905061156981611545565b92915050565b5f8151905061157d81610b39565b92915050565b5f67ffffffffffffffff82111561159d5761159c610ecb565b5b6115a682610a90565b9050602081019050919050565b5f6115c56115c084611583565b610f29565b9050828152602081018484840111156115e1576115e061127f565b5b6115ec848285610a82565b509392505050565b5f82601f83011261160857611607610ec7565b5b81516116188482602086016115b3565b91505092915050565b5f61014082840312156116375761163661153d565b5b611642610140610f29565b90505f6116518482850161155b565b5f83015250602082015167ffffffffffffffff81111561167457611673611541565b5b611680848285016112f4565b60208301525060406116948482850161156f565b604083015250606082015167ffffffffffffffff8111156116b8576116b7611541565b5b6116c4848285016115f4565b60608301525060806116d88482850161155b565b60808301525060a06116ec8482850161155b565b60a08301525060c082015167ffffffffffffffff8111156117105761170f611541565b5b61171c848285016112f4565b60c08301525060e082015167ffffffffffffffff8111156117405761173f611541565b5b61174c848285016115f4565b60e08301525061010082015167ffffffffffffffff81111561177157611770611541565b5b61177d848285016115f4565b610100830152506101206117938482850161155b565b6101208301525092915050565b5f6117b26117ad84611512565b610f29565b905080838252602082019050602084028301858111156117d5576117d4610f6e565b5b835b8181101561181c57805167ffffffffffffffff8111156117fa576117f9610ec7565b5b8086016118078982611621565b855260208501945050506020810190506117d7565b5050509392505050565b5f82601f83011261183a57611839610ec7565b5b815161184a8482602086016117a0565b91505092915050565b5f6020828403121561186857611867610b01565b5b5f82015167ffffffffffffffff81111561188557611884610b05565b5b61189184828501611826565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6118ce8383610c8e565b60208301905092915050565b5f602082019050919050565b5f6118f08261189a565b6118fa81856118a4565b9350611905836118b4565b805f5b8381101561193557815161191c88826118c3565b9750611927836118da565b925050600181019050611908565b5085935050505092915050565b5f6080820190506119555f83018761113f565b6119626020830186611061565b61196f60408301856111c9565b818103606083015261198181846118e6565b905095945050505050565b61199581610e94565b811461199f575f80fd5b50565b5f815190506119b08161198c565b92915050565b5f602082840312156119cb576119ca610b01565b5b5f6119d8848285016119a2565b9150509291505056fea2646970667358221220e2acc2418f8d37c68a573935ed6868267b81fcabbed5f726450ef2a3d8d521d964736f6c634300081a0033" -COMPLIANCE_PROXY_CODEHASH="0xd05a753f154927b7c7c93019c83ebedd132958de6131661d0cb29c2939abf271" +COMPLIANCE_PROXY_BYTECODE="608060405234801561001057600080fd5b50600436106100935760003560e01c806395183eb71161006657806395183eb714610134578063ace417e014610164578063d832c2f014610194578063d916d4e2146101c4578063e711d86d146101e257610093565b80633fccb7481461009857806344e48ac6146100b65780636be006d4146100d45780638cc2551d14610104575b600080fd5b6100a06101fe565b6040516100ad9190610c60565b60405180910390f35b6100be6102c7565b6040516100cb9190610c60565b60405180910390f35b6100ee60048036038101906100e99190610cf4565b610390565b6040516100fb9190610c60565b60405180910390f35b61011e60048036038101906101199190610d57565b6105e2565b60405161012b9190610c60565b60405180910390f35b61014e60048036038101906101499190610cf4565b6107bd565b60405161015b919061101c565b60405180910390f35b61017e60048036038101906101799190610cf4565b6108b5565b60405161018b9190611059565b60405180910390f35b6101ae60048036038101906101a991906111bc565b6109bd565b6040516101bb9190611059565b60405180910390f35b6101cc610ac1565b6040516101d99190611227565b60405180910390f35b6101fc60048036038101906101f791906112f7565b610ac6565b005b60606000604051602401604051602081830303815290604052633db94a0460e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610279919061137c565b600060405180830381855afa9150503d80600081146102b4576040519150601f19603f3d011682016040523d82523d6000602084013e6102b9565b606091505b509150915080935050505090565b6060600060405160240160405160208183030381529060405263d0376bd260e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610342919061137c565b600060405180830381855afa9150503d806000811461037d576040519150601f19603f3d011682016040523d82523d6000602084013e610382565b606091505b509150915080935050505090565b60606000600167ffffffffffffffff8111156103af576103ae611079565b5b6040519080825280601f01601f1916602001820160405280156103e15781602001600182028036833780820191505090505b50905060006040518060400160405280600c81526020017f636861696e5f313239312d310000000000000000000000000000000000000000815250905060006040518060400160405280600681526020017f736368656d610000000000000000000000000000000000000000000000000000815250905060006040518060400160405280601481526020017f697373756572566572696669636174696f6e4964000000000000000000000000815250905060008087856002640100000000426104aa91906113cc565b60008a8989896040516024016104c89998979695949392919061149b565b60405160208183030381529060405263e62364ab60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610539919061137c565b6000604051808303816000865af19150503d8060008114610576576040519150601f19603f3d011682016040523d82523d6000602084013e61057b565b606091505b509150915060008180602001905181019061059691906115b4565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc83826040516105c99291906115fd565b60405180910390a1809950505050505050505050919050565b60606000600167ffffffffffffffff81111561060157610600611079565b5b6040519080825280601f01601f1916602001820160405280156106335781602001600182028036833780820191505090505b50905060006040518060400160405280601481526020017f697373756572566572696669636174696f6e496400000000000000000000000081525090506000808660026401000000004261068791906113cc565b60008787878c6040516024016106a49897969594939291906116d4565b60405160208183030381529060405263c220658060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610715919061137c565b6000604051808303816000865af19150503d8060008114610752576040519150601f19603f3d011682016040523d82523d6000602084013e610757565b606091505b509150915060008180602001905181019061077291906115b4565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc83826040516107a59291906115fd565b60405180910390a18097505050505050505092915050565b6060600082306040516024016107d4929190611788565b60405160208183030381529060405263cc8995ec60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610845919061137c565b600060405180830381855afa9150503d8060008114610880576040519150601f19603f3d011682016040523d82523d6000602084013e610885565b606091505b5091509150606082156108a957818060200190518101906108a69190611b00565b90505b80945050505050919050565b6000606060008360026000846040516024016108d49493929190611bf8565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610945919061137c565b600060405180830381855afa9150503d8060008114610980576040519150601f19603f3d011682016040523d82523d6000602084013e610985565b606091505b509150915081156109af57808060200190518101906109a49190611c70565b9450505050506109b8565b60009450505050505b919050565b6000808360026000856040516024016109d99493929190611bf8565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610a4a919061137c565b600060405180830381855afa9150503d8060008114610a85576040519150601f19603f3d011682016040523d82523d6000602084013e610a8a565b606091505b50915091508115610ab35780806020019051810190610aa99190611c70565b9350505050610abb565b600093505050505b92915050565b600281565b600081604051602401610ad99190610c60565b60405160208183030381529060405263e711d86d60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008061040473ffffffffffffffffffffffffffffffffffffffff1683604051610b4a919061137c565b6000604051808303816000865af19150503d8060008114610b87576040519150601f19603f3d011682016040523d82523d6000602084013e610b8c565b606091505b50915091507f1e17dfd999686b132e44592148fe5bc466b7e9997dfbdf8791e92df987182e9f8282604051610bc29291906115fd565b60405180910390a150505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c0a578082015181840152602081019050610bef565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c3282610bd0565b610c3c8185610bdb565b9350610c4c818560208601610bec565b610c5581610c16565b840191505092915050565b60006020820190508181036000830152610c7a8184610c27565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610cc182610c96565b9050919050565b610cd181610cb6565b8114610cdc57600080fd5b50565b600081359050610cee81610cc8565b92915050565b600060208284031215610d0a57610d09610c8c565b5b6000610d1884828501610cdf565b91505092915050565b6000819050919050565b610d3481610d21565b8114610d3f57600080fd5b50565b600081359050610d5181610d2b565b92915050565b60008060408385031215610d6e57610d6d610c8c565b5b6000610d7c85828601610cdf565b9250506020610d8d85828601610d42565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600063ffffffff82169050919050565b610ddc81610dc3565b82525050565b600082825260208201905092915050565b6000610dfe82610bd0565b610e088185610de2565b9350610e18818560208601610bec565b610e2181610c16565b840191505092915050565b610e3581610cb6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610e6282610e3b565b610e6c8185610e46565b9350610e7c818560208601610bec565b610e8581610c16565b840191505092915050565b600061014083016000830151610ea96000860182610dd3565b5060208301518482036020860152610ec18282610df3565b9150506040830151610ed66040860182610e2c565b5060608301518482036060860152610eee8282610e57565b9150506080830151610f036080860182610dd3565b5060a0830151610f1660a0860182610dd3565b5060c083015184820360c0860152610f2e8282610df3565b91505060e083015184820360e0860152610f488282610e57565b915050610100830151848203610100860152610f648282610e57565b915050610120830151610f7b610120860182610dd3565b508091505092915050565b6000610f928383610e90565b905092915050565b6000602082019050919050565b6000610fb282610d97565b610fbc8185610da2565b935083602082028501610fce85610db3565b8060005b8581101561100a5784840389528151610feb8582610f86565b9450610ff683610f9a565b925060208a01995050600181019050610fd2565b50829750879550505050505092915050565b600060208201905081810360008301526110368184610fa7565b905092915050565b60008115159050919050565b6110538161103e565b82525050565b600060208201905061106e600083018461104a565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6110b182610c16565b810181811067ffffffffffffffff821117156110d0576110cf611079565b5b80604052505050565b60006110e3610c82565b90506110ef82826110a8565b919050565b600067ffffffffffffffff82111561110f5761110e611079565b5b602082029050602081019050919050565b600080fd5b6000611138611133846110f4565b6110d9565b9050808382526020820190506020840283018581111561115b5761115a611120565b5b835b8181101561118457806111708882610cdf565b84526020840193505060208101905061115d565b5050509392505050565b600082601f8301126111a3576111a2611074565b5b81356111b3848260208601611125565b91505092915050565b600080604083850312156111d3576111d2610c8c565b5b60006111e185828601610cdf565b925050602083013567ffffffffffffffff81111561120257611201610c91565b5b61120e8582860161118e565b9150509250929050565b61122181610dc3565b82525050565b600060208201905061123c6000830184611218565b92915050565b600080fd5b600067ffffffffffffffff82111561126257611261611079565b5b61126b82610c16565b9050602081019050919050565b82818337600083830152505050565b600061129a61129584611247565b6110d9565b9050828152602081018484840111156112b6576112b5611242565b5b6112c1848285611278565b509392505050565b600082601f8301126112de576112dd611074565b5b81356112ee848260208601611287565b91505092915050565b60006020828403121561130d5761130c610c8c565b5b600082013567ffffffffffffffff81111561132b5761132a610c91565b5b611337848285016112c9565b91505092915050565b600081905092915050565b600061135682610bd0565b6113608185611340565b9350611370818560208601610bec565b80840191505092915050565b6000611388828461134b565b915081905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006113d782611393565b91506113e283611393565b9250826113f2576113f161139d565b5b828206905092915050565b61140681610cb6565b82525050565b600082825260208201905092915050565b600061142882610e3b565b611432818561140c565b9350611442818560208601610bec565b61144b81610c16565b840191505092915050565b6000819050919050565b6000819050919050565b600061148561148061147b84611456565b611460565b610dc3565b9050919050565b6114958161146a565b82525050565b6000610120820190506114b1600083018c6113fd565b81810360208301526114c3818b61141d565b90506114d2604083018a611218565b6114df6060830189611218565b6114ec608083018861148c565b81810360a08301526114fe8187610c27565b905081810360c0830152611512818661141d565b905081810360e0830152611526818561141d565b9050611536610100830184611218565b9a9950505050505050505050565b600061155761155284611247565b6110d9565b90508281526020810184848401111561157357611572611242565b5b61157e848285610bec565b509392505050565b600082601f83011261159b5761159a611074565b5b81516115ab848260208601611544565b91505092915050565b6000602082840312156115ca576115c9610c8c565b5b600082015167ffffffffffffffff8111156115e8576115e7610c91565b5b6115f484828501611586565b91505092915050565b6000604082019050611612600083018561104a565b81810360208301526116248184610c27565b90509392505050565b7f636861696e5f313239312d310000000000000000000000000000000000000000600082015250565b6000611663600c8361140c565b915061166e8261162d565b602082019050919050565b7f736368656d610000000000000000000000000000000000000000000000000000600082015250565b60006116af60068361140c565b91506116ba82611679565b602082019050919050565b6116ce81610d21565b82525050565b6000610140820190506116ea600083018b6113fd565b81810360208301526116fb81611656565b905061170a604083018a611218565b6117176060830189611218565b611724608083018861148c565b81810360a08301526117368187610c27565b905081810360c0830152611749816116a2565b905081810360e083015261175d818661141d565b905061176d610100830185611218565b61177b6101208301846116c5565b9998505050505050505050565b600060408201905061179d60008301856113fd565b6117aa60208301846113fd565b9392505050565b600067ffffffffffffffff8211156117cc576117cb611079565b5b602082029050602081019050919050565b600080fd5b600080fd5b6117f081610dc3565b81146117fb57600080fd5b50565b60008151905061180d816117e7565b92915050565b60008151905061182281610cc8565b92915050565b600067ffffffffffffffff82111561184357611842611079565b5b61184c82610c16565b9050602081019050919050565b600061186c61186784611828565b6110d9565b90508281526020810184848401111561188857611887611242565b5b611893848285610bec565b509392505050565b600082601f8301126118b0576118af611074565b5b81516118c0848260208601611859565b91505092915050565b600061014082840312156118e0576118df6117dd565b5b6118eb6101406110d9565b905060006118fb848285016117fe565b600083015250602082015167ffffffffffffffff81111561191f5761191e6117e2565b5b61192b84828501611586565b602083015250604061193f84828501611813565b604083015250606082015167ffffffffffffffff811115611963576119626117e2565b5b61196f8482850161189b565b6060830152506080611983848285016117fe565b60808301525060a0611997848285016117fe565b60a08301525060c082015167ffffffffffffffff8111156119bb576119ba6117e2565b5b6119c784828501611586565b60c08301525060e082015167ffffffffffffffff8111156119eb576119ea6117e2565b5b6119f78482850161189b565b60e08301525061010082015167ffffffffffffffff811115611a1c57611a1b6117e2565b5b611a288482850161189b565b61010083015250610120611a3e848285016117fe565b6101208301525092915050565b6000611a5e611a59846117b1565b6110d9565b90508083825260208201905060208402830185811115611a8157611a80611120565b5b835b81811015611ac857805167ffffffffffffffff811115611aa657611aa5611074565b5b808601611ab389826118c9565b85526020850194505050602081019050611a83565b5050509392505050565b600082601f830112611ae757611ae6611074565b5b8151611af7848260208601611a4b565b91505092915050565b600060208284031215611b1657611b15610c8c565b5b600082015167ffffffffffffffff811115611b3457611b33610c91565b5b611b4084828501611ad2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611b818383610e2c565b60208301905092915050565b6000602082019050919050565b6000611ba582611b49565b611baf8185611b54565b9350611bba83611b65565b8060005b83811015611beb578151611bd28882611b75565b9750611bdd83611b8d565b925050600181019050611bbe565b5085935050505092915050565b6000608082019050611c0d60008301876113fd565b611c1a6020830186611218565b611c27604083018561148c565b8181036060830152611c398184611b9a565b905095945050505050565b611c4d8161103e565b8114611c5857600080fd5b50565b600081519050611c6a81611c44565b92915050565b600060208284031215611c8657611c85610c8c565b5b6000611c9484828501611c5b565b9150509291505056fea264697066735822122089e8cb2a9f01a51544fbb4e04f64b388a09ffddddf31b620ca45e818ebe6f56264736f6c63430008180033" +COMPLIANCE_PROXY_CODEHASH="0x92799fbdef25e4617da385123277a186a4b1a1231efbb5f0ad6ae21023c14adc" + +# Arachnid Deployment +ARACHNID_BYTECODE="7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3" +ARACHNID_CODEHASH="0x2fa86add0aed31f33a762c9d88e807c475bd51d0f52bd0955754b2608f7e4989" # validate dependencies are installed command -v jq >/dev/null 2>&1 || { @@ -51,6 +61,10 @@ jq '.app_state["mint"]["params"]["mint_denom"]="aswtr"' "$GENESIS" >"$TMP_GENESI jq '.consensus_params["block"]["max_gas"]="10000000"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" jq '.app_state["compliance"]["operators"]=[{"operator":"swtr1ml2knanpk8sv94f8h9g8vaf9k3yyfva4fykyn9", "operator_type": 1}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +# add arachnid deployment proxy +jq --arg BYTECODE $ARACHNID_BYTECODE '.app_state.evm.accounts += [{"address":"0x4e59b44847b379578588920cA78FbF26c0B4956C", "code": $BYTECODE, "storage": []}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq --arg CODE_HASH $ARACHNID_CODEHASH '.app_state.auth.accounts += [{"@type": "/ethermint.types.v1.EthAccount", "base_account": {"account_number": "6", "address": "swtr1fevmgjz8kdu40pvgjgx20ralymqtf9tvcggehm", "pub_key": null, "sequence": "1" }, "code_hash": $CODE_HASH}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" + # set initial issuer in genesis jq --arg BYTECODE $COMPLIANCE_PROXY_BYTECODE '.app_state.evm.accounts += [{"address":"0x2Fc0B35E41a9a2eA248a275269Af1c8B3a061167", "code": $BYTECODE, "storage": []}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" jq '.app_state.compliance.issuerDetails += [{"address": "swtr19lqtxhjp4x3w5fy2yafxntcu3vaqvyt827e4ct", "details": {"creator": "swtr1ml2knanpk8sv94f8h9g8vaf9k3yyfva4fykyn9", "description": "d", "legalEntity": "e", "logo": "l", "name": "n", "url": "u"}}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" diff --git a/scripts/upgrade/init.sh b/scripts/upgrade/init.sh new file mode 100755 index 00000000..7cfd9632 --- /dev/null +++ b/scripts/upgrade/init.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +CHAINID="swisstronik_1291-1" +MONIKER="localtestnet" +KEYRING="test" +KEYALGO="eth_secp256k1" + +SCRIPT_DIR="$1" +BINARY="$SCRIPT_DIR/old/build/swisstronikd" +HOMEDIR="$SCRIPT_DIR/.swisstronik" +KEYMANAGER_HOME="$SCRIPT_DIR/.swisstronik-enclave" +ENCLAVE_HOME="$SCRIPT_DIR/.swisstronik-enclave" + +DAEMON_NAME=swisstronikd +DAEMON_HOME=$HOMEDIR +DAEMON_ALLOW_DOWNLOAD_BINARIES=false +DAEMON_RESTART_AFTER_UPGRADE=true +NEW_BINARY="$SCRIPT_DIR/../../build/swisstronikd" + +# Path variables +CONFIG=$HOMEDIR/config/config.toml +APP_TOML=$HOMEDIR/config/app.toml +GENESIS=$HOMEDIR/config/genesis.json +TMP_GENESIS=$HOMEDIR/config/tmp_genesis.json + +# Compliance proxy contract +COMPLIANCE_PROXY_BYTECODE="608060405234801561000f575f80fd5b5060043610610086575f3560e01c806395183eb71161005957806395183eb714610126578063ace417e014610156578063d832c2f014610186578063d916d4e2146101b657610086565b80633fccb7481461008a57806344e48ac6146100a85780636be006d4146100c65780638cc2551d146100f6575b5f80fd5b6100926101d4565b60405161009f9190610ad8565b60405180910390f35b6100b0610298565b6040516100bd9190610ad8565b60405180910390f35b6100e060048036038101906100db9190610b63565b61035c565b6040516100ed9190610ad8565b60405180910390f35b610110600480360381019061010b9190610bc1565b6105a2565b60405161011d9190610ad8565b60405180910390f35b610140600480360381019061013b9190610b63565b610773565b60405161014d9190610e74565b60405180910390f35b610170600480360381019061016b9190610b63565b610866565b60405161017d9190610eae565b60405180910390f35b6101a0600480360381019061019b9190611007565b610966565b6040516101ad9190610eae565b60405180910390f35b6101be610a63565b6040516101cb9190611070565b60405180910390f35b60605f604051602401604051602081830303815290604052633db94a0460e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff168360405161024d91906110c3565b5f60405180830381855afa9150503d805f8114610285576040519150601f19603f3d011682016040523d82523d5f602084013e61028a565b606091505b509150915080935050505090565b60605f60405160240160405160208183030381529060405263d0376bd260e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff168360405161031191906110c3565b5f60405180830381855afa9150503d805f8114610349576040519150601f19603f3d011682016040523d82523d5f602084013e61034e565b606091505b509150915080935050505090565b60605f600167ffffffffffffffff81111561037a57610379610ecb565b5b6040519080825280601f01601f1916602001820160405280156103ac5781602001600182028036833780820191505090505b5090505f6040518060400160405280600c81526020017f636861696e5f313239312d31000000000000000000000000000000000000000081525090505f6040518060400160405280600681526020017f736368656d61000000000000000000000000000000000000000000000000000081525090505f6040518060400160405280601481526020017f697373756572566572696669636174696f6e496400000000000000000000000081525090505f808785600264010000000042610471919061110f565b5f8a89898960405160240161048e999897969594939291906111d8565b60405160208183030381529060405263e62364ab60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516104fe91906110c3565b5f604051808303815f865af19150503d805f8114610537576040519150601f19603f3d011682016040523d82523d5f602084013e61053c565b606091505b50915091505f818060200190518101906105569190611321565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc8382604051610589929190611368565b60405180910390a1809950505050505050505050919050565b60605f600167ffffffffffffffff8111156105c0576105bf610ecb565b5b6040519080825280601f01601f1916602001820160405280156105f25781602001600182028036833780820191505090505b5090505f6040518060400160405280601481526020017f697373756572566572696669636174696f6e496400000000000000000000000081525090505f8086600264010000000042610644919061110f565b5f8787878c604051602401610660989796959493929190611439565b60405160208183030381529060405263c220658060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516106d091906110c3565b5f604051808303815f865af19150503d805f8114610709576040519150601f19603f3d011682016040523d82523d5f602084013e61070e565b606091505b50915091505f818060200190518101906107289190611321565b90507f109923c5f814b7944f9591557d6a8d1dde907b5cc4cebccf84d59959347589bc838260405161075b929190611368565b60405180910390a18097505050505050505092915050565b60605f82306040516024016107899291906114eb565b60405160208183030381529060405263cc8995ec60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516107f991906110c3565b5f60405180830381855afa9150503d805f8114610831576040519150601f19603f3d011682016040523d82523d5f602084013e610836565b606091505b50915091506060821561085a57818060200190518101906108579190611853565b90505b80945050505050919050565b5f60605f8360025f846040516024016108829493929190611942565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516108f291906110c3565b5f60405180830381855afa9150503d805f811461092a576040519150601f19603f3d011682016040523d82523d5f602084013e61092f565b606091505b50915091508115610959578080602001905181019061094e91906119b6565b945050505050610961565b5f9450505050505b919050565b5f808360025f856040516024016109809493929190611942565b604051602081830303815290604052634887fcd860e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f8061040473ffffffffffffffffffffffffffffffffffffffff16836040516109f091906110c3565b5f60405180830381855afa9150503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50915091508115610a565780806020019051810190610a4c91906119b6565b9350505050610a5d565b5f93505050505b92915050565b600281565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610aaa82610a68565b610ab48185610a72565b9350610ac4818560208601610a82565b610acd81610a90565b840191505092915050565b5f6020820190508181035f830152610af08184610aa0565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b3282610b09565b9050919050565b610b4281610b28565b8114610b4c575f80fd5b50565b5f81359050610b5d81610b39565b92915050565b5f60208284031215610b7857610b77610b01565b5b5f610b8584828501610b4f565b91505092915050565b5f819050919050565b610ba081610b8e565b8114610baa575f80fd5b50565b5f81359050610bbb81610b97565b92915050565b5f8060408385031215610bd757610bd6610b01565b5b5f610be485828601610b4f565b9250506020610bf585828601610bad565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f63ffffffff82169050919050565b610c4081610c28565b82525050565b5f82825260208201905092915050565b5f610c6082610a68565b610c6a8185610c46565b9350610c7a818560208601610a82565b610c8381610a90565b840191505092915050565b610c9781610b28565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f610cc182610c9d565b610ccb8185610ca7565b9350610cdb818560208601610a82565b610ce481610a90565b840191505092915050565b5f61014083015f830151610d055f860182610c37565b5060208301518482036020860152610d1d8282610c56565b9150506040830151610d326040860182610c8e565b5060608301518482036060860152610d4a8282610cb7565b9150506080830151610d5f6080860182610c37565b5060a0830151610d7260a0860182610c37565b5060c083015184820360c0860152610d8a8282610c56565b91505060e083015184820360e0860152610da48282610cb7565b915050610100830151848203610100860152610dc08282610cb7565b915050610120830151610dd7610120860182610c37565b508091505092915050565b5f610ded8383610cef565b905092915050565b5f602082019050919050565b5f610e0b82610bff565b610e158185610c09565b935083602082028501610e2785610c19565b805f5b85811015610e625784840389528151610e438582610de2565b9450610e4e83610df5565b925060208a01995050600181019050610e2a565b50829750879550505050505092915050565b5f6020820190508181035f830152610e8c8184610e01565b905092915050565b5f8115159050919050565b610ea881610e94565b82525050565b5f602082019050610ec15f830184610e9f565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f0182610a90565b810181811067ffffffffffffffff82111715610f2057610f1f610ecb565b5b80604052505050565b5f610f32610af8565b9050610f3e8282610ef8565b919050565b5f67ffffffffffffffff821115610f5d57610f5c610ecb565b5b602082029050602081019050919050565b5f80fd5b5f610f84610f7f84610f43565b610f29565b90508083825260208201905060208402830185811115610fa757610fa6610f6e565b5b835b81811015610fd05780610fbc8882610b4f565b845260208401935050602081019050610fa9565b5050509392505050565b5f82601f830112610fee57610fed610ec7565b5b8135610ffe848260208601610f72565b91505092915050565b5f806040838503121561101d5761101c610b01565b5b5f61102a85828601610b4f565b925050602083013567ffffffffffffffff81111561104b5761104a610b05565b5b61105785828601610fda565b9150509250929050565b61106a81610c28565b82525050565b5f6020820190506110835f830184611061565b92915050565b5f81905092915050565b5f61109d82610a68565b6110a78185611089565b93506110b7818560208601610a82565b80840191505092915050565b5f6110ce8284611093565b915081905092915050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611119826110d9565b9150611124836110d9565b925082611134576111336110e2565b5b828206905092915050565b61114881610b28565b82525050565b5f82825260208201905092915050565b5f61116882610c9d565b611172818561114e565b9350611182818560208601610a82565b61118b81610a90565b840191505092915050565b5f819050919050565b5f819050919050565b5f6111c26111bd6111b884611196565b61119f565b610c28565b9050919050565b6111d2816111a8565b82525050565b5f610120820190506111ec5f83018c61113f565b81810360208301526111fe818b61115e565b905061120d604083018a611061565b61121a6060830189611061565b61122760808301886111c9565b81810360a08301526112398187610aa0565b905081810360c083015261124d818661115e565b905081810360e0830152611261818561115e565b9050611271610100830184611061565b9a9950505050505050505050565b5f80fd5b5f67ffffffffffffffff82111561129d5761129c610ecb565b5b6112a682610a90565b9050602081019050919050565b5f6112c56112c084611283565b610f29565b9050828152602081018484840111156112e1576112e061127f565b5b6112ec848285610a82565b509392505050565b5f82601f83011261130857611307610ec7565b5b81516113188482602086016112b3565b91505092915050565b5f6020828403121561133657611335610b01565b5b5f82015167ffffffffffffffff81111561135357611352610b05565b5b61135f848285016112f4565b91505092915050565b5f60408201905061137b5f830185610e9f565b818103602083015261138d8184610aa0565b90509392505050565b7f636861696e5f313239312d3100000000000000000000000000000000000000005f82015250565b5f6113ca600c8361114e565b91506113d582611396565b602082019050919050565b7f736368656d6100000000000000000000000000000000000000000000000000005f82015250565b5f61141460068361114e565b915061141f826113e0565b602082019050919050565b61143381610b8e565b82525050565b5f6101408201905061144d5f83018b61113f565b818103602083015261145e816113be565b905061146d604083018a611061565b61147a6060830189611061565b61148760808301886111c9565b81810360a08301526114998187610aa0565b905081810360c08301526114ac81611408565b905081810360e08301526114c0818661115e565b90506114d0610100830185611061565b6114de61012083018461142a565b9998505050505050505050565b5f6040820190506114fe5f83018561113f565b61150b602083018461113f565b9392505050565b5f67ffffffffffffffff82111561152c5761152b610ecb565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b61154e81610c28565b8114611558575f80fd5b50565b5f8151905061156981611545565b92915050565b5f8151905061157d81610b39565b92915050565b5f67ffffffffffffffff82111561159d5761159c610ecb565b5b6115a682610a90565b9050602081019050919050565b5f6115c56115c084611583565b610f29565b9050828152602081018484840111156115e1576115e061127f565b5b6115ec848285610a82565b509392505050565b5f82601f83011261160857611607610ec7565b5b81516116188482602086016115b3565b91505092915050565b5f61014082840312156116375761163661153d565b5b611642610140610f29565b90505f6116518482850161155b565b5f83015250602082015167ffffffffffffffff81111561167457611673611541565b5b611680848285016112f4565b60208301525060406116948482850161156f565b604083015250606082015167ffffffffffffffff8111156116b8576116b7611541565b5b6116c4848285016115f4565b60608301525060806116d88482850161155b565b60808301525060a06116ec8482850161155b565b60a08301525060c082015167ffffffffffffffff8111156117105761170f611541565b5b61171c848285016112f4565b60c08301525060e082015167ffffffffffffffff8111156117405761173f611541565b5b61174c848285016115f4565b60e08301525061010082015167ffffffffffffffff81111561177157611770611541565b5b61177d848285016115f4565b610100830152506101206117938482850161155b565b6101208301525092915050565b5f6117b26117ad84611512565b610f29565b905080838252602082019050602084028301858111156117d5576117d4610f6e565b5b835b8181101561181c57805167ffffffffffffffff8111156117fa576117f9610ec7565b5b8086016118078982611621565b855260208501945050506020810190506117d7565b5050509392505050565b5f82601f83011261183a57611839610ec7565b5b815161184a8482602086016117a0565b91505092915050565b5f6020828403121561186857611867610b01565b5b5f82015167ffffffffffffffff81111561188557611884610b05565b5b61189184828501611826565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6118ce8383610c8e565b60208301905092915050565b5f602082019050919050565b5f6118f08261189a565b6118fa81856118a4565b9350611905836118b4565b805f5b8381101561193557815161191c88826118c3565b9750611927836118da565b925050600181019050611908565b5085935050505092915050565b5f6080820190506119555f83018761113f565b6119626020830186611061565b61196f60408301856111c9565b818103606083015261198181846118e6565b905095945050505050565b61199581610e94565b811461199f575f80fd5b50565b5f815190506119b08161198c565b92915050565b5f602082840312156119cb576119ca610b01565b5b5f6119d8848285016119a2565b9150509291505056fea2646970667358221220e2acc2418f8d37c68a573935ed6868267b81fcabbed5f726450ef2a3d8d521d964736f6c634300081a0033" +COMPLIANCE_PROXY_CODEHASH="0xd05a753f154927b7c7c93019c83ebedd132958de6131661d0cb29c2939abf271" + +# validate dependencies are installed +command -v jq >/dev/null 2>&1 || { + echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/" + exit 1 +} + +# used to exit on first error (any non-zero exit code) +set -e + +rm -rf "$HOMEDIR" + +$BINARY config keyring-backend $KEYRING --home "$HOMEDIR" +$BINARY config chain-id $CHAINID --home "$HOMEDIR" + +echo "betray theory cargo way left cricket doll room donkey wire reunion fall left surprise hamster corn village happy bulb token artist twelve whisper expire" | $BINARY keys add alice --keyring-backend $KEYRING --home $HOMEDIR --recover +echo "toss sense candy point cost rookie jealous snow ankle electric sauce forward oblige tourist stairs horror grunt tenant afford master violin final genre reason" | $BINARY keys add bob --keyring-backend $KEYRING --home $HOMEDIR --recover +echo "offer feel open ancient relax habit field right evoke ball organ beauty" | $BINARY keys add test1 --recover --keyring-backend $KEYRING --home "$HOMEDIR" +echo "olympic such citizen any bind small neutral hidden prefer pupil trash lemon" | $BINARY keys add test2 --recover --keyring-backend $KEYRING --home "$HOMEDIR" +echo "cup hip eyebrow flock slogan filter gas tent angle purpose rose setup" | $BINARY keys add operator --recover --keyring-backend $KEYRING --home "$HOMEDIR" + +$BINARY init $MONIKER -o --chain-id $CHAINID --home "$HOMEDIR" + +jq '.app_state["feemarket"]["params"]["base_fee"]="7"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["staking"]["params"]["bond_denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["staking"]["params"]["unbonding_time"]="1s"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["crisis"]["constant_fee"]["denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["evm"]["params"]["evm_denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["inflation"]["params"]["mint_denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["mint"]["params"]["mint_denom"]="aswtr"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.consensus_params["block"]["max_gas"]="10000000"' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state["compliance"]["operators"]=[{"operator":"swtr1ml2knanpk8sv94f8h9g8vaf9k3yyfva4fykyn9", "operator_type": 1}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" + +# set initial issuer in genesis +jq --arg BYTECODE $COMPLIANCE_PROXY_BYTECODE '.app_state.evm.accounts += [{"address":"0x2Fc0B35E41a9a2eA248a275269Af1c8B3a061167", "code": $BYTECODE, "storage": []}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state.compliance.issuerDetails += [{"address": "swtr19lqtxhjp4x3w5fy2yafxntcu3vaqvyt827e4ct", "details": {"creator": "swtr1ml2knanpk8sv94f8h9g8vaf9k3yyfva4fykyn9", "description": "d", "legalEntity": "e", "logo": "l", "name": "n", "url": "u"}}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq '.app_state.compliance.addressDetails += [{"address": "swtr19lqtxhjp4x3w5fy2yafxntcu3vaqvyt827e4ct", "details": {"is_revoked": false, "is_verified": true, "verifications": []}}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" +jq --arg CODE_HASH $COMPLIANCE_PROXY_CODEHASH '.app_state.auth.accounts += [{"@type": "/ethermint.types.v1.EthAccount", "base_account": {"account_number": "5", "address": "swtr19lqtxhjp4x3w5fy2yafxntcu3vaqvyt827e4ct", "pub_key": null, "sequence": "1" }, "code_hash": $CODE_HASH}]' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" + +# expose ports +sed -i 's/127.0.0.1:26657/0.0.0.0:26657/g' "$CONFIG" +sed -i 's/127.0.0.1:8545/0.0.0.0:8545/g' "$APP_TOML" +sed -i 's/127.0.0.1:8546/0.0.0.0:8546/g' "$APP_TOML" + +# enable prometheus metrics +sed -i 's/prometheus = false/prometheus = true/' "$CONFIG" +sed -i 's/prometheus-retention-time = "0"/prometheus-retention-time = "1000000000000"/g' "$APP_TOML" +sed -i 's/enabled = false/enabled = true/g' "$APP_TOML" + +# disable unsafe eth endpoints +sed -i 's/unsafe-eth-endpoints-enabled = true/unsafe-eth-endpoints-enabled = false/' "$APP_TOML" + +# set min gas price +sed -i 's/minimum-gas-prices = ""/minimum-gas-prices = "0aswtr"/' "$APP_TOML" + +# Change proposal periods to pass within a reasonable time for local testing +sed -i.bak 's/"max_deposit_period": "172800s"/"max_deposit_period": "30s"/g' "$HOMEDIR"/config/genesis.json +sed -i.bak 's/"voting_period": "172800s"/"voting_period": "30s"/g' "$HOMEDIR"/config/genesis.json + +# set custom pruning settings +sed -i.bak 's/pruning = "default"/pruning = "custom"/g' "$APP_TOML" +sed -i.bak 's/pruning-keep-recent = "0"/pruning-keep-recent = "100"/g' "$APP_TOML" +sed -i.bak 's/pruning-interval = "0"/pruning-interval = "500"/g' "$APP_TOML" + +# Allocate genesis accounts +$BINARY add-genesis-account alice 100000000swtr --keyring-backend $KEYRING --home "$HOMEDIR" +$BINARY add-genesis-account bob 100000000swtr --keyring-backend $KEYRING --home "$HOMEDIR" +$BINARY add-genesis-account test1 100000000swtr --keyring-backend $KEYRING --home "$HOMEDIR" +$BINARY add-genesis-account test2 100000000swtr --keyring-backend $KEYRING --home "$HOMEDIR" +$BINARY add-genesis-account operator 100000000swtr --keyring-backend $KEYRING --home "$HOMEDIR" + +# Sign genesis transaction +$BINARY gentx alice 1000000000000000000000aswtr --keyring-backend $KEYRING --chain-id $CHAINID --home "$HOMEDIR" + +# Collect genesis tx +$BINARY collect-gentxs --home "$HOMEDIR" + +# Run this to ensure everything worked and that the genesis file is setup correctly +$BINARY validate-genesis --home "$HOMEDIR" + +# Initialize epoch keys for local testnet +KEYMANAGER_HOME=$KEYMANAGER_HOME ENCLAVE_HOME=$ENCLAVE_HOME $BINARY testnet init-testnet-enclave + +# configure cosmovisor +DAEMON_HOME=$DAEMON_HOME DAEMON_NAME=$DAEMON_NAME cosmovisor init $BINARY + +# add binary for upgrade +mkdir -p $HOMEDIR/cosmovisor/upgrades/v1.0.7/bin +cp $NEW_BINARY $HOMEDIR/cosmovisor/upgrades/v1.0.7/bin \ No newline at end of file diff --git a/scripts/upgrade/proposal.json b/scripts/upgrade/proposal.json new file mode 100644 index 00000000..d4bc7e00 --- /dev/null +++ b/scripts/upgrade/proposal.json @@ -0,0 +1,19 @@ +{ + "messages": [ + { + "@type": "/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade", + "authority": "swtr10d07y265gmmuvt4z0w9aw880jnsr700jdrnmrz", + "plan": { + "name": "v1.0.7", + "time": "0001-01-01T00:00:00Z", + "height": "300", + "info": "", + "upgraded_client_state": null + } + } + ], + "metadata": "ipfs://CID", + "deposit": "1000000aswtr", + "title": "v1.0.7", + "summary": "Upgrade Swisstronik Testnet to v1.0.7" +} \ No newline at end of file diff --git a/scripts/upgrade/run.sh b/scripts/upgrade/run.sh new file mode 100755 index 00000000..337e6ed6 --- /dev/null +++ b/scripts/upgrade/run.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +REPO_URL="https://github.com/SigmaGmbH/swisstronik-chain.git" +OLD_TAG="testnet-v1.0.6" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OLD_SOURCES="$SCRIPT_DIR/old" +NEW_SOURCES="$SCRIPT_DIR/../.." + +SGX_MODE=SW +PID_FILE="$SCRIPT_DIR/pid" + +OLD_BINARY="$SCRIPT_DIR/old/build/swisstronikd" +NEW_BINARY="$SCRIPT_DIR/../../build/swisstronikd" + +KEYMANAGER_HOME="$SCRIPT_DIR/.swisstronik-enclave" +ENCLAVE_HOME="$SCRIPT_DIR/.swisstronik-enclave" + +HOMEDIR="$SCRIPT_DIR/.swisstronik" +DAEMON_NAME=swisstronikd +DAEMON_HOME=$HOMEDIR +DAEMON_ALLOW_DOWNLOAD_BINARIES=false +DAEMON_RESTART_AFTER_UPGRADE=true + +if [ -z "$1" ]; then + echo "Usage: $0 {build|run|upgrade}" + exit 1 +fi + +case "$1" in + build) + echo "Building binaries..." + + if [ -d "$OLD_SOURCES" ]; then + echo "Removing existing '$OLD_SOURCES' folder..." + rm -rf "$OLD_SOURCES" + fi + + echo "Cloning $OLD_TAG into '$OLD_SOURCES'..." + git clone --branch "$OLD_TAG" --depth 1 "$REPO_URL" "$OLD_SOURCES" || { echo "Failed to clone repository."; exit 1; } + + echo "Running 'make build' in '$OLD_SOURCES'..." + (cd "$OLD_SOURCES" && git submodule update --init --recursive && ENCLAVE_HOME=$ENCLAVE_HOME SGX_MODE=$SGX_MODE make build_d) || { echo "Build failed."; exit 1; } + + echo "Running 'make build' in '$NEW_SOURCES'..." + (cd "$NEW_SOURCES" && ENCLAVE_HOME=$ENCLAVE_HOME SGX_MODE=$SGX_MODE make build_d) || { echo "Build failed."; exit 1; } + + ;; + run) + echo "Running chain..." + + sh init.sh "$SCRIPT_DIR" || { echo "Init script failed."; exit 1; } + nohup env DAEMON_HOME=$DAEMON_HOME DAEMON_NAME=$DAEMON_NAME ENCLAVE_HOME=$ENCLAVE_HOME KEYMANAGER_HOME=$KEYMANAGER_HOME cosmovisor run start --home $HOMEDIR > swtr.log 2>&1 & + echo $! > "$PID_FILE" + echo "Chain started with PID: $(cat "$PID_FILE")" + ;; + upgrade) + echo "Proposing upgrade..." + $OLD_BINARY tx gov submit-proposal "$SCRIPT_DIR/proposal.json" --from alice -y --gas-prices 7aswtr --home $HOMEDIR + sleep 5 + $OLD_BINARY tx gov deposit 1 10000000000000000000000aswtr --from alice -y --gas-prices 7aswtr --home $HOMEDIR + sleep 5 + $OLD_BINARY tx gov vote 1 yes --from alice -y --gas-prices 7aswtr --home $HOMEDIR + sleep 5 + $OLD_BINARY tx gov vote 1 yes --from bob -y --gas-prices 7aswtr --home $HOMEDIR + sleep 15 + $OLD_BINARY q gov proposals --home $HOMEDIR + ;; + stop) + echo "Stopping the application..." + if [ ! -f "$PID_FILE" ]; then + echo "No PID file found. Is the application running?" + exit 1 + fi + + PID=$(cat "$PID_FILE") + if kill "$PID" > /dev/null 2>&1; then + echo "Chain (PID: $PID) stopped." + rm -f "$PID_FILE" # Remove the PID file + else + echo "Failed to stop chain (PID: $PID)." + exit 1 + fi + ;; + *) + echo "Invalid command: $1" + echo "Usage: $0 {build|run|upgrade}" + exit 1 + ;; +esac + +exit 0 \ No newline at end of file diff --git a/sgxvm/Enclave.edl b/sgxvm/Enclave.edl index b514d982..e96136e5 100644 --- a/sgxvm/Enclave.edl +++ b/sgxvm/Enclave.edl @@ -65,7 +65,10 @@ enclave { size_t len ); - public sgx_status_t ecall_status(); + public sgx_status_t ecall_status( + [in] const sgx_target_info_t* qe_target_info, + uint32_t quote_size + ); public ResultWithAllocation ecall_dump_dcap_quote( [in] const sgx_target_info_t* qe_target_info, diff --git a/sgxvm/proto/ffi.proto b/sgxvm/proto/ffi.proto index 75295bd9..b5827283 100644 --- a/sgxvm/proto/ffi.proto +++ b/sgxvm/proto/ffi.proto @@ -187,6 +187,12 @@ message QueryAddVerificationDetailsV2Response { bytes verificationId = 1; } +message QueryRevokeVerification { + bytes verificationId = 1; + bytes issuer = 2; +} +message QueryRevokeVerificationResponse {} + message QueryHasVerification { bytes userAddress = 1; uint32 verificationType = 2; @@ -230,6 +236,13 @@ message QueryGetVerificationDataResponse { repeated VerificationDetails data = 1; } +message QueryConvertCredential { + bytes verificationId = 1; + bytes holderPublicKey = 2; + bytes caller = 3; +} +message QueryConvertCredentialResponse {} + message CosmosRequest { oneof req { QueryGetAccount getAccount = 1; @@ -252,6 +265,8 @@ message CosmosRequest { QueryIssuanceTreeRoot issuanceTreeRoot = 18; QueryRevocationTreeRoot revocationTreeRoot = 19; QueryAddVerificationDetailsV2 addVerificationDetailsV2 = 20; + QueryRevokeVerification revokeVerification = 21; + QueryConvertCredential convertCredential = 22; } } diff --git a/sgxvm/src/attestation/hex.rs b/sgxvm/src/attestation/hex.rs index 7e15bd68..1ff4a063 100644 --- a/sgxvm/src/attestation/hex.rs +++ b/sgxvm/src/attestation/hex.rs @@ -4,9 +4,9 @@ use std::prelude::v1::*; fn decode_hex_digit(digit: char) -> u8 { match digit { - '0'..='9' => digit as u8 - '0' as u8, - 'a'..='f' => digit as u8 - 'a' as u8 + 10, - 'A'..='F' => digit as u8 - 'A' as u8 + 10, + '0'..='9' => digit as u8 - b'0', + 'a'..='f' => digit as u8 - b'a' + 10, + 'A'..='F' => digit as u8 - b'A' + 10, _ => panic!(), } } @@ -64,7 +64,7 @@ fn encode_hex_byte(byte: u8) -> [char; 2] { pub fn encode_hex(bytes: &[u8]) -> String { let strs: Vec = bytes .iter() - .map(|byte| encode_hex_byte(*byte).iter().map(|c| *c).collect()) + .map(|byte| encode_hex_byte(*byte).iter().copied().collect()) .collect(); strs.join(" ") } diff --git a/sgxvm/src/attestation/self_attestation.rs b/sgxvm/src/attestation/self_attestation.rs index 7a1fb869..78745684 100644 --- a/sgxvm/src/attestation/self_attestation.rs +++ b/sgxvm/src/attestation/self_attestation.rs @@ -1,73 +1,40 @@ -use sgx_tcrypto::*; use sgx_types::*; -use std::string::String; use crate::attestation::{ - consts::{QUOTE_SIGNATURE_TYPE, MIN_REQUIRED_TCB}, - utils::create_attestation_report, - cert::{gen_ecc_cert, verify_quote_status} + tls::helpers, + cert::verify_dcap_cert }; #[cfg(feature = "hardware_mode")] -pub fn self_attest() -> sgx_status_t { - use super::report::AttestationReport; +pub fn self_attest( + qe_target_info: &sgx_target_info_t, + quote_size: u32, +) -> SgxResult<()> { + let (_, cert_der) = helpers::create_tls_cert_and_keys(Some(qe_target_info), Some(quote_size))?; - let ecc_handle = SgxEccHandle::new(); - let _result = ecc_handle.open(); - let (prv_k, pub_k) = ecc_handle.create_key_pair().unwrap(); + // Verify quote + match verify_dcap_cert(&cert_der) { + Ok(_) => { + #[cfg(feature = "mainnet")] + println!("Your node is ready to be connected to mainnet"); - let signed_report = match create_attestation_report(&pub_k, QUOTE_SIGNATURE_TYPE) - { - Ok(r) => r, - Err(e) => { - println!("[Enclave] Cannot create attestation report. Reason: {:?}", e.as_str()); - return sgx_status_t::SGX_ERROR_UNEXPECTED; - } - }; + #[cfg(not(feature = "mainnet"))] + println!("Your node is ready to be connected to testnet"); - let payload: String = match serde_json::to_string(&signed_report) { - Ok(payload) => payload, - Err(err) => { - println!("Cannot serialize report. Reason: {:?}", err); - return sgx_status_t::SGX_ERROR_UNEXPECTED; + Ok(()) } - }; - - let (_, cert_der) = match gen_ecc_cert(payload, &prv_k, &pub_k, &ecc_handle) - { - Ok(result) => result, - Err(err) => { - println!("Error in gen_ecc_cert. Reason {:?}", err); - return sgx_status_t::SGX_ERROR_UNEXPECTED; - } - }; - - // Parse report - let report = match AttestationReport::from_cert(&cert_der) { - Ok(report) => report, - Err(err) => { - println!("Cannot parse attestation report. Reason: {:?}", err); - return sgx_status_t::SGX_ERROR_UNEXPECTED; + Err (error) => { + println!("[Enclave] Cannot verify DCAP cert. Reason: {:?}", error); + Err(sgx_status_t::SGX_ERROR_UNEXPECTED) } - }; - - // Verify tcb - if report.tcb < MIN_REQUIRED_TCB { - println!("Your TCB is out of date. Required TCB: {:?}, current TCB: {:?}", MIN_REQUIRED_TCB, report.tcb); - return sgx_status_t::SGX_SUCCESS; } - - // Verify quote - match verify_quote_status(&report, &report.advisory_ids) { - Ok(_) => println!("Your node is ready to be connected to testnet / mainnet"), - Err(err) => println!("Node was not properly configured. Reason: {:?}", err) - } - - sgx_status_t::SGX_SUCCESS } #[cfg(not(feature = "hardware_mode"))] -pub fn self_attest() -> sgx_status_t { - println!("[Enclave] You're using swisstronikd built in SOFTWARE mode. It cannot be used to connect to actual testnet / mainnet"); - sgx_status_t::SGX_SUCCESS +pub fn self_attest( + _: &sgx_target_info_t, + _: u32, +) -> SgxResult<()> { + println!("self_attest disabled in Software Mode"); + Err(sgx_status_t::SGX_ERROR_UNEXPECTED) } \ No newline at end of file diff --git a/sgxvm/src/attestation/tls/helpers.rs b/sgxvm/src/attestation/tls/helpers.rs index fd69c279..92af865a 100644 --- a/sgxvm/src/attestation/tls/helpers.rs +++ b/sgxvm/src/attestation/tls/helpers.rs @@ -120,7 +120,7 @@ pub(super) fn decrypt_and_seal_master_key( } /// Creates keys and certificate for TLS connection -pub(super) fn create_tls_cert_and_keys( +pub fn create_tls_cert_and_keys( qe_target_info: Option<&sgx_target_info_t>, quote_size: Option, ) -> SgxResult<(Vec, Vec)> { diff --git a/sgxvm/src/attestation/utils.rs b/sgxvm/src/attestation/utils.rs index 54696ea8..916d14bb 100644 --- a/sgxvm/src/attestation/utils.rs +++ b/sgxvm/src/attestation/utils.rs @@ -85,8 +85,8 @@ fn parse_response_attn_report(resp: &[u8]) -> SgxResult<(String, Vec, Vec) -> SgxResult<(String, Ve } fn as_u32_le(array: &[u8; 4]) -> u32 { - ((array[0] as u32) << 0) + (array[0] as u32) + ((array[1] as u32) << 8) + ((array[2] as u32) << 16) + ((array[3] as u32) << 24) diff --git a/sgxvm/src/coder.rs b/sgxvm/src/coder.rs index a80925b3..2209e23b 100644 --- a/sgxvm/src/coder.rs +++ b/sgxvm/src/coder.rs @@ -203,7 +203,7 @@ pub fn encode_insert_account_balance(address: &H160, balance: &U256) -> Vec let mut request = ffi::QueryInsertAccountBalance::new(); request.set_address(address.as_bytes().to_vec()); - request.set_balance(u256_to_vec(&balance)); + request.set_balance(u256_to_vec(balance)); cosmos_request.set_insertAccountBalance(request); cosmos_request.write_to_bytes().unwrap() @@ -239,3 +239,26 @@ pub fn encode_get_account_code_size(address: &H160) -> Vec { cosmos_request.set_codeSize(request); cosmos_request.write_to_bytes().unwrap() } + +pub fn encode_revoke_verification(verification_id: Vec, issuer: &H160) -> Vec { + let mut cosmos_request = ffi::CosmosRequest::new(); + let mut request = ffi::QueryRevokeVerification::new(); + + request.set_verificationId(verification_id); + request.set_issuer(issuer.as_bytes().to_vec()); + + cosmos_request.set_revokeVerification(request); + cosmos_request.write_to_bytes().unwrap() +} + +pub fn encode_convert_credential(verification_id: Vec, holder_public_key: Vec, caller: &H160) -> Vec { + let mut cosmos_request = ffi::CosmosRequest::new(); + let mut request = ffi::QueryConvertCredential::new(); + + request.set_holderPublicKey(holder_public_key); + request.set_verificationId(verification_id); + request.set_caller(caller.as_bytes().to_vec()); + + cosmos_request.set_convertCredential(request); + cosmos_request.write_to_bytes().unwrap() +} \ No newline at end of file diff --git a/sgxvm/src/encryption.rs b/sgxvm/src/encryption.rs index 842e9aed..97a30345 100644 --- a/sgxvm/src/encryption.rs +++ b/sgxvm/src/encryption.rs @@ -168,12 +168,12 @@ pub fn encrypt_deoxys( encryption_salt: Option>, ) -> Result, Error> { // Derive encryption salt if provided - let encryption_salt = encryption_salt.and_then(|salt| { + let encryption_salt = encryption_salt.map(|salt| { let mut hasher = kSha256::new(); hasher.update(salt); let mut encryption_salt = [0u8; 32]; encryption_salt.copy_from_slice(&hasher.finalize()); - Some(encryption_salt) + encryption_salt }); let nonce = match encryption_salt { diff --git a/sgxvm/src/handlers/tx.rs b/sgxvm/src/handlers/tx.rs index eea6f0c0..3a07218e 100644 --- a/sgxvm/src/handlers/tx.rs +++ b/sgxvm/src/handlers/tx.rs @@ -175,7 +175,7 @@ fn run_tx( match res { Ok(res) => { match res { - TransactValue::Call {succeed, retval} => { + TransactValue::Call {succeed: _, retval} => { ExecutionResult { logs: convert_logs(changeset.logs), data: retval, @@ -183,7 +183,7 @@ fn run_tx( vm_error: "".to_string() } } - TransactValue::Create {succeed, address} => { + TransactValue::Create {succeed: _, address} => { // Check if run_tx was called in context of transaction or in context of eth_call or eth_estimateGas. // We commit changes only in case of transaction context. if should_commit { diff --git a/sgxvm/src/handlers/utils.rs b/sgxvm/src/handlers/utils.rs index d217cd7b..6e0d44de 100644 --- a/sgxvm/src/handlers/utils.rs +++ b/sgxvm/src/handlers/utils.rs @@ -6,30 +6,30 @@ use protobuf::RepeatedField; use std::vec::Vec; use crate::protobuf_generated::ffi::{AccessListItem, SGXVMCallParams, SGXVMCreateParams}; -impl Into for SGXVMCallParams { - fn into(self) -> TransactArgs { +impl From for TransactArgs { + fn from(val: SGXVMCallParams) -> Self { TransactArgs::Call { - caller: H160::from_slice(&self.from), - address: H160::from_slice(&self.to), - value: U256::from_big_endian(&self.value), - data: self.data, - gas_limit: U256::from(self.gasLimit), - gas_price: U256::from_big_endian(&self.gasPrice), - access_list: parse_access_list(self.accessList), + caller: H160::from_slice(&val.from), + address: H160::from_slice(&val.to), + value: U256::from_big_endian(&val.value), + data: val.data, + gas_limit: U256::from(val.gasLimit), + gas_price: U256::from_big_endian(&val.gasPrice), + access_list: parse_access_list(val.accessList), } } } -impl Into for SGXVMCreateParams { - fn into(self) -> TransactArgs { +impl From for TransactArgs { + fn from(val: SGXVMCreateParams) -> Self { TransactArgs::Create { - caller: H160::from_slice(&self.from), - value: U256::from_big_endian(&self.value), - init_code: self.data, + caller: H160::from_slice(&val.from), + value: U256::from_big_endian(&val.value), + init_code: val.data, salt: None, - gas_limit: U256::from(self.gasLimit), - gas_price: U256::from_big_endian(&self.gasPrice), - access_list: parse_access_list(self.accessList), + gas_limit: U256::from(val.gasLimit), + gas_price: U256::from_big_endian(&val.gasPrice), + access_list: parse_access_list(val.accessList), } } } diff --git a/sgxvm/src/key_manager/mod.rs b/sgxvm/src/key_manager/mod.rs index 31e11a7d..06661b50 100644 --- a/sgxvm/src/key_manager/mod.rs +++ b/sgxvm/src/key_manager/mod.rs @@ -66,31 +66,19 @@ impl KeyManager { } pub fn get_state_key_by_epoch(&self, epoch: u16) -> Option { - match self.epoch_manager.get_epoch(epoch) { - Some(epoch) => Some(epoch.get_state_key()), - None => None - } + self.epoch_manager.get_epoch(epoch).map(|epoch| epoch.get_state_key()) } pub fn get_state_key_by_block(&self, block_number: u64) -> Option<(u16, StateEncryptionKey)> { - match self.epoch_manager.get_current_epoch(block_number) { - Some(epoch) => Some((epoch.epoch_number, epoch.get_state_key())), - None => None - } + self.epoch_manager.get_current_epoch(block_number).map(|epoch| (epoch.epoch_number, epoch.get_state_key())) } pub fn get_tx_key_by_epoch(&self, epoch: u16) -> Option { - match self.epoch_manager.get_epoch(epoch) { - Some(epoch) => Some(epoch.get_tx_key()), - None => None - } + self.epoch_manager.get_epoch(epoch).map(|epoch| epoch.get_tx_key()) } pub fn get_tx_key_by_block(&self, block_number: u64) -> Option<(u16, TransactionEncryptionKey)> { - match self.epoch_manager.get_current_epoch(block_number) { - Some(epoch) => Some((epoch.epoch_number, epoch.get_tx_key())), - None => None - } + self.epoch_manager.get_current_epoch(block_number).map(|epoch| (epoch.epoch_number, epoch.get_tx_key())) } /// Checks if file with sealed master key exists diff --git a/sgxvm/src/key_manager/utils.rs b/sgxvm/src/key_manager/utils.rs index 8a645e9e..6668199e 100644 --- a/sgxvm/src/key_manager/utils.rs +++ b/sgxvm/src/key_manager/utils.rs @@ -32,7 +32,7 @@ pub fn random_bytes32() -> SgxResult<[u8; 32]> { /// Generates random 32 bytes slice using `sgx_read_rand` function pub fn random_nonce() -> SgxResult<[u8; NONCE_SIZE]> { let mut buffer = [0u8; NONCE_SIZE]; - let res = unsafe { sgx_read_rand(&mut buffer as *mut u8, NONCE_SIZE as usize) }; + let res = unsafe { sgx_read_rand(&mut buffer as *mut u8, NONCE_SIZE) }; if res != sgx_status_t::SGX_SUCCESS { println!( diff --git a/sgxvm/src/lib.rs b/sgxvm/src/lib.rs index 82d4eb0a..c3271267 100644 --- a/sgxvm/src/lib.rs +++ b/sgxvm/src/lib.rs @@ -82,8 +82,14 @@ pub extern "C" fn ecall_allocate(data: *const u8, len: usize) -> crate::types::A #[no_mangle] /// Performes self attestation and outputs if system was configured /// properly and node can pass Remote Attestation. -pub extern "C" fn ecall_status() -> sgx_status_t { - attestation::self_attestation::self_attest() +pub extern "C" fn ecall_status( + qe_target_info: &sgx_target_info_t, + quote_size: u32, +) -> sgx_status_t { + match attestation::self_attestation::self_attest(qe_target_info, quote_size) { + Ok(_) => sgx_status_t::SGX_SUCCESS, + Err(err) => err, + } } #[no_mangle] diff --git a/sgxvm/src/memory.rs b/sgxvm/src/memory.rs index deb44db3..34fb9833 100644 --- a/sgxvm/src/memory.rs +++ b/sgxvm/src/memory.rs @@ -9,6 +9,7 @@ use std::borrow::ToOwned; /// /// Go's nil value is fully supported, such that we can differentiate between nil and an empty slice. #[repr(C)] +#[derive(Debug)] pub struct ByteSliceView { /// True if and only if the byte slice is nil in Go. If this is true, the other fields must be ignored. is_nil: bool, @@ -45,7 +46,15 @@ impl ByteSliceView { if self.is_nil { None } else { - Some(unsafe { slice::from_raw_parts(self.ptr, self.len) }) + Some( + // "`data` must be non-null and aligned even for zero-length slices" + if self.len == 0 { + let dangling = std::ptr::NonNull::::dangling(); + unsafe { slice::from_raw_parts(dangling.as_ptr(), 0) } + } else { + unsafe { slice::from_raw_parts(self.ptr, self.len) } + }, + ) } } @@ -193,7 +202,7 @@ impl U8SliceView { /// // `output` is ready to be passed around /// ``` #[repr(C)] -#[derive(Copy, Clone, Debug, PartialEq)] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct UnmanagedVector { /// True if and only if this is None. If this is true, the other fields must be ignored. is_none: bool, @@ -209,10 +218,18 @@ impl UnmanagedVector { match source { Some(data) => { let (ptr, len, cap) = { - // Can be replaced with Vec::into_raw_parts when stable - // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts - let mut data = mem::ManuallyDrop::new(data); - (data.as_mut_ptr(), data.len(), data.capacity()) + if data.capacity() == 0 { + // we need to explicitly use a null pointer here, since `as_mut_ptr` + // always returns a dangling pointer (e.g. 0x01) on an empty Vec, + // which trips up Go's pointer checks. + // This is safe because the Vec has not allocated, so no memory is leaked. + (std::ptr::null_mut::(), 0, 0) + } else { + // Can be replaced with Vec::into_raw_parts when stable + // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts + let mut data = mem::ManuallyDrop::new(data); + (data.as_mut_ptr(), data.len(), data.capacity()) + } }; Self { is_none: false, @@ -230,6 +247,16 @@ impl UnmanagedVector { } } + /// Creates a non-none UnmanagedVector with the given data. + pub fn some(data: impl Into>) -> Self { + Self::new(Some(data.into())) + } + + /// Creates a none UnmanagedVector. + pub fn none() -> Self { + Self::new(None) + } + pub fn is_none(&self) -> bool { self.is_none } @@ -243,6 +270,12 @@ impl UnmanagedVector { pub fn consume(self) -> Option> { if self.is_none { None + } else if self.cap == 0 { + // capacity 0 means the vector was never allocated and + // the ptr field does not point to an actual byte buffer + // (we normalize to `null` in `UnmanagedVector::new`), + // so no memory is leaked by ignoring the ptr field here. + Some(Vec::new()) } else { Some(unsafe { Vec::from_raw_parts(self.ptr, self.len, self.cap) }) } @@ -251,7 +284,7 @@ impl UnmanagedVector { impl Default for UnmanagedVector { fn default() -> Self { - Self::new(None) + Self::none() } } @@ -266,6 +299,8 @@ pub extern "C" fn new_unmanaged_vector( } else if length == 0 { UnmanagedVector::new(Some(Vec::new())) } else { + // In slice::from_raw_parts, `data` must be non-null and aligned even for zero-length slices. + // For this reason we cover the length == 0 case separately above. let external_memory = unsafe { slice::from_raw_parts(ptr, length) }; let copy = Vec::from(external_memory); UnmanagedVector::new(Some(copy)) @@ -293,6 +328,14 @@ mod test { let view = ByteSliceView::nil(); assert!(view.read().is_none()); + + // This is what we get when creating a ByteSliceView for an empty []byte in Go + let view = ByteSliceView { + is_nil: false, + ptr: std::ptr::null::(), + len: 0, + }; + assert!(view.read().is_some()); } #[test] @@ -321,18 +364,45 @@ mod test { // Empty data let x = UnmanagedVector::new(Some(vec![])); assert!(!x.is_none); - assert_eq!(x.ptr as usize, 0x01); // We probably don't get any guarantee for this, but good to know where the 0x01 marker pointer can come from + assert_eq!(x.ptr as usize, 0); assert_eq!(x.len, 0); assert_eq!(x.cap, 0); // None let x = UnmanagedVector::new(None); assert!(x.is_none); + assert_eq!(x.ptr as usize, 0); // this is not guaranteed, could be anything + assert_eq!(x.len, 0); // this is not guaranteed, could be anything + assert_eq!(x.cap, 0); // this is not guaranteed, could be anything + } + + #[test] + fn unmanaged_vector_some_works() { + // With data + let x = UnmanagedVector::some(vec![0x11, 0x22]); + assert!(!x.is_none); + assert_ne!(x.ptr as usize, 0); + assert_eq!(x.len, 2); + assert_eq!(x.cap, 2); + + // Empty data + let x = UnmanagedVector::some(vec![]); + assert!(!x.is_none); assert_eq!(x.ptr as usize, 0); assert_eq!(x.len, 0); assert_eq!(x.cap, 0); } + #[test] + fn unmanaged_vector_none_works() { + let x = UnmanagedVector::new(None); + assert!(x.is_none); + + assert_eq!(x.ptr as usize, 0); // this is not guaranteed, could be anything + assert_eq!(x.len, 0); // this is not guaranteed, could be anything + assert_eq!(x.cap, 0); // this is not guaranteed, could be anything + } + #[test] fn unmanaged_vector_is_some_works() { let x = UnmanagedVector::new(Some(vec![0x11, 0x22])); @@ -368,4 +438,34 @@ mod test { let x = UnmanagedVector::default(); assert_eq!(x.consume(), None); } -} + + #[test] + fn new_unmanaged_vector_works() { + // Some simple data + let data = b"some stuff"; + let x = new_unmanaged_vector(false, data.as_ptr(), data.len()); + assert_eq!(x.consume(), Some(Vec::::from(b"some stuff" as &[u8]))); + + // empty created in Rust + let data = b""; + let x = new_unmanaged_vector(false, data.as_ptr(), data.len()); + assert_eq!(x.consume(), Some(Vec::::new())); + + // empty created in Go + let x = new_unmanaged_vector(false, std::ptr::null::(), 0); + assert_eq!(x.consume(), Some(Vec::::new())); + + // nil with garbage pointer + let x = new_unmanaged_vector(true, 345 as *const u8, 46); + assert_eq!(x.consume(), None); + + // nil with empty slice + let data = b""; + let x = new_unmanaged_vector(true, data.as_ptr(), data.len()); + assert_eq!(x.consume(), None); + + // nil with null pointer + let x = new_unmanaged_vector(true, std::ptr::null::(), 0); + assert_eq!(x.consume(), None); + } +} \ No newline at end of file diff --git a/sgxvm/src/ocall.rs b/sgxvm/src/ocall.rs index 4061f580..6692d9ba 100644 --- a/sgxvm/src/ocall.rs +++ b/sgxvm/src/ocall.rs @@ -5,68 +5,74 @@ use sgx_types::*; extern "C" { pub fn ocall_query_raw( - ret_val: *mut AllocationWithResult, - querier: *mut GoQuerier, - request: *const u8, - len: usize, + _ret_val: *mut AllocationWithResult, + _querier: *mut GoQuerier, + _request: *const u8, + _len: usize, ) -> sgx_status_t; - pub fn ocall_allocate(ret_val: *mut Allocation, data: *const u8, len: usize) -> sgx_status_t; + pub fn ocall_allocate( + _ret_val: *mut Allocation, + _data: *const u8, + _len: usize) -> sgx_status_t; pub fn ocall_sgx_init_quote( - ret_val: *mut sgx_status_t, - ret_ti: *mut sgx_target_info_t, - ret_gid: *mut sgx_epid_group_id_t, + _ret_val: *mut sgx_status_t, + _ret_ti: *mut sgx_target_info_t, + _ret_gid: *mut sgx_epid_group_id_t, ) -> sgx_status_t; - pub fn ocall_get_ias_socket(ret_val: *mut sgx_status_t, ret_fd: *mut i32) -> sgx_status_t; + pub fn ocall_get_ias_socket( + _ret_val: *mut sgx_status_t, + _ret_fd: *mut i32, + ) -> sgx_status_t; pub fn ocall_get_quote( - ret_val: *mut sgx_status_t, - p_sigrl: *const u8, - sigrl_len: u32, - p_report: *const sgx_report_t, - quote_type: sgx_quote_sign_type_t, - p_spid: *const sgx_spid_t, - p_nonce: *const sgx_quote_nonce_t, - p_qe_report: *mut sgx_report_t, - p_quote: *mut u8, - maxlen: u32, - p_quote_len: *mut u32, + _ret_val: *mut sgx_status_t, + _p_sigrl: *const u8, + _sigrl_len: u32, + _p_report: *const sgx_report_t, + _quote_type: sgx_quote_sign_type_t, + _p_spid: *const sgx_spid_t, + _p_nonce: *const sgx_quote_nonce_t, + _p_qe_report: *mut sgx_report_t, + _p_quote: *mut u8, + _maxlen: u32, + _p_quote_len: *mut u32, ) -> sgx_status_t; pub fn ocall_get_ecdsa_quote( - ret_val: *mut sgx_status_t, - p_report: *const sgx_report_t, - p_quote: *mut u8, - quote_size: u32, + _ret_val: *mut sgx_status_t, + _p_report: *const sgx_report_t, + _p_quote: *mut u8, + _quote_size: u32, ) -> sgx_status_t; pub fn ocall_get_qve_report( - ret_val: *mut sgx_status_t, - p_quote: *const u8, - quote_len: u32, - timestamp: i64, - p_collateral_expiration_status: *mut u32, - p_quote_verification_result: *mut sgx_ql_qv_result_t, - p_qve_report_info: *mut sgx_ql_qe_report_info_t, - p_supplemental_data: *mut u8, - supplemental_data_size: u32, - p_collateral: *const u8, - collateral_len: u32, + _ret_val: *mut sgx_status_t, + _p_quote: *const u8, + _quote_len: u32, + _timestamp: i64, + _p_collateral_expiration_status: *mut u32, + _p_quote_verification_result: *mut sgx_ql_qv_result_t, + _p_qve_report_info: *mut sgx_ql_qe_report_info_t, + _p_supplemental_data: *mut u8, + _supplemental_data_size: u32, + _p_collateral: *const u8, + _collateral_len: u32, ) -> sgx_status_t; pub fn ocall_get_supplemental_data_size( - ret_val: *mut sgx_status_t, - data_size: *mut u32, + _ret_val: *mut sgx_status_t, + _data_size: *mut u32, ) -> sgx_status_t; pub fn ocall_get_quote_ecdsa_collateral( - ret_val: *mut sgx_status_t, - p_quote: *const u8, - n_quote: u32, - p_col: *mut u8, - n_col: u32, - p_col_out: *mut u32, + _ret_val: *mut sgx_status_t, + _p_quote: *const u8, + _n_quote: u32, + _p_col: *mut u8, + _n_col: u32, + _p_col_out: *mut u32, ) -> sgx_status_t; } diff --git a/sgxvm/src/precompiles/compliance_bridge.rs b/sgxvm/src/precompiles/compliance_bridge.rs index 2018d373..c54f660a 100644 --- a/sgxvm/src/precompiles/compliance_bridge.rs +++ b/sgxvm/src/precompiles/compliance_bridge.rs @@ -10,7 +10,16 @@ use std::vec::Vec; use crate::precompiles::LinearCostPrecompileWithQuerier; use crate::{coder, querier, GoQuerier}; -use crate::protobuf_generated::ffi::{QueryAddVerificationDetailsResponse, QueryAddVerificationDetailsV2, QueryAddVerificationDetailsV2Response, QueryGetVerificationDataResponse, QueryHasVerificationResponse, QueryIssuanceTreeRoot, QueryIssuanceTreeRootResponse, QueryRevocationTreeRootResponse}; +use crate::protobuf_generated::ffi::{ + QueryAddVerificationDetailsResponse, + QueryAddVerificationDetailsV2Response, + QueryConvertCredentialResponse, + QueryGetVerificationDataResponse, + QueryHasVerificationResponse, + QueryIssuanceTreeRootResponse, + QueryRevocationTreeRootResponse, + QueryRevokeVerificationResponse +}; // Selector of `addVerificationDetails` function const ADD_VERIFICATION_FN_SELECTOR: &str = "e62364ab"; @@ -24,6 +33,14 @@ const GET_VERIFICATION_DATA_FN_SELECTOR: &str = "cc8995ec"; const GET_REVOCATION_TREE_ROOT_FN_SELECTOR: &str = "3db94a04"; // Selector of `getIssuanceTreeRoot` function const GET_ISSUANCE_TREE_ROOT_FN_SELECTOR: &str = "d0376bd2"; +const REVOKE_VERIFICATION_FN_SELECTOR: &str = "e711d86d"; +const CONVERT_CREDENTIAL_FN_SELECTOR: &str = "460c4841"; + +const MAX_ISSUER_VERIFICATION_ID_SIZE: usize = 256; +const MAX_PROOF_DATA_SIZE: usize = 4096; +const MAX_SCHEMA_SIZE: usize = 1028; +const MAX_ORIGIN_CHAIN_SIZE: usize = 96; +const USER_PUBLIC_KEY_SIZE: usize = 32; /// Precompile for interactions with x/compliance module. pub struct ComplianceBridge; @@ -58,8 +75,70 @@ fn route( return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot decode input".into())])); } - let input_signature = hex::encode(data[..4].to_vec()); + let input_signature = hex::encode(&data[..4]); match input_signature.as_str() { + CONVERT_CREDENTIAL_FN_SELECTOR => { + let revoke_verification_params = vec![ + ParamType::Bytes, + ParamType::Bytes, + ]; + + let decoded_params = match decode_input(revoke_verification_params, &data[4..]) { + Ok(params) => params, + Err(_) => return (ExitError::Reverted.into(), encode(&[AbiToken::String("failed to decode input parameters".into())])) + }; + + let verification_id = match decoded_params[0].clone().into_bytes() { + Some(id) => id, + None => return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot parse verification id".into())])) + }; + + let holder_public_key = match decoded_params[1].clone().into_bytes() { + Some(id) => id, + None => return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot parse holder public key".into())])) + }; + + let encoded_request = coder::encode_convert_credential(verification_id, holder_public_key, &caller); + match querier::make_request(querier, encoded_request) { + Some(result) => { + let _: QueryConvertCredentialResponse = match protobuf::parse_from_bytes(&result) { + Ok(response) => response, + Err(_) => return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot decode protobuf response".into())])) + }; + + (ExitSucceed::Returned.into(), Vec::new()) + } + None => (ExitError::Reverted.into(), encode(&[AbiToken::String("call to convertCredential function to x/compliance failed".into())])) + } + } + REVOKE_VERIFICATION_FN_SELECTOR => { + let revoke_verification_params = vec![ + ParamType::Bytes, + ]; + + let decoded_params = match decode_input(revoke_verification_params, &data[4..]) { + Ok(params) => params, + Err(_) => return (ExitError::Reverted.into(), encode(&[AbiToken::String("failed to decode input parameters".into())])) + }; + + let verification_id = match decoded_params[0].clone().into_bytes() { + Some(id) => id, + None => return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot parse verification id".into())])) + }; + + let encoded_request = coder::encode_revoke_verification(verification_id, &caller); + match querier::make_request(querier, encoded_request) { + Some(result) => { + let _: QueryRevokeVerificationResponse = match protobuf::parse_from_bytes(&result) { + Ok(response) => response, + Err(_) => return (ExitError::Reverted.into(), encode(&[AbiToken::String("cannot decode protobuf response".into())])) + }; + + (ExitSucceed::Returned.into(), Vec::new()) + } + None => (ExitError::Reverted.into(), encode(&[AbiToken::String("call to revokeVerification function to x/compliance failed".into())])) + } + } GET_REVOCATION_TREE_ROOT_FN_SELECTOR => { let encoded_request = coder::encode_get_revocation_tree_root_request(); match querier::make_request(querier, encoded_request) { @@ -106,12 +185,12 @@ fn route( let decoded_params = match decode_input(has_verification_params, &data[4..]) { Ok(params) => params, - Err(_) => return (ExitError::Reverted.into(), encode(&vec![AbiToken::String("failed to decode input parameters".into())])) + Err(_) => return (ExitError::Reverted.into(), encode(&[AbiToken::String("failed to decode input parameters".into())])) }; let user_address = match decoded_params[0].clone().into_address() { Some(addr) => addr, - None => return (ExitError::Reverted.into(), encode(&vec![AbiToken::String("invalid user address".into())])) + None => return (ExitError::Reverted.into(), encode(&[AbiToken::String("invalid user address".into())])) }; let verification_type = match decoded_params[1].clone().into_uint() { @@ -238,6 +317,30 @@ fn route( ) }; + if schema.len() > MAX_SCHEMA_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("schema size exceeds limit".into())]), + ); + } + + if proof_data.len() > MAX_PROOF_DATA_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("proof data size exceeds limit".into())]), + ); + } + + if issuer_verification_id.len() > MAX_ISSUER_VERIFICATION_ID_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("proof data size exceeds limit".into())]), + ); + } + + if origin_chain.len() > MAX_ORIGIN_CHAIN_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("origin chain size exceeds limit".into())]), + ); + } + let encoded_request = coder::encode_add_verification_details_request( user_address, caller, @@ -259,7 +362,7 @@ fn route( }; let token = vec![AbiToken::Bytes( - added_verification.verificationId.into(), + added_verification.verificationId, )]; let encoded_response = encode(&token); @@ -349,6 +452,36 @@ fn route( } }; + if schema.len() > MAX_SCHEMA_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("schema size exceeds limit".into())]), + ); + } + + if proof_data.len() > MAX_PROOF_DATA_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("proof data size exceeds limit".into())]), + ); + } + + if issuer_verification_id.len() > MAX_ISSUER_VERIFICATION_ID_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("proof data size exceeds limit".into())]), + ); + } + + if origin_chain.len() > MAX_ORIGIN_CHAIN_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("origin chain size exceeds limit".into())]), + ); + } + + if user_public_key.len() != USER_PUBLIC_KEY_SIZE { + return ( + ExitError::Reverted.into(), encode(&[AbiToken::String("user public key should be 32 byte long".into())]), + ); + } + let encoded_request = coder::encode_add_verification_details_v2_request( user_address, caller, @@ -371,7 +504,7 @@ fn route( }; let token = vec![AbiToken::Bytes( - added_verification.verificationId.into(), + added_verification.verificationId, )]; let encoded_response = encode(&token); @@ -425,12 +558,12 @@ fn route( let issuer_address = Address::from_slice(&log.issuerAddress); let tokens = vec![AbiToken::Tuple(vec![ AbiToken::Uint(log.verificationType.into()), - AbiToken::Bytes(log.verificationID.clone().into()), - AbiToken::Address(issuer_address.clone()), + AbiToken::Bytes(log.verificationID.clone()), + AbiToken::Address(issuer_address), AbiToken::String(log.originChain.clone()), AbiToken::Uint(log.issuanceTimestamp.into()), AbiToken::Uint(log.expirationTimestamp.into()), - AbiToken::Bytes(log.originalData.clone().into()), + AbiToken::Bytes(log.originalData.clone()), AbiToken::String(log.schema.clone()), AbiToken::String(log.issuerVerificationId.clone()), AbiToken::Uint(log.version.into()), @@ -446,7 +579,7 @@ fn route( None => (ExitError::Reverted.into(), encode(&[AbiToken::String("call to getVerificationData failed to x/compliance failed".into())])) } }, - _ => (ExitError::Reverted.into(), encode(&vec![AbiToken::String("incorrect request".into())])) + _ => (ExitError::Reverted.into(), encode(&[AbiToken::String("incorrect request".into())])) } } @@ -456,12 +589,12 @@ fn decode_input( ) -> Result, (ExitError, Vec)> { let decoded_params = ethabi::decode(¶m_types, input).map_err(|err| ( - ExitError::Reverted.into(), - encode(&[AbiToken::String(format!("cannot decode params: {:?}", err).into())]) + ExitError::Reverted, + encode(&[AbiToken::String(format!("cannot decode params: {:?}", err))]) ))?; if decoded_params.len() != param_types.len() { - return Err((ExitError::Reverted.into(), encode(&[AbiToken::String("incorrect decoded params len".into())]))); + return Err((ExitError::Reverted, encode(&[AbiToken::String("incorrect decoded params len".into())]))); } Ok(decoded_params) diff --git a/sgxvm/src/precompiles/mod.rs b/sgxvm/src/precompiles/mod.rs index 12f21279..212d4bf3 100644 --- a/sgxvm/src/precompiles/mod.rs +++ b/sgxvm/src/precompiles/mod.rs @@ -1,7 +1,7 @@ extern crate sgx_tstd as std; use evm::GasMutState; -use evm::interpreter::error::{ExitError, ExitException, ExitResult}; +use evm::interpreter::error::ExitResult; use evm::interpreter::runtime::RuntimeState; use evm::standard::PrecompileSet; use std::vec::Vec; diff --git a/sgxvm/src/protobuf_generated/ffi.rs b/sgxvm/src/protobuf_generated/ffi.rs index 0802d4a2..006f8fab 100644 --- a/sgxvm/src/protobuf_generated/ffi.rs +++ b/sgxvm/src/protobuf_generated/ffi.rs @@ -8724,111 +8724,80 @@ impl ::protobuf::reflect::ProtobufValue for QueryAddVerificationDetailsV2Respons } #[derive(PartialEq,Clone,Default)] -pub struct QueryHasVerification { +pub struct QueryRevokeVerification { // message fields - pub userAddress: ::std::vec::Vec, - pub verificationType: u32, - pub expirationTimestamp: u32, - pub allowedIssuers: ::protobuf::RepeatedField<::std::vec::Vec>, + pub verificationId: ::std::vec::Vec, + pub issuer: ::std::vec::Vec, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a QueryHasVerification { - fn default() -> &'a QueryHasVerification { - ::default_instance() +impl<'a> ::std::default::Default for &'a QueryRevokeVerification { + fn default() -> &'a QueryRevokeVerification { + ::default_instance() } } -impl QueryHasVerification { - pub fn new() -> QueryHasVerification { +impl QueryRevokeVerification { + pub fn new() -> QueryRevokeVerification { ::std::default::Default::default() } - // bytes userAddress = 1; + // bytes verificationId = 1; - pub fn get_userAddress(&self) -> &[u8] { - &self.userAddress + pub fn get_verificationId(&self) -> &[u8] { + &self.verificationId } - pub fn clear_userAddress(&mut self) { - self.userAddress.clear(); + pub fn clear_verificationId(&mut self) { + self.verificationId.clear(); } // Param is passed by value, moved - pub fn set_userAddress(&mut self, v: ::std::vec::Vec) { - self.userAddress = v; + pub fn set_verificationId(&mut self, v: ::std::vec::Vec) { + self.verificationId = v; } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_userAddress(&mut self) -> &mut ::std::vec::Vec { - &mut self.userAddress + pub fn mut_verificationId(&mut self) -> &mut ::std::vec::Vec { + &mut self.verificationId } // Take field - pub fn take_userAddress(&mut self) -> ::std::vec::Vec { - ::std::mem::replace(&mut self.userAddress, ::std::vec::Vec::new()) - } - - // uint32 verificationType = 2; - - - pub fn get_verificationType(&self) -> u32 { - self.verificationType - } - pub fn clear_verificationType(&mut self) { - self.verificationType = 0; - } - - // Param is passed by value, moved - pub fn set_verificationType(&mut self, v: u32) { - self.verificationType = v; - } - - // uint32 expirationTimestamp = 3; - - - pub fn get_expirationTimestamp(&self) -> u32 { - self.expirationTimestamp - } - pub fn clear_expirationTimestamp(&mut self) { - self.expirationTimestamp = 0; - } - - // Param is passed by value, moved - pub fn set_expirationTimestamp(&mut self, v: u32) { - self.expirationTimestamp = v; + pub fn take_verificationId(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.verificationId, ::std::vec::Vec::new()) } - // repeated bytes allowedIssuers = 4; + // bytes issuer = 2; - pub fn get_allowedIssuers(&self) -> &[::std::vec::Vec] { - &self.allowedIssuers + pub fn get_issuer(&self) -> &[u8] { + &self.issuer } - pub fn clear_allowedIssuers(&mut self) { - self.allowedIssuers.clear(); + pub fn clear_issuer(&mut self) { + self.issuer.clear(); } // Param is passed by value, moved - pub fn set_allowedIssuers(&mut self, v: ::protobuf::RepeatedField<::std::vec::Vec>) { - self.allowedIssuers = v; + pub fn set_issuer(&mut self, v: ::std::vec::Vec) { + self.issuer = v; } // Mutable pointer to the field. - pub fn mut_allowedIssuers(&mut self) -> &mut ::protobuf::RepeatedField<::std::vec::Vec> { - &mut self.allowedIssuers + // If field is not initialized, it is initialized with default value first. + pub fn mut_issuer(&mut self) -> &mut ::std::vec::Vec { + &mut self.issuer } // Take field - pub fn take_allowedIssuers(&mut self) -> ::protobuf::RepeatedField<::std::vec::Vec> { - ::std::mem::replace(&mut self.allowedIssuers, ::protobuf::RepeatedField::new()) + pub fn take_issuer(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.issuer, ::std::vec::Vec::new()) } } -impl ::protobuf::Message for QueryHasVerification { +impl ::protobuf::Message for QueryRevokeVerification { fn is_initialized(&self) -> bool { true } @@ -8838,24 +8807,10 @@ impl ::protobuf::Message for QueryHasVerification { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { 1 => { - ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.userAddress)?; + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.verificationId)?; }, 2 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.verificationType = tmp; - }, - 3 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.expirationTimestamp = tmp; - }, - 4 => { - ::protobuf::rt::read_repeated_bytes_into(wire_type, is, &mut self.allowedIssuers)?; + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.issuer)?; }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; @@ -8869,36 +8824,24 @@ impl ::protobuf::Message for QueryHasVerification { #[allow(unused_variables)] fn compute_size(&self) -> u32 { let mut my_size = 0; - if !self.userAddress.is_empty() { - my_size += ::protobuf::rt::bytes_size(1, &self.userAddress); - } - if self.verificationType != 0 { - my_size += ::protobuf::rt::value_size(2, self.verificationType, ::protobuf::wire_format::WireTypeVarint); + if !self.verificationId.is_empty() { + my_size += ::protobuf::rt::bytes_size(1, &self.verificationId); } - if self.expirationTimestamp != 0 { - my_size += ::protobuf::rt::value_size(3, self.expirationTimestamp, ::protobuf::wire_format::WireTypeVarint); + if !self.issuer.is_empty() { + my_size += ::protobuf::rt::bytes_size(2, &self.issuer); } - for value in &self.allowedIssuers { - my_size += ::protobuf::rt::bytes_size(4, &value); - }; my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - if !self.userAddress.is_empty() { - os.write_bytes(1, &self.userAddress)?; - } - if self.verificationType != 0 { - os.write_uint32(2, self.verificationType)?; + if !self.verificationId.is_empty() { + os.write_bytes(1, &self.verificationId)?; } - if self.expirationTimestamp != 0 { - os.write_uint32(3, self.expirationTimestamp)?; + if !self.issuer.is_empty() { + os.write_bytes(2, &self.issuer)?; } - for v in &self.allowedIssuers { - os.write_bytes(4, &v)?; - }; os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -8929,8 +8872,8 @@ impl ::protobuf::Message for QueryHasVerification { Self::descriptor_static() } - fn new() -> QueryHasVerification { - QueryHasVerification::new() + fn new() -> QueryRevokeVerification { + QueryRevokeVerification::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { @@ -8942,27 +8885,17 @@ impl ::protobuf::Message for QueryHasVerification { descriptor.get(|| { let mut fields = ::std::vec::Vec::new(); fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "userAddress", - |m: &QueryHasVerification| { &m.userAddress }, - |m: &mut QueryHasVerification| { &mut m.userAddress }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "verificationType", - |m: &QueryHasVerification| { &m.verificationType }, - |m: &mut QueryHasVerification| { &mut m.verificationType }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "expirationTimestamp", - |m: &QueryHasVerification| { &m.expirationTimestamp }, - |m: &mut QueryHasVerification| { &mut m.expirationTimestamp }, + "verificationId", + |m: &QueryRevokeVerification| { &m.verificationId }, + |m: &mut QueryRevokeVerification| { &mut m.verificationId }, )); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "allowedIssuers", - |m: &QueryHasVerification| { &m.allowedIssuers }, - |m: &mut QueryHasVerification| { &mut m.allowedIssuers }, + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "issuer", + |m: &QueryRevokeVerification| { &m.issuer }, + |m: &mut QueryRevokeVerification| { &mut m.issuer }, )); - ::protobuf::reflect::MessageDescriptor::new::( - "QueryHasVerification", + ::protobuf::reflect::MessageDescriptor::new::( + "QueryRevokeVerification", fields, file_descriptor_proto() ) @@ -8970,76 +8903,57 @@ impl ::protobuf::Message for QueryHasVerification { } } - fn default_instance() -> &'static QueryHasVerification { - static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + fn default_instance() -> &'static QueryRevokeVerification { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { lock: ::protobuf::lazy::ONCE_INIT, - ptr: 0 as *const QueryHasVerification, + ptr: 0 as *const QueryRevokeVerification, }; unsafe { - instance.get(QueryHasVerification::new) + instance.get(QueryRevokeVerification::new) } } } -impl ::protobuf::Clear for QueryHasVerification { +impl ::protobuf::Clear for QueryRevokeVerification { fn clear(&mut self) { - self.userAddress.clear(); - self.verificationType = 0; - self.expirationTimestamp = 0; - self.allowedIssuers.clear(); + self.verificationId.clear(); + self.issuer.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for QueryHasVerification { +impl ::std::fmt::Debug for QueryRevokeVerification { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for QueryHasVerification { +impl ::protobuf::reflect::ProtobufValue for QueryRevokeVerification { fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct QueryHasVerificationResponse { - // message fields - pub hasVerification: bool, +pub struct QueryRevokeVerificationResponse { // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a QueryHasVerificationResponse { - fn default() -> &'a QueryHasVerificationResponse { - ::default_instance() +impl<'a> ::std::default::Default for &'a QueryRevokeVerificationResponse { + fn default() -> &'a QueryRevokeVerificationResponse { + ::default_instance() } } -impl QueryHasVerificationResponse { - pub fn new() -> QueryHasVerificationResponse { +impl QueryRevokeVerificationResponse { + pub fn new() -> QueryRevokeVerificationResponse { ::std::default::Default::default() } - - // bool hasVerification = 1; - - - pub fn get_hasVerification(&self) -> bool { - self.hasVerification - } - pub fn clear_hasVerification(&mut self) { - self.hasVerification = false; - } - - // Param is passed by value, moved - pub fn set_hasVerification(&mut self, v: bool) { - self.hasVerification = v; - } } -impl ::protobuf::Message for QueryHasVerificationResponse { +impl ::protobuf::Message for QueryRevokeVerificationResponse { fn is_initialized(&self) -> bool { true } @@ -9048,13 +8962,6 @@ impl ::protobuf::Message for QueryHasVerificationResponse { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { - 1 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_bool()?; - self.hasVerification = tmp; - }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -9067,18 +8974,12 @@ impl ::protobuf::Message for QueryHasVerificationResponse { #[allow(unused_variables)] fn compute_size(&self) -> u32 { let mut my_size = 0; - if self.hasVerification != false { - my_size += 2; - } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - if self.hasVerification != false { - os.write_bool(1, self.hasVerification)?; - } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -9109,8 +9010,8 @@ impl ::protobuf::Message for QueryHasVerificationResponse { Self::descriptor_static() } - fn new() -> QueryHasVerificationResponse { - QueryHasVerificationResponse::new() + fn new() -> QueryRevokeVerificationResponse { + QueryRevokeVerificationResponse::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { @@ -9120,14 +9021,9 @@ impl ::protobuf::Message for QueryHasVerificationResponse { }; unsafe { descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "hasVerification", - |m: &QueryHasVerificationResponse| { &m.hasVerification }, - |m: &mut QueryHasVerificationResponse| { &mut m.hasVerification }, - )); - ::protobuf::reflect::MessageDescriptor::new::( - "QueryHasVerificationResponse", + let fields = ::std::vec::Vec::new(); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryRevokeVerificationResponse", fields, file_descriptor_proto() ) @@ -9135,54 +9031,55 @@ impl ::protobuf::Message for QueryHasVerificationResponse { } } - fn default_instance() -> &'static QueryHasVerificationResponse { - static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + fn default_instance() -> &'static QueryRevokeVerificationResponse { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { lock: ::protobuf::lazy::ONCE_INIT, - ptr: 0 as *const QueryHasVerificationResponse, + ptr: 0 as *const QueryRevokeVerificationResponse, }; unsafe { - instance.get(QueryHasVerificationResponse::new) + instance.get(QueryRevokeVerificationResponse::new) } } } -impl ::protobuf::Clear for QueryHasVerificationResponse { +impl ::protobuf::Clear for QueryRevokeVerificationResponse { fn clear(&mut self) { - self.hasVerification = false; self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for QueryHasVerificationResponse { +impl ::std::fmt::Debug for QueryRevokeVerificationResponse { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for QueryHasVerificationResponse { +impl ::protobuf::reflect::ProtobufValue for QueryRevokeVerificationResponse { fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct QueryGetVerificationData { +pub struct QueryHasVerification { // message fields pub userAddress: ::std::vec::Vec, - pub issuerAddress: ::std::vec::Vec, + pub verificationType: u32, + pub expirationTimestamp: u32, + pub allowedIssuers: ::protobuf::RepeatedField<::std::vec::Vec>, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a QueryGetVerificationData { - fn default() -> &'a QueryGetVerificationData { - ::default_instance() +impl<'a> ::std::default::Default for &'a QueryHasVerification { + fn default() -> &'a QueryHasVerification { + ::default_instance() } } -impl QueryGetVerificationData { - pub fn new() -> QueryGetVerificationData { +impl QueryHasVerification { + pub fn new() -> QueryHasVerification { ::std::default::Default::default() } @@ -9212,39 +9109,68 @@ impl QueryGetVerificationData { ::std::mem::replace(&mut self.userAddress, ::std::vec::Vec::new()) } - // bytes issuerAddress = 2; + // uint32 verificationType = 2; - pub fn get_issuerAddress(&self) -> &[u8] { - &self.issuerAddress + pub fn get_verificationType(&self) -> u32 { + self.verificationType } - pub fn clear_issuerAddress(&mut self) { - self.issuerAddress.clear(); + pub fn clear_verificationType(&mut self) { + self.verificationType = 0; } // Param is passed by value, moved - pub fn set_issuerAddress(&mut self, v: ::std::vec::Vec) { - self.issuerAddress = v; + pub fn set_verificationType(&mut self, v: u32) { + self.verificationType = v; } - // Mutable pointer to the field. - // If field is not initialized, it is initialized with default value first. - pub fn mut_issuerAddress(&mut self) -> &mut ::std::vec::Vec { - &mut self.issuerAddress - } + // uint32 expirationTimestamp = 3; - // Take field - pub fn take_issuerAddress(&mut self) -> ::std::vec::Vec { - ::std::mem::replace(&mut self.issuerAddress, ::std::vec::Vec::new()) - } -} -impl ::protobuf::Message for QueryGetVerificationData { - fn is_initialized(&self) -> bool { - true + pub fn get_expirationTimestamp(&self) -> u32 { + self.expirationTimestamp } - - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + pub fn clear_expirationTimestamp(&mut self) { + self.expirationTimestamp = 0; + } + + // Param is passed by value, moved + pub fn set_expirationTimestamp(&mut self, v: u32) { + self.expirationTimestamp = v; + } + + // repeated bytes allowedIssuers = 4; + + + pub fn get_allowedIssuers(&self) -> &[::std::vec::Vec] { + &self.allowedIssuers + } + pub fn clear_allowedIssuers(&mut self) { + self.allowedIssuers.clear(); + } + + // Param is passed by value, moved + pub fn set_allowedIssuers(&mut self, v: ::protobuf::RepeatedField<::std::vec::Vec>) { + self.allowedIssuers = v; + } + + // Mutable pointer to the field. + pub fn mut_allowedIssuers(&mut self) -> &mut ::protobuf::RepeatedField<::std::vec::Vec> { + &mut self.allowedIssuers + } + + // Take field + pub fn take_allowedIssuers(&mut self) -> ::protobuf::RepeatedField<::std::vec::Vec> { + ::std::mem::replace(&mut self.allowedIssuers, ::protobuf::RepeatedField::new()) + } +} + +impl ::protobuf::Message for QueryHasVerification { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -9252,7 +9178,21 @@ impl ::protobuf::Message for QueryGetVerificationData { ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.userAddress)?; }, 2 => { - ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.issuerAddress)?; + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.verificationType = tmp; + }, + 3 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.expirationTimestamp = tmp; + }, + 4 => { + ::protobuf::rt::read_repeated_bytes_into(wire_type, is, &mut self.allowedIssuers)?; }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; @@ -9269,9 +9209,15 @@ impl ::protobuf::Message for QueryGetVerificationData { if !self.userAddress.is_empty() { my_size += ::protobuf::rt::bytes_size(1, &self.userAddress); } - if !self.issuerAddress.is_empty() { - my_size += ::protobuf::rt::bytes_size(2, &self.issuerAddress); + if self.verificationType != 0 { + my_size += ::protobuf::rt::value_size(2, self.verificationType, ::protobuf::wire_format::WireTypeVarint); + } + if self.expirationTimestamp != 0 { + my_size += ::protobuf::rt::value_size(3, self.expirationTimestamp, ::protobuf::wire_format::WireTypeVarint); } + for value in &self.allowedIssuers { + my_size += ::protobuf::rt::bytes_size(4, &value); + }; my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size @@ -9281,9 +9227,15 @@ impl ::protobuf::Message for QueryGetVerificationData { if !self.userAddress.is_empty() { os.write_bytes(1, &self.userAddress)?; } - if !self.issuerAddress.is_empty() { - os.write_bytes(2, &self.issuerAddress)?; + if self.verificationType != 0 { + os.write_uint32(2, self.verificationType)?; + } + if self.expirationTimestamp != 0 { + os.write_uint32(3, self.expirationTimestamp)?; } + for v in &self.allowedIssuers { + os.write_bytes(4, &v)?; + }; os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -9314,8 +9266,8 @@ impl ::protobuf::Message for QueryGetVerificationData { Self::descriptor_static() } - fn new() -> QueryGetVerificationData { - QueryGetVerificationData::new() + fn new() -> QueryHasVerification { + QueryHasVerification::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { @@ -9328,16 +9280,26 @@ impl ::protobuf::Message for QueryGetVerificationData { let mut fields = ::std::vec::Vec::new(); fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( "userAddress", - |m: &QueryGetVerificationData| { &m.userAddress }, - |m: &mut QueryGetVerificationData| { &mut m.userAddress }, + |m: &QueryHasVerification| { &m.userAddress }, + |m: &mut QueryHasVerification| { &mut m.userAddress }, )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "issuerAddress", - |m: &QueryGetVerificationData| { &m.issuerAddress }, - |m: &mut QueryGetVerificationData| { &mut m.issuerAddress }, + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "verificationType", + |m: &QueryHasVerification| { &m.verificationType }, + |m: &mut QueryHasVerification| { &mut m.verificationType }, )); - ::protobuf::reflect::MessageDescriptor::new::( - "QueryGetVerificationData", + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "expirationTimestamp", + |m: &QueryHasVerification| { &m.expirationTimestamp }, + |m: &mut QueryHasVerification| { &mut m.expirationTimestamp }, + )); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "allowedIssuers", + |m: &QueryHasVerification| { &m.allowedIssuers }, + |m: &mut QueryHasVerification| { &mut m.allowedIssuers }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryHasVerification", fields, file_descriptor_proto() ) @@ -9345,284 +9307,1209 @@ impl ::protobuf::Message for QueryGetVerificationData { } } - fn default_instance() -> &'static QueryGetVerificationData { - static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + fn default_instance() -> &'static QueryHasVerification { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { lock: ::protobuf::lazy::ONCE_INIT, - ptr: 0 as *const QueryGetVerificationData, + ptr: 0 as *const QueryHasVerification, }; unsafe { - instance.get(QueryGetVerificationData::new) + instance.get(QueryHasVerification::new) } } } -impl ::protobuf::Clear for QueryGetVerificationData { +impl ::protobuf::Clear for QueryHasVerification { fn clear(&mut self) { self.userAddress.clear(); - self.issuerAddress.clear(); + self.verificationType = 0; + self.expirationTimestamp = 0; + self.allowedIssuers.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for QueryGetVerificationData { +impl ::std::fmt::Debug for QueryHasVerification { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for QueryGetVerificationData { +impl ::protobuf::reflect::ProtobufValue for QueryHasVerification { fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct VerificationDetails { +pub struct QueryHasVerificationResponse { // message fields - pub verificationType: u32, - pub verificationID: ::std::vec::Vec, - pub issuerAddress: ::std::vec::Vec, - pub originChain: ::std::string::String, - pub issuanceTimestamp: u32, - pub expirationTimestamp: u32, - pub originalData: ::std::vec::Vec, - pub schema: ::std::string::String, - pub issuerVerificationId: ::std::string::String, - pub version: u32, + pub hasVerification: bool, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a VerificationDetails { - fn default() -> &'a VerificationDetails { - ::default_instance() +impl<'a> ::std::default::Default for &'a QueryHasVerificationResponse { + fn default() -> &'a QueryHasVerificationResponse { + ::default_instance() } } -impl VerificationDetails { - pub fn new() -> VerificationDetails { +impl QueryHasVerificationResponse { + pub fn new() -> QueryHasVerificationResponse { ::std::default::Default::default() } - // uint32 verificationType = 1; + // bool hasVerification = 1; - pub fn get_verificationType(&self) -> u32 { - self.verificationType + pub fn get_hasVerification(&self) -> bool { + self.hasVerification } - pub fn clear_verificationType(&mut self) { - self.verificationType = 0; + pub fn clear_hasVerification(&mut self) { + self.hasVerification = false; } // Param is passed by value, moved - pub fn set_verificationType(&mut self, v: u32) { - self.verificationType = v; + pub fn set_hasVerification(&mut self, v: bool) { + self.hasVerification = v; } +} - // bytes verificationID = 2; - - - pub fn get_verificationID(&self) -> &[u8] { - &self.verificationID +impl ::protobuf::Message for QueryHasVerificationResponse { + fn is_initialized(&self) -> bool { + true } - pub fn clear_verificationID(&mut self) { - self.verificationID.clear(); + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.hasVerification = tmp; + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) } - // Param is passed by value, moved - pub fn set_verificationID(&mut self, v: ::std::vec::Vec) { - self.verificationID = v; + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.hasVerification != false { + my_size += 2; + } + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size } - // Mutable pointer to the field. - // If field is not initialized, it is initialized with default value first. - pub fn mut_verificationID(&mut self) -> &mut ::std::vec::Vec { - &mut self.verificationID + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + if self.hasVerification != false { + os.write_bool(1, self.hasVerification)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) } - // Take field - pub fn take_verificationID(&mut self) -> ::std::vec::Vec { - ::std::mem::replace(&mut self.verificationID, ::std::vec::Vec::new()) + fn get_cached_size(&self) -> u32 { + self.cached_size.get() } - // bytes issuerAddress = 3; + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields + } + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields + } - pub fn get_issuerAddress(&self) -> &[u8] { - &self.issuerAddress + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) } - pub fn clear_issuerAddress(&mut self) { - self.issuerAddress.clear(); + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) } - - // Param is passed by value, moved - pub fn set_issuerAddress(&mut self, v: ::std::vec::Vec) { - self.issuerAddress = v; + fn into_any(self: Box) -> ::std::boxed::Box { + self } - // Mutable pointer to the field. - // If field is not initialized, it is initialized with default value first. - pub fn mut_issuerAddress(&mut self) -> &mut ::std::vec::Vec { - &mut self.issuerAddress + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() } - // Take field - pub fn take_issuerAddress(&mut self) -> ::std::vec::Vec { - ::std::mem::replace(&mut self.issuerAddress, ::std::vec::Vec::new()) + fn new() -> QueryHasVerificationResponse { + QueryHasVerificationResponse::new() } - // string originChain = 4; - - - pub fn get_originChain(&self) -> &str { - &self.originChain + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "hasVerification", + |m: &QueryHasVerificationResponse| { &m.hasVerification }, + |m: &mut QueryHasVerificationResponse| { &mut m.hasVerification }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryHasVerificationResponse", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static QueryHasVerificationResponse { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const QueryHasVerificationResponse, + }; + unsafe { + instance.get(QueryHasVerificationResponse::new) + } + } +} + +impl ::protobuf::Clear for QueryHasVerificationResponse { + fn clear(&mut self) { + self.hasVerification = false; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for QueryHasVerificationResponse { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for QueryHasVerificationResponse { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct QueryGetVerificationData { + // message fields + pub userAddress: ::std::vec::Vec, + pub issuerAddress: ::std::vec::Vec, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a QueryGetVerificationData { + fn default() -> &'a QueryGetVerificationData { + ::default_instance() + } +} + +impl QueryGetVerificationData { + pub fn new() -> QueryGetVerificationData { + ::std::default::Default::default() + } + + // bytes userAddress = 1; + + + pub fn get_userAddress(&self) -> &[u8] { + &self.userAddress + } + pub fn clear_userAddress(&mut self) { + self.userAddress.clear(); + } + + // Param is passed by value, moved + pub fn set_userAddress(&mut self, v: ::std::vec::Vec) { + self.userAddress = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_userAddress(&mut self) -> &mut ::std::vec::Vec { + &mut self.userAddress + } + + // Take field + pub fn take_userAddress(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.userAddress, ::std::vec::Vec::new()) + } + + // bytes issuerAddress = 2; + + + pub fn get_issuerAddress(&self) -> &[u8] { + &self.issuerAddress + } + pub fn clear_issuerAddress(&mut self) { + self.issuerAddress.clear(); + } + + // Param is passed by value, moved + pub fn set_issuerAddress(&mut self, v: ::std::vec::Vec) { + self.issuerAddress = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_issuerAddress(&mut self) -> &mut ::std::vec::Vec { + &mut self.issuerAddress + } + + // Take field + pub fn take_issuerAddress(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.issuerAddress, ::std::vec::Vec::new()) + } +} + +impl ::protobuf::Message for QueryGetVerificationData { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.userAddress)?; + }, + 2 => { + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.issuerAddress)?; + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.userAddress.is_empty() { + my_size += ::protobuf::rt::bytes_size(1, &self.userAddress); + } + if !self.issuerAddress.is_empty() { + my_size += ::protobuf::rt::bytes_size(2, &self.issuerAddress); + } + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + if !self.userAddress.is_empty() { + os.write_bytes(1, &self.userAddress)?; + } + if !self.issuerAddress.is_empty() { + os.write_bytes(2, &self.issuerAddress)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: Box) -> ::std::boxed::Box { + self + } + + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> QueryGetVerificationData { + QueryGetVerificationData::new() + } + + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "userAddress", + |m: &QueryGetVerificationData| { &m.userAddress }, + |m: &mut QueryGetVerificationData| { &mut m.userAddress }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "issuerAddress", + |m: &QueryGetVerificationData| { &m.issuerAddress }, + |m: &mut QueryGetVerificationData| { &mut m.issuerAddress }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryGetVerificationData", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static QueryGetVerificationData { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const QueryGetVerificationData, + }; + unsafe { + instance.get(QueryGetVerificationData::new) + } + } +} + +impl ::protobuf::Clear for QueryGetVerificationData { + fn clear(&mut self) { + self.userAddress.clear(); + self.issuerAddress.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for QueryGetVerificationData { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for QueryGetVerificationData { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct VerificationDetails { + // message fields + pub verificationType: u32, + pub verificationID: ::std::vec::Vec, + pub issuerAddress: ::std::vec::Vec, + pub originChain: ::std::string::String, + pub issuanceTimestamp: u32, + pub expirationTimestamp: u32, + pub originalData: ::std::vec::Vec, + pub schema: ::std::string::String, + pub issuerVerificationId: ::std::string::String, + pub version: u32, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a VerificationDetails { + fn default() -> &'a VerificationDetails { + ::default_instance() + } +} + +impl VerificationDetails { + pub fn new() -> VerificationDetails { + ::std::default::Default::default() + } + + // uint32 verificationType = 1; + + + pub fn get_verificationType(&self) -> u32 { + self.verificationType + } + pub fn clear_verificationType(&mut self) { + self.verificationType = 0; + } + + // Param is passed by value, moved + pub fn set_verificationType(&mut self, v: u32) { + self.verificationType = v; + } + + // bytes verificationID = 2; + + + pub fn get_verificationID(&self) -> &[u8] { + &self.verificationID + } + pub fn clear_verificationID(&mut self) { + self.verificationID.clear(); + } + + // Param is passed by value, moved + pub fn set_verificationID(&mut self, v: ::std::vec::Vec) { + self.verificationID = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_verificationID(&mut self) -> &mut ::std::vec::Vec { + &mut self.verificationID + } + + // Take field + pub fn take_verificationID(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.verificationID, ::std::vec::Vec::new()) + } + + // bytes issuerAddress = 3; + + + pub fn get_issuerAddress(&self) -> &[u8] { + &self.issuerAddress + } + pub fn clear_issuerAddress(&mut self) { + self.issuerAddress.clear(); + } + + // Param is passed by value, moved + pub fn set_issuerAddress(&mut self, v: ::std::vec::Vec) { + self.issuerAddress = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_issuerAddress(&mut self) -> &mut ::std::vec::Vec { + &mut self.issuerAddress + } + + // Take field + pub fn take_issuerAddress(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.issuerAddress, ::std::vec::Vec::new()) + } + + // string originChain = 4; + + + pub fn get_originChain(&self) -> &str { + &self.originChain + } + pub fn clear_originChain(&mut self) { + self.originChain.clear(); + } + + // Param is passed by value, moved + pub fn set_originChain(&mut self, v: ::std::string::String) { + self.originChain = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_originChain(&mut self) -> &mut ::std::string::String { + &mut self.originChain + } + + // Take field + pub fn take_originChain(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.originChain, ::std::string::String::new()) + } + + // uint32 issuanceTimestamp = 5; + + + pub fn get_issuanceTimestamp(&self) -> u32 { + self.issuanceTimestamp + } + pub fn clear_issuanceTimestamp(&mut self) { + self.issuanceTimestamp = 0; + } + + // Param is passed by value, moved + pub fn set_issuanceTimestamp(&mut self, v: u32) { + self.issuanceTimestamp = v; + } + + // uint32 expirationTimestamp = 6; + + + pub fn get_expirationTimestamp(&self) -> u32 { + self.expirationTimestamp + } + pub fn clear_expirationTimestamp(&mut self) { + self.expirationTimestamp = 0; + } + + // Param is passed by value, moved + pub fn set_expirationTimestamp(&mut self, v: u32) { + self.expirationTimestamp = v; + } + + // bytes originalData = 7; + + + pub fn get_originalData(&self) -> &[u8] { + &self.originalData + } + pub fn clear_originalData(&mut self) { + self.originalData.clear(); + } + + // Param is passed by value, moved + pub fn set_originalData(&mut self, v: ::std::vec::Vec) { + self.originalData = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_originalData(&mut self) -> &mut ::std::vec::Vec { + &mut self.originalData + } + + // Take field + pub fn take_originalData(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.originalData, ::std::vec::Vec::new()) + } + + // string schema = 8; + + + pub fn get_schema(&self) -> &str { + &self.schema + } + pub fn clear_schema(&mut self) { + self.schema.clear(); + } + + // Param is passed by value, moved + pub fn set_schema(&mut self, v: ::std::string::String) { + self.schema = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_schema(&mut self) -> &mut ::std::string::String { + &mut self.schema + } + + // Take field + pub fn take_schema(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.schema, ::std::string::String::new()) + } + + // string issuerVerificationId = 9; + + + pub fn get_issuerVerificationId(&self) -> &str { + &self.issuerVerificationId + } + pub fn clear_issuerVerificationId(&mut self) { + self.issuerVerificationId.clear(); + } + + // Param is passed by value, moved + pub fn set_issuerVerificationId(&mut self, v: ::std::string::String) { + self.issuerVerificationId = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_issuerVerificationId(&mut self) -> &mut ::std::string::String { + &mut self.issuerVerificationId + } + + // Take field + pub fn take_issuerVerificationId(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.issuerVerificationId, ::std::string::String::new()) + } + + // uint32 version = 10; + + + pub fn get_version(&self) -> u32 { + self.version + } + pub fn clear_version(&mut self) { + self.version = 0; + } + + // Param is passed by value, moved + pub fn set_version(&mut self, v: u32) { + self.version = v; + } +} + +impl ::protobuf::Message for VerificationDetails { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.verificationType = tmp; + }, + 2 => { + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.verificationID)?; + }, + 3 => { + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.issuerAddress)?; + }, + 4 => { + ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.originChain)?; + }, + 5 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.issuanceTimestamp = tmp; + }, + 6 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.expirationTimestamp = tmp; + }, + 7 => { + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.originalData)?; + }, + 8 => { + ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.schema)?; + }, + 9 => { + ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.issuerVerificationId)?; + }, + 10 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.version = tmp; + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.verificationType != 0 { + my_size += ::protobuf::rt::value_size(1, self.verificationType, ::protobuf::wire_format::WireTypeVarint); + } + if !self.verificationID.is_empty() { + my_size += ::protobuf::rt::bytes_size(2, &self.verificationID); + } + if !self.issuerAddress.is_empty() { + my_size += ::protobuf::rt::bytes_size(3, &self.issuerAddress); + } + if !self.originChain.is_empty() { + my_size += ::protobuf::rt::string_size(4, &self.originChain); + } + if self.issuanceTimestamp != 0 { + my_size += ::protobuf::rt::value_size(5, self.issuanceTimestamp, ::protobuf::wire_format::WireTypeVarint); + } + if self.expirationTimestamp != 0 { + my_size += ::protobuf::rt::value_size(6, self.expirationTimestamp, ::protobuf::wire_format::WireTypeVarint); + } + if !self.originalData.is_empty() { + my_size += ::protobuf::rt::bytes_size(7, &self.originalData); + } + if !self.schema.is_empty() { + my_size += ::protobuf::rt::string_size(8, &self.schema); + } + if !self.issuerVerificationId.is_empty() { + my_size += ::protobuf::rt::string_size(9, &self.issuerVerificationId); + } + if self.version != 0 { + my_size += ::protobuf::rt::value_size(10, self.version, ::protobuf::wire_format::WireTypeVarint); + } + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + if self.verificationType != 0 { + os.write_uint32(1, self.verificationType)?; + } + if !self.verificationID.is_empty() { + os.write_bytes(2, &self.verificationID)?; + } + if !self.issuerAddress.is_empty() { + os.write_bytes(3, &self.issuerAddress)?; + } + if !self.originChain.is_empty() { + os.write_string(4, &self.originChain)?; + } + if self.issuanceTimestamp != 0 { + os.write_uint32(5, self.issuanceTimestamp)?; + } + if self.expirationTimestamp != 0 { + os.write_uint32(6, self.expirationTimestamp)?; + } + if !self.originalData.is_empty() { + os.write_bytes(7, &self.originalData)?; + } + if !self.schema.is_empty() { + os.write_string(8, &self.schema)?; + } + if !self.issuerVerificationId.is_empty() { + os.write_string(9, &self.issuerVerificationId)?; + } + if self.version != 0 { + os.write_uint32(10, self.version)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) } - pub fn clear_originChain(&mut self) { + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: Box) -> ::std::boxed::Box { + self + } + + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> VerificationDetails { + VerificationDetails::new() + } + + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "verificationType", + |m: &VerificationDetails| { &m.verificationType }, + |m: &mut VerificationDetails| { &mut m.verificationType }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "verificationID", + |m: &VerificationDetails| { &m.verificationID }, + |m: &mut VerificationDetails| { &mut m.verificationID }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "issuerAddress", + |m: &VerificationDetails| { &m.issuerAddress }, + |m: &mut VerificationDetails| { &mut m.issuerAddress }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "originChain", + |m: &VerificationDetails| { &m.originChain }, + |m: &mut VerificationDetails| { &mut m.originChain }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "issuanceTimestamp", + |m: &VerificationDetails| { &m.issuanceTimestamp }, + |m: &mut VerificationDetails| { &mut m.issuanceTimestamp }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "expirationTimestamp", + |m: &VerificationDetails| { &m.expirationTimestamp }, + |m: &mut VerificationDetails| { &mut m.expirationTimestamp }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "originalData", + |m: &VerificationDetails| { &m.originalData }, + |m: &mut VerificationDetails| { &mut m.originalData }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "schema", + |m: &VerificationDetails| { &m.schema }, + |m: &mut VerificationDetails| { &mut m.schema }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "issuerVerificationId", + |m: &VerificationDetails| { &m.issuerVerificationId }, + |m: &mut VerificationDetails| { &mut m.issuerVerificationId }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "version", + |m: &VerificationDetails| { &m.version }, + |m: &mut VerificationDetails| { &mut m.version }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "VerificationDetails", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static VerificationDetails { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const VerificationDetails, + }; + unsafe { + instance.get(VerificationDetails::new) + } + } +} + +impl ::protobuf::Clear for VerificationDetails { + fn clear(&mut self) { + self.verificationType = 0; + self.verificationID.clear(); + self.issuerAddress.clear(); self.originChain.clear(); + self.issuanceTimestamp = 0; + self.expirationTimestamp = 0; + self.originalData.clear(); + self.schema.clear(); + self.issuerVerificationId.clear(); + self.version = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for VerificationDetails { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for VerificationDetails { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct QueryGetVerificationDataResponse { + // message fields + pub data: ::protobuf::RepeatedField, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a QueryGetVerificationDataResponse { + fn default() -> &'a QueryGetVerificationDataResponse { + ::default_instance() + } +} + +impl QueryGetVerificationDataResponse { + pub fn new() -> QueryGetVerificationDataResponse { + ::std::default::Default::default() + } + + // repeated .ffi.ffi.VerificationDetails data = 1; + + + pub fn get_data(&self) -> &[VerificationDetails] { + &self.data + } + pub fn clear_data(&mut self) { + self.data.clear(); + } + + // Param is passed by value, moved + pub fn set_data(&mut self, v: ::protobuf::RepeatedField) { + self.data = v; + } + + // Mutable pointer to the field. + pub fn mut_data(&mut self) -> &mut ::protobuf::RepeatedField { + &mut self.data + } + + // Take field + pub fn take_data(&mut self) -> ::protobuf::RepeatedField { + ::std::mem::replace(&mut self.data, ::protobuf::RepeatedField::new()) + } +} + +impl ::protobuf::Message for QueryGetVerificationDataResponse { + fn is_initialized(&self) -> bool { + for v in &self.data { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.data)?; + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.data { + let len = value.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; + }; + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + for v in &self.data { + os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) } - // Param is passed by value, moved - pub fn set_originChain(&mut self, v: ::std::string::String) { - self.originChain = v; + fn get_cached_size(&self) -> u32 { + self.cached_size.get() } - // Mutable pointer to the field. - // If field is not initialized, it is initialized with default value first. - pub fn mut_originChain(&mut self) -> &mut ::std::string::String { - &mut self.originChain + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields } - // Take field - pub fn take_originChain(&mut self) -> ::std::string::String { - ::std::mem::replace(&mut self.originChain, ::std::string::String::new()) + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields } - // uint32 issuanceTimestamp = 5; + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: Box) -> ::std::boxed::Box { + self + } + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() + } - pub fn get_issuanceTimestamp(&self) -> u32 { - self.issuanceTimestamp + fn new() -> QueryGetVerificationDataResponse { + QueryGetVerificationDataResponse::new() } - pub fn clear_issuanceTimestamp(&mut self) { - self.issuanceTimestamp = 0; + + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "data", + |m: &QueryGetVerificationDataResponse| { &m.data }, + |m: &mut QueryGetVerificationDataResponse| { &mut m.data }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryGetVerificationDataResponse", + fields, + file_descriptor_proto() + ) + }) + } } - // Param is passed by value, moved - pub fn set_issuanceTimestamp(&mut self, v: u32) { - self.issuanceTimestamp = v; + fn default_instance() -> &'static QueryGetVerificationDataResponse { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const QueryGetVerificationDataResponse, + }; + unsafe { + instance.get(QueryGetVerificationDataResponse::new) + } } +} - // uint32 expirationTimestamp = 6; +impl ::protobuf::Clear for QueryGetVerificationDataResponse { + fn clear(&mut self) { + self.data.clear(); + self.unknown_fields.clear(); + } +} +impl ::std::fmt::Debug for QueryGetVerificationDataResponse { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} - pub fn get_expirationTimestamp(&self) -> u32 { - self.expirationTimestamp +impl ::protobuf::reflect::ProtobufValue for QueryGetVerificationDataResponse { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } - pub fn clear_expirationTimestamp(&mut self) { - self.expirationTimestamp = 0; +} + +#[derive(PartialEq,Clone,Default)] +pub struct QueryConvertCredential { + // message fields + pub verificationId: ::std::vec::Vec, + pub holderPublicKey: ::std::vec::Vec, + pub caller: ::std::vec::Vec, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a QueryConvertCredential { + fn default() -> &'a QueryConvertCredential { + ::default_instance() } +} - // Param is passed by value, moved - pub fn set_expirationTimestamp(&mut self, v: u32) { - self.expirationTimestamp = v; +impl QueryConvertCredential { + pub fn new() -> QueryConvertCredential { + ::std::default::Default::default() } - // bytes originalData = 7; + // bytes verificationId = 1; - pub fn get_originalData(&self) -> &[u8] { - &self.originalData + pub fn get_verificationId(&self) -> &[u8] { + &self.verificationId } - pub fn clear_originalData(&mut self) { - self.originalData.clear(); + pub fn clear_verificationId(&mut self) { + self.verificationId.clear(); } // Param is passed by value, moved - pub fn set_originalData(&mut self, v: ::std::vec::Vec) { - self.originalData = v; + pub fn set_verificationId(&mut self, v: ::std::vec::Vec) { + self.verificationId = v; } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_originalData(&mut self) -> &mut ::std::vec::Vec { - &mut self.originalData + pub fn mut_verificationId(&mut self) -> &mut ::std::vec::Vec { + &mut self.verificationId } // Take field - pub fn take_originalData(&mut self) -> ::std::vec::Vec { - ::std::mem::replace(&mut self.originalData, ::std::vec::Vec::new()) + pub fn take_verificationId(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.verificationId, ::std::vec::Vec::new()) } - // string schema = 8; + // bytes holderPublicKey = 2; - pub fn get_schema(&self) -> &str { - &self.schema + pub fn get_holderPublicKey(&self) -> &[u8] { + &self.holderPublicKey } - pub fn clear_schema(&mut self) { - self.schema.clear(); + pub fn clear_holderPublicKey(&mut self) { + self.holderPublicKey.clear(); } // Param is passed by value, moved - pub fn set_schema(&mut self, v: ::std::string::String) { - self.schema = v; + pub fn set_holderPublicKey(&mut self, v: ::std::vec::Vec) { + self.holderPublicKey = v; } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_schema(&mut self) -> &mut ::std::string::String { - &mut self.schema + pub fn mut_holderPublicKey(&mut self) -> &mut ::std::vec::Vec { + &mut self.holderPublicKey } // Take field - pub fn take_schema(&mut self) -> ::std::string::String { - ::std::mem::replace(&mut self.schema, ::std::string::String::new()) + pub fn take_holderPublicKey(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.holderPublicKey, ::std::vec::Vec::new()) } - // string issuerVerificationId = 9; + // bytes caller = 3; - pub fn get_issuerVerificationId(&self) -> &str { - &self.issuerVerificationId + pub fn get_caller(&self) -> &[u8] { + &self.caller } - pub fn clear_issuerVerificationId(&mut self) { - self.issuerVerificationId.clear(); + pub fn clear_caller(&mut self) { + self.caller.clear(); } // Param is passed by value, moved - pub fn set_issuerVerificationId(&mut self, v: ::std::string::String) { - self.issuerVerificationId = v; + pub fn set_caller(&mut self, v: ::std::vec::Vec) { + self.caller = v; } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_issuerVerificationId(&mut self) -> &mut ::std::string::String { - &mut self.issuerVerificationId + pub fn mut_caller(&mut self) -> &mut ::std::vec::Vec { + &mut self.caller } // Take field - pub fn take_issuerVerificationId(&mut self) -> ::std::string::String { - ::std::mem::replace(&mut self.issuerVerificationId, ::std::string::String::new()) - } - - // uint32 version = 10; - - - pub fn get_version(&self) -> u32 { - self.version - } - pub fn clear_version(&mut self) { - self.version = 0; - } - - // Param is passed by value, moved - pub fn set_version(&mut self, v: u32) { - self.version = v; + pub fn take_caller(&mut self) -> ::std::vec::Vec { + ::std::mem::replace(&mut self.caller, ::std::vec::Vec::new()) } } -impl ::protobuf::Message for VerificationDetails { +impl ::protobuf::Message for QueryConvertCredential { fn is_initialized(&self) -> bool { true } @@ -9632,50 +10519,13 @@ impl ::protobuf::Message for VerificationDetails { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { 1 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.verificationType = tmp; + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.verificationId)?; }, 2 => { - ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.verificationID)?; + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.holderPublicKey)?; }, 3 => { - ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.issuerAddress)?; - }, - 4 => { - ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.originChain)?; - }, - 5 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.issuanceTimestamp = tmp; - }, - 6 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.expirationTimestamp = tmp; - }, - 7 => { - ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.originalData)?; - }, - 8 => { - ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.schema)?; - }, - 9 => { - ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.issuerVerificationId)?; - }, - 10 => { - if wire_type != ::protobuf::wire_format::WireTypeVarint { - return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); - } - let tmp = is.read_uint32()?; - self.version = tmp; + ::protobuf::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.caller)?; }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; @@ -9688,72 +10538,30 @@ impl ::protobuf::Message for VerificationDetails { // Compute sizes of nested messages #[allow(unused_variables)] fn compute_size(&self) -> u32 { - let mut my_size = 0; - if self.verificationType != 0 { - my_size += ::protobuf::rt::value_size(1, self.verificationType, ::protobuf::wire_format::WireTypeVarint); - } - if !self.verificationID.is_empty() { - my_size += ::protobuf::rt::bytes_size(2, &self.verificationID); - } - if !self.issuerAddress.is_empty() { - my_size += ::protobuf::rt::bytes_size(3, &self.issuerAddress); - } - if !self.originChain.is_empty() { - my_size += ::protobuf::rt::string_size(4, &self.originChain); - } - if self.issuanceTimestamp != 0 { - my_size += ::protobuf::rt::value_size(5, self.issuanceTimestamp, ::protobuf::wire_format::WireTypeVarint); - } - if self.expirationTimestamp != 0 { - my_size += ::protobuf::rt::value_size(6, self.expirationTimestamp, ::protobuf::wire_format::WireTypeVarint); - } - if !self.originalData.is_empty() { - my_size += ::protobuf::rt::bytes_size(7, &self.originalData); - } - if !self.schema.is_empty() { - my_size += ::protobuf::rt::string_size(8, &self.schema); - } - if !self.issuerVerificationId.is_empty() { - my_size += ::protobuf::rt::string_size(9, &self.issuerVerificationId); - } - if self.version != 0 { - my_size += ::protobuf::rt::value_size(10, self.version, ::protobuf::wire_format::WireTypeVarint); - } - my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); - self.cached_size.set(my_size); - my_size - } - - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - if self.verificationType != 0 { - os.write_uint32(1, self.verificationType)?; - } - if !self.verificationID.is_empty() { - os.write_bytes(2, &self.verificationID)?; - } - if !self.issuerAddress.is_empty() { - os.write_bytes(3, &self.issuerAddress)?; - } - if !self.originChain.is_empty() { - os.write_string(4, &self.originChain)?; - } - if self.issuanceTimestamp != 0 { - os.write_uint32(5, self.issuanceTimestamp)?; + let mut my_size = 0; + if !self.verificationId.is_empty() { + my_size += ::protobuf::rt::bytes_size(1, &self.verificationId); } - if self.expirationTimestamp != 0 { - os.write_uint32(6, self.expirationTimestamp)?; + if !self.holderPublicKey.is_empty() { + my_size += ::protobuf::rt::bytes_size(2, &self.holderPublicKey); } - if !self.originalData.is_empty() { - os.write_bytes(7, &self.originalData)?; + if !self.caller.is_empty() { + my_size += ::protobuf::rt::bytes_size(3, &self.caller); } - if !self.schema.is_empty() { - os.write_string(8, &self.schema)?; + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + if !self.verificationId.is_empty() { + os.write_bytes(1, &self.verificationId)?; } - if !self.issuerVerificationId.is_empty() { - os.write_string(9, &self.issuerVerificationId)?; + if !self.holderPublicKey.is_empty() { + os.write_bytes(2, &self.holderPublicKey)?; } - if self.version != 0 { - os.write_uint32(10, self.version)?; + if !self.caller.is_empty() { + os.write_bytes(3, &self.caller)?; } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) @@ -9785,8 +10593,8 @@ impl ::protobuf::Message for VerificationDetails { Self::descriptor_static() } - fn new() -> VerificationDetails { - VerificationDetails::new() + fn new() -> QueryConvertCredential { + QueryConvertCredential::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { @@ -9797,58 +10605,23 @@ impl ::protobuf::Message for VerificationDetails { unsafe { descriptor.get(|| { let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "verificationType", - |m: &VerificationDetails| { &m.verificationType }, - |m: &mut VerificationDetails| { &mut m.verificationType }, - )); fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "verificationID", - |m: &VerificationDetails| { &m.verificationID }, - |m: &mut VerificationDetails| { &mut m.verificationID }, + "verificationId", + |m: &QueryConvertCredential| { &m.verificationId }, + |m: &mut QueryConvertCredential| { &mut m.verificationId }, )); fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "issuerAddress", - |m: &VerificationDetails| { &m.issuerAddress }, - |m: &mut VerificationDetails| { &mut m.issuerAddress }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "originChain", - |m: &VerificationDetails| { &m.originChain }, - |m: &mut VerificationDetails| { &mut m.originChain }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "issuanceTimestamp", - |m: &VerificationDetails| { &m.issuanceTimestamp }, - |m: &mut VerificationDetails| { &mut m.issuanceTimestamp }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "expirationTimestamp", - |m: &VerificationDetails| { &m.expirationTimestamp }, - |m: &mut VerificationDetails| { &mut m.expirationTimestamp }, + "holderPublicKey", + |m: &QueryConvertCredential| { &m.holderPublicKey }, + |m: &mut QueryConvertCredential| { &mut m.holderPublicKey }, )); fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "originalData", - |m: &VerificationDetails| { &m.originalData }, - |m: &mut VerificationDetails| { &mut m.originalData }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "schema", - |m: &VerificationDetails| { &m.schema }, - |m: &mut VerificationDetails| { &mut m.schema }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "issuerVerificationId", - |m: &VerificationDetails| { &m.issuerVerificationId }, - |m: &mut VerificationDetails| { &mut m.issuerVerificationId }, - )); - fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "version", - |m: &VerificationDetails| { &m.version }, - |m: &mut VerificationDetails| { &mut m.version }, + "caller", + |m: &QueryConvertCredential| { &m.caller }, + |m: &mut QueryConvertCredential| { &mut m.caller }, )); - ::protobuf::reflect::MessageDescriptor::new::( - "VerificationDetails", + ::protobuf::reflect::MessageDescriptor::new::( + "QueryConvertCredential", fields, file_descriptor_proto() ) @@ -9856,98 +10629,59 @@ impl ::protobuf::Message for VerificationDetails { } } - fn default_instance() -> &'static VerificationDetails { - static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + fn default_instance() -> &'static QueryConvertCredential { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { lock: ::protobuf::lazy::ONCE_INIT, - ptr: 0 as *const VerificationDetails, + ptr: 0 as *const QueryConvertCredential, }; unsafe { - instance.get(VerificationDetails::new) + instance.get(QueryConvertCredential::new) } } } -impl ::protobuf::Clear for VerificationDetails { +impl ::protobuf::Clear for QueryConvertCredential { fn clear(&mut self) { - self.verificationType = 0; - self.verificationID.clear(); - self.issuerAddress.clear(); - self.originChain.clear(); - self.issuanceTimestamp = 0; - self.expirationTimestamp = 0; - self.originalData.clear(); - self.schema.clear(); - self.issuerVerificationId.clear(); - self.version = 0; + self.verificationId.clear(); + self.holderPublicKey.clear(); + self.caller.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for VerificationDetails { +impl ::std::fmt::Debug for QueryConvertCredential { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for VerificationDetails { +impl ::protobuf::reflect::ProtobufValue for QueryConvertCredential { fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct QueryGetVerificationDataResponse { - // message fields - pub data: ::protobuf::RepeatedField, +pub struct QueryConvertCredentialResponse { // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a QueryGetVerificationDataResponse { - fn default() -> &'a QueryGetVerificationDataResponse { - ::default_instance() +impl<'a> ::std::default::Default for &'a QueryConvertCredentialResponse { + fn default() -> &'a QueryConvertCredentialResponse { + ::default_instance() } } -impl QueryGetVerificationDataResponse { - pub fn new() -> QueryGetVerificationDataResponse { +impl QueryConvertCredentialResponse { + pub fn new() -> QueryConvertCredentialResponse { ::std::default::Default::default() } - - // repeated .ffi.ffi.VerificationDetails data = 1; - - - pub fn get_data(&self) -> &[VerificationDetails] { - &self.data - } - pub fn clear_data(&mut self) { - self.data.clear(); - } - - // Param is passed by value, moved - pub fn set_data(&mut self, v: ::protobuf::RepeatedField) { - self.data = v; - } - - // Mutable pointer to the field. - pub fn mut_data(&mut self) -> &mut ::protobuf::RepeatedField { - &mut self.data - } - - // Take field - pub fn take_data(&mut self) -> ::protobuf::RepeatedField { - ::std::mem::replace(&mut self.data, ::protobuf::RepeatedField::new()) - } } -impl ::protobuf::Message for QueryGetVerificationDataResponse { +impl ::protobuf::Message for QueryConvertCredentialResponse { fn is_initialized(&self) -> bool { - for v in &self.data { - if !v.is_initialized() { - return false; - } - }; true } @@ -9955,9 +10689,6 @@ impl ::protobuf::Message for QueryGetVerificationDataResponse { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { - 1 => { - ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.data)?; - }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -9970,21 +10701,12 @@ impl ::protobuf::Message for QueryGetVerificationDataResponse { #[allow(unused_variables)] fn compute_size(&self) -> u32 { let mut my_size = 0; - for value in &self.data { - let len = value.compute_size(); - my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; - }; my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - for v in &self.data { - os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; - os.write_raw_varint32(v.get_cached_size())?; - v.write_to_with_cached_sizes(os)?; - }; os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -10015,8 +10737,8 @@ impl ::protobuf::Message for QueryGetVerificationDataResponse { Self::descriptor_static() } - fn new() -> QueryGetVerificationDataResponse { - QueryGetVerificationDataResponse::new() + fn new() -> QueryConvertCredentialResponse { + QueryConvertCredentialResponse::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { @@ -10026,14 +10748,9 @@ impl ::protobuf::Message for QueryGetVerificationDataResponse { }; unsafe { descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "data", - |m: &QueryGetVerificationDataResponse| { &m.data }, - |m: &mut QueryGetVerificationDataResponse| { &mut m.data }, - )); - ::protobuf::reflect::MessageDescriptor::new::( - "QueryGetVerificationDataResponse", + let fields = ::std::vec::Vec::new(); + ::protobuf::reflect::MessageDescriptor::new::( + "QueryConvertCredentialResponse", fields, file_descriptor_proto() ) @@ -10041,31 +10758,30 @@ impl ::protobuf::Message for QueryGetVerificationDataResponse { } } - fn default_instance() -> &'static QueryGetVerificationDataResponse { - static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + fn default_instance() -> &'static QueryConvertCredentialResponse { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { lock: ::protobuf::lazy::ONCE_INIT, - ptr: 0 as *const QueryGetVerificationDataResponse, + ptr: 0 as *const QueryConvertCredentialResponse, }; unsafe { - instance.get(QueryGetVerificationDataResponse::new) + instance.get(QueryConvertCredentialResponse::new) } } } -impl ::protobuf::Clear for QueryGetVerificationDataResponse { +impl ::protobuf::Clear for QueryConvertCredentialResponse { fn clear(&mut self) { - self.data.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for QueryGetVerificationDataResponse { +impl ::std::fmt::Debug for QueryConvertCredentialResponse { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for QueryGetVerificationDataResponse { +impl ::protobuf::reflect::ProtobufValue for QueryConvertCredentialResponse { fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { ::protobuf::reflect::ProtobufValueRef::Message(self) } @@ -10108,6 +10824,8 @@ pub enum CosmosRequest_oneof_req { issuanceTreeRoot(QueryIssuanceTreeRoot), revocationTreeRoot(QueryRevocationTreeRoot), addVerificationDetailsV2(QueryAddVerificationDetailsV2), + revokeVerification(QueryRevokeVerification), + convertCredential(QueryConvertCredential), } impl CosmosRequest { @@ -11094,6 +11812,104 @@ impl CosmosRequest { QueryAddVerificationDetailsV2::new() } } + + // .ffi.ffi.QueryRevokeVerification revokeVerification = 21; + + + pub fn get_revokeVerification(&self) -> &QueryRevokeVerification { + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(ref v)) => v, + _ => QueryRevokeVerification::default_instance(), + } + } + pub fn clear_revokeVerification(&mut self) { + self.req = ::std::option::Option::None; + } + + pub fn has_revokeVerification(&self) -> bool { + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_revokeVerification(&mut self, v: QueryRevokeVerification) { + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(v)) + } + + // Mutable pointer to the field. + pub fn mut_revokeVerification(&mut self) -> &mut QueryRevokeVerification { + if let ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(_)) = self.req { + } else { + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(QueryRevokeVerification::new())); + } + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_revokeVerification(&mut self) -> QueryRevokeVerification { + if self.has_revokeVerification() { + match self.req.take() { + ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(v)) => v, + _ => panic!(), + } + } else { + QueryRevokeVerification::new() + } + } + + // .ffi.ffi.QueryConvertCredential convertCredential = 22; + + + pub fn get_convertCredential(&self) -> &QueryConvertCredential { + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(ref v)) => v, + _ => QueryConvertCredential::default_instance(), + } + } + pub fn clear_convertCredential(&mut self) { + self.req = ::std::option::Option::None; + } + + pub fn has_convertCredential(&self) -> bool { + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_convertCredential(&mut self, v: QueryConvertCredential) { + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(v)) + } + + // Mutable pointer to the field. + pub fn mut_convertCredential(&mut self) -> &mut QueryConvertCredential { + if let ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(_)) = self.req { + } else { + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(QueryConvertCredential::new())); + } + match self.req { + ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_convertCredential(&mut self) -> QueryConvertCredential { + if self.has_convertCredential() { + match self.req.take() { + ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(v)) => v, + _ => panic!(), + } + } else { + QueryConvertCredential::new() + } + } } impl ::protobuf::Message for CosmosRequest { @@ -11198,6 +12014,16 @@ impl ::protobuf::Message for CosmosRequest { return false; } } + if let Some(CosmosRequest_oneof_req::revokeVerification(ref v)) = self.req { + if !v.is_initialized() { + return false; + } + } + if let Some(CosmosRequest_oneof_req::convertCredential(ref v)) = self.req { + if !v.is_initialized() { + return false; + } + } true } @@ -11325,6 +12151,18 @@ impl ::protobuf::Message for CosmosRequest { } self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::addVerificationDetailsV2(is.read_message()?)); }, + 21 => { + if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::revokeVerification(is.read_message()?)); + }, + 22 => { + if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + self.req = ::std::option::Option::Some(CosmosRequest_oneof_req::convertCredential(is.read_message()?)); + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -11419,6 +12257,14 @@ impl ::protobuf::Message for CosmosRequest { let len = v.compute_size(); my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len; }, + &CosmosRequest_oneof_req::revokeVerification(ref v) => { + let len = v.compute_size(); + my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len; + }, + &CosmosRequest_oneof_req::convertCredential(ref v) => { + let len = v.compute_size(); + my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len; + }, }; } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); @@ -11529,6 +12375,16 @@ impl ::protobuf::Message for CosmosRequest { os.write_raw_varint32(v.get_cached_size())?; v.write_to_with_cached_sizes(os)?; }, + &CosmosRequest_oneof_req::revokeVerification(ref v) => { + os.write_tag(21, ::protobuf::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }, + &CosmosRequest_oneof_req::convertCredential(ref v) => { + os.write_tag(22, ::protobuf::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }, }; } os.write_unknown_fields(self.get_unknown_fields())?; @@ -11673,6 +12529,16 @@ impl ::protobuf::Message for CosmosRequest { CosmosRequest::has_addVerificationDetailsV2, CosmosRequest::get_addVerificationDetailsV2, )); + fields.push(::protobuf::reflect::accessor::make_singular_message_accessor::<_, QueryRevokeVerification>( + "revokeVerification", + CosmosRequest::has_revokeVerification, + CosmosRequest::get_revokeVerification, + )); + fields.push(::protobuf::reflect::accessor::make_singular_message_accessor::<_, QueryConvertCredential>( + "convertCredential", + CosmosRequest::has_convertCredential, + CosmosRequest::get_convertCredential, + )); ::protobuf::reflect::MessageDescriptor::new::( "CosmosRequest", fields, @@ -11715,6 +12581,8 @@ impl ::protobuf::Clear for CosmosRequest { self.req = ::std::option::Option::None; self.req = ::std::option::Option::None; self.req = ::std::option::Option::None; + self.req = ::std::option::Option::None; + self.req = ::std::option::Option::None; self.unknown_fields.clear(); } } @@ -14386,599 +15254,633 @@ static file_descriptor_proto_data: &'static [u8] = b"\ VerificationId\x18\t\x20\x01(\tR\x14issuerVerificationId\x12\x18\n\x07ve\ rsion\x18\n\x20\x01(\rR\x07version\x12$\n\ruserPublicKey\x18\x0b\x20\x01\ (\x0cR\ruserPublicKey\"O\n%QueryAddVerificationDetailsV2Response\x12&\n\ - \x0everificationId\x18\x01\x20\x01(\x0cR\x0everificationId\"\xbe\x01\n\ - \x14QueryHasVerification\x12\x20\n\x0buserAddress\x18\x01\x20\x01(\x0cR\ - \x0buserAddress\x12*\n\x10verificationType\x18\x02\x20\x01(\rR\x10verifi\ - cationType\x120\n\x13expirationTimestamp\x18\x03\x20\x01(\rR\x13expirati\ - onTimestamp\x12&\n\x0eallowedIssuers\x18\x04\x20\x03(\x0cR\x0eallowedIss\ - uers\"H\n\x1cQueryHasVerificationResponse\x12(\n\x0fhasVerification\x18\ - \x01\x20\x01(\x08R\x0fhasVerification\"b\n\x18QueryGetVerificationData\ - \x12\x20\n\x0buserAddress\x18\x01\x20\x01(\x0cR\x0buserAddress\x12$\n\ri\ - ssuerAddress\x18\x02\x20\x01(\x0cR\rissuerAddress\"\x9b\x03\n\x13Verific\ - ationDetails\x12*\n\x10verificationType\x18\x01\x20\x01(\rR\x10verificat\ - ionType\x12&\n\x0everificationID\x18\x02\x20\x01(\x0cR\x0everificationID\ - \x12$\n\rissuerAddress\x18\x03\x20\x01(\x0cR\rissuerAddress\x12\x20\n\ - \x0boriginChain\x18\x04\x20\x01(\tR\x0boriginChain\x12,\n\x11issuanceTim\ - estamp\x18\x05\x20\x01(\rR\x11issuanceTimestamp\x120\n\x13expirationTime\ - stamp\x18\x06\x20\x01(\rR\x13expirationTimestamp\x12\"\n\x0coriginalData\ - \x18\x07\x20\x01(\x0cR\x0coriginalData\x12\x16\n\x06schema\x18\x08\x20\ - \x01(\tR\x06schema\x122\n\x14issuerVerificationId\x18\t\x20\x01(\tR\x14i\ - ssuerVerificationId\x12\x18\n\x07version\x18\n\x20\x01(\rR\x07version\"T\ - \n\x20QueryGetVerificationDataResponse\x120\n\x04data\x18\x01\x20\x03(\ - \x0b2\x1c.ffi.ffi.VerificationDetailsR\x04data\"\xf5\x0b\n\rCosmosReques\ - t\x12:\n\ngetAccount\x18\x01\x20\x01(\x0b2\x18.ffi.ffi.QueryGetAccountH\ - \0R\ngetAccount\x12=\n\x0bcontainsKey\x18\x02\x20\x01(\x0b2\x19.ffi.ffi.\ - QueryContainsKeyH\0R\x0bcontainsKey\x12@\n\x0baccountCode\x18\x03\x20\ - \x01(\x0b2\x1c.ffi.ffi.QueryGetAccountCodeH\0R\x0baccountCode\x12>\n\x08\ - codeHash\x18\x04\x20\x01(\x0b2\x20.ffi.ffi.QueryGetAccountCodeHashH\0R\ - \x08codeHash\x12>\n\x08codeSize\x18\x05\x20\x01(\x0b2\x20.ffi.ffi.QueryG\ - etAccountCodeSizeH\0R\x08codeSize\x12G\n\x0bstorageCell\x18\x06\x20\x01(\ - \x0b2#.ffi.ffi.QueryGetAccountStorageCellH\0R\x0bstorageCell\x12O\n\x11i\ - nsertAccountCode\x18\x07\x20\x01(\x0b2\x1f.ffi.ffi.QueryInsertAccountCod\ - eH\0R\x11insertAccountCode\x12O\n\x11insertStorageCell\x18\x08\x20\x01(\ - \x0b2\x1f.ffi.ffi.QueryInsertStorageCellH\0R\x11insertStorageCell\x12.\n\ - \x06remove\x18\t\x20\x01(\x0b2\x14.ffi.ffi.QueryRemoveH\0R\x06remove\x12\ - O\n\x11removeStorageCell\x18\n\x20\x01(\x0b2\x1f.ffi.ffi.QueryRemoveStor\ - ageCellH\0R\x11removeStorageCell\x12C\n\rremoveStorage\x18\x0b\x20\x01(\ - \x0b2\x1b.ffi.ffi.QueryRemoveStorageH\0R\rremoveStorage\x127\n\tblockHas\ - h\x18\x0c\x20\x01(\x0b2\x17.ffi.ffi.QueryBlockHashH\0R\tblockHash\x12^\n\ - \x16addVerificationDetails\x18\r\x20\x01(\x0b2$.ffi.ffi.QueryAddVerifica\ - tionDetailsH\0R\x16addVerificationDetails\x12I\n\x0fhasVerification\x18\ - \x0e\x20\x01(\x0b2\x1d.ffi.ffi.QueryHasVerificationH\0R\x0fhasVerificati\ - on\x12U\n\x13getVerificationData\x18\x0f\x20\x01(\x0b2!.ffi.ffi.QueryGet\ - VerificationDataH\0R\x13getVerificationData\x12X\n\x14insertAccountBalan\ - ce\x18\x10\x20\x01(\x0b2\".ffi.ffi.QueryInsertAccountBalanceH\0R\x14inse\ - rtAccountBalance\x12R\n\x12insertAccountNonce\x18\x11\x20\x01(\x0b2\x20.\ - ffi.ffi.QueryInsertAccountNonceH\0R\x12insertAccountNonce\x12L\n\x10issu\ - anceTreeRoot\x18\x12\x20\x01(\x0b2\x1e.ffi.ffi.QueryIssuanceTreeRootH\0R\ - \x10issuanceTreeRoot\x12R\n\x12revocationTreeRoot\x18\x13\x20\x01(\x0b2\ - \x20.ffi.ffi.QueryRevocationTreeRootH\0R\x12revocationTreeRoot\x12d\n\ - \x18addVerificationDetailsV2\x18\x14\x20\x01(\x0b2&.ffi.ffi.QueryAddVeri\ - ficationDetailsV2H\0R\x18addVerificationDetailsV2B\x05\n\x03req\"\xa0\ - \x02\n\x0fSGXVMCallParams\x12\x12\n\x04from\x18\x01\x20\x01(\x0cR\x04fro\ - m\x12\x0e\n\x02to\x18\x02\x20\x01(\x0cR\x02to\x12\x12\n\x04data\x18\x03\ - \x20\x01(\x0cR\x04data\x12\x1a\n\x08gasLimit\x18\x04\x20\x01(\x04R\x08ga\ - sLimit\x12\x1a\n\x08gasPrice\x18\x05\x20\x01(\x0cR\x08gasPrice\x12\x14\n\ - \x05value\x18\x06\x20\x01(\x0cR\x05value\x127\n\naccessList\x18\x07\x20\ - \x03(\x0b2\x17.ffi.ffi.AccessListItemR\naccessList\x12\x16\n\x06commit\ - \x18\x08\x20\x01(\x08R\x06commit\x12\x14\n\x05nonce\x18\t\x20\x01(\x04R\ - \x05nonce\x12\x20\n\x0bunencrypted\x18\n\x20\x01(\x08R\x0bunencrypted\"\ - \xf0\x01\n\x11SGXVMCreateParams\x12\x12\n\x04from\x18\x01\x20\x01(\x0cR\ - \x04from\x12\x12\n\x04data\x18\x02\x20\x01(\x0cR\x04data\x12\x1a\n\x08ga\ - sLimit\x18\x03\x20\x01(\x04R\x08gasLimit\x12\x1a\n\x08gasPrice\x18\x04\ - \x20\x01(\x0cR\x08gasPrice\x12\x14\n\x05value\x18\x05\x20\x01(\x0cR\x05v\ - alue\x127\n\naccessList\x18\x06\x20\x03(\x0b2\x17.ffi.ffi.AccessListItem\ - R\naccessList\x12\x16\n\x06commit\x18\x07\x20\x01(\x08R\x06commit\x12\ - \x14\n\x05nonce\x18\x08\x20\x01(\x04R\x05nonce\"{\n\x10SGXVMCallRequest\ - \x120\n\x06params\x18\x01\x20\x01(\x0b2\x18.ffi.ffi.SGXVMCallParamsR\x06\ - params\x125\n\x07context\x18\x02\x20\x01(\x0b2\x1b.ffi.ffi.TransactionCo\ - ntextR\x07context\"\x7f\n\x12SGXVMCreateRequest\x122\n\x06params\x18\x01\ - \x20\x01(\x0b2\x1a.ffi.ffi.SGXVMCreateParamsR\x06params\x125\n\x07contex\ - t\x18\x02\x20\x01(\x0b2\x1b.ffi.ffi.TransactionContextR\x07context\"8\n\ - \x14NodePublicKeyRequest\x12\x20\n\x0bblockNumber\x18\x01\x20\x01(\x04R\ - \x0bblockNumber\"5\n\x15NodePublicKeyResponse\x12\x1c\n\tpublicKey\x18\ - \x01\x20\x01(\x0cR\tpublicKey\"y\n\tEpochData\x12\x20\n\x0bepochNumber\ - \x18\x01\x20\x01(\rR\x0bepochNumber\x12$\n\rstartingBlock\x18\x02\x20\ - \x01(\x04R\rstartingBlock\x12$\n\rnodePublicKey\x18\x03\x20\x01(\x0cR\rn\ - odePublicKey\"@\n\x12ListEpochsResponse\x12*\n\x06epochs\x18\x01\x20\x03\ - (\x0b2\x12.ffi.ffi.EpochDataR\x06epochs\"\xe4\x01\n\nFFIRequest\x12=\n\ - \x0bcallRequest\x18\x01\x20\x01(\x0b2\x19.ffi.ffi.SGXVMCallRequestH\0R\ - \x0bcallRequest\x12C\n\rcreateRequest\x18\x02\x20\x01(\x0b2\x1b.ffi.ffi.\ - SGXVMCreateRequestH\0R\rcreateRequest\x12K\n\x10publicKeyRequest\x18\x03\ - \x20\x01(\x0b2\x1d.ffi.ffi.NodePublicKeyRequestH\0R\x10publicKeyRequestB\ - \x05\n\x03reqB&Z$github.com/SigmaGmbH/librustgo/typesJ\xf4\\\n\x07\x12\ - \x05\0\0\xbe\x02\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\x01\x02\x12\ - \x03\x02\0\x10\n\x08\n\x01\x08\x12\x03\x04\0;\n\t\n\x02\x08\x0b\x12\x03\ - \x04\0;\n\x1d\n\x02\x04\0\x12\x04\x08\0\x0b\x012\x11\x20General\x20reque\ - st\n\n\n\n\x03\x04\0\x01\x12\x03\x08\x08\x16\n\x0b\n\x04\x04\0\x02\0\x12\ - \x03\t\x02!\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\t\x02\n\n\x0c\n\x05\x04\ - \0\x02\0\x05\x12\x03\t\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\t\x11\ - \x1c\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\t\x1f\x20\n\x0b\n\x04\x04\0\x02\ - \x01\x12\x03\n\x02\x14\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\n\x02\x07\n\ - \x0c\n\x05\x04\0\x02\x01\x01\x12\x03\n\x08\x0f\n\x0c\n\x05\x04\0\x02\x01\ - \x03\x12\x03\n\x12\x13\n\n\n\x02\x04\x01\x12\x04\r\0\x14\x01\n\n\n\x03\ - \x04\x01\x01\x12\x03\r\x08\x17\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x0e\x02\ - \x11\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x0e\x02\x07\n\x0c\n\x05\x04\ - \x01\x02\0\x01\x12\x03\x0e\x08\x0c\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\ - \x0e\x0f\x10\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\x0f\x02\x0f\n\x0c\n\x05\ - \x04\x01\x02\x01\x05\x12\x03\x0f\x02\x07\n\x0c\n\x05\x04\x01\x02\x01\x01\ - \x12\x03\x0f\x08\n\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\x0f\r\x0e\n\ - \x0b\n\x04\x04\x01\x02\x02\x12\x03\x10\x02\x11\n\x0c\n\x05\x04\x01\x02\ - \x02\x05\x12\x03\x10\x02\x07\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03\x10\ - \x08\x0c\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03\x10\x0f\x10\n\x0b\n\x04\ - \x04\x01\x02\x03\x12\x03\x11\x02\x16\n\x0c\n\x05\x04\x01\x02\x03\x05\x12\ - \x03\x11\x02\x08\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\x03\x11\t\x11\n\x0c\ - \n\x05\x04\x01\x02\x03\x03\x12\x03\x11\x14\x15\n\x0b\n\x04\x04\x01\x02\ - \x04\x12\x03\x12\x02\x12\n\x0c\n\x05\x04\x01\x02\x04\x05\x12\x03\x12\x02\ - \x07\n\x0c\n\x05\x04\x01\x02\x04\x01\x12\x03\x12\x08\r\n\x0c\n\x05\x04\ - \x01\x02\x04\x03\x12\x03\x12\x10\x11\n\x0b\n\x04\x04\x01\x02\x05\x12\x03\ - \x13\x02)\n\x0c\n\x05\x04\x01\x02\x05\x04\x12\x03\x13\x02\n\n\x0c\n\x05\ - \x04\x01\x02\x05\x06\x12\x03\x13\x0b\x19\n\x0c\n\x05\x04\x01\x02\x05\x01\ - \x12\x03\x13\x1a$\n\x0c\n\x05\x04\x01\x02\x05\x03\x12\x03\x13'(\n\n\n\ - \x02\x04\x02\x12\x04\x16\0\x1e\x01\n\n\n\x03\x04\x02\x01\x12\x03\x16\x08\ - \x1a\n\x0b\n\x04\x04\x02\x02\0\x12\x03\x17\x02\x16\n\x0c\n\x05\x04\x02\ - \x02\0\x05\x12\x03\x17\x02\x08\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\x17\ - \t\x11\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\x17\x14\x15\n\x0b\n\x04\x04\ - \x02\x02\x01\x12\x03\x18\x02\x16\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03\ - \x18\x02\x07\n\x0c\n\x05\x04\x02\x02\x01\x01\x12\x03\x18\x08\x11\n\x0c\n\ - \x05\x04\x02\x02\x01\x03\x12\x03\x18\x14\x15\n\x0b\n\x04\x04\x02\x02\x02\ - \x12\x03\x19\x02\x17\n\x0c\n\x05\x04\x02\x02\x02\x05\x12\x03\x19\x02\x08\ - \n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03\x19\t\x12\n\x0c\n\x05\x04\x02\ - \x02\x02\x03\x12\x03\x19\x15\x16\n\x0b\n\x04\x04\x02\x02\x03\x12\x03\x1a\ - \x02\x1d\n\x0c\n\x05\x04\x02\x02\x03\x05\x12\x03\x1a\x02\x08\n\x0c\n\x05\ - \x04\x02\x02\x03\x01\x12\x03\x1a\t\x18\n\x0c\n\x05\x04\x02\x02\x03\x03\ - \x12\x03\x1a\x1b\x1c\n\x0b\n\x04\x04\x02\x02\x04\x12\x03\x1b\x02#\n\x0c\ - \n\x05\x04\x02\x02\x04\x05\x12\x03\x1b\x02\x07\n\x0c\n\x05\x04\x02\x02\ - \x04\x01\x12\x03\x1b\x08\x1e\n\x0c\n\x05\x04\x02\x02\x04\x03\x12\x03\x1b\ - !\"\n\x0b\n\x04\x04\x02\x02\x05\x12\x03\x1c\x02\x1b\n\x0c\n\x05\x04\x02\ - \x02\x05\x05\x12\x03\x1c\x02\x07\n\x0c\n\x05\x04\x02\x02\x05\x01\x12\x03\ - \x1c\x08\x16\n\x0c\n\x05\x04\x02\x02\x05\x03\x12\x03\x1c\x19\x1a\n\x0b\n\ - \x04\x04\x02\x02\x06\x12\x03\x1d\x02\x1a\n\x0c\n\x05\x04\x02\x02\x06\x05\ - \x12\x03\x1d\x02\x08\n\x0c\n\x05\x04\x02\x02\x06\x01\x12\x03\x1d\t\x15\n\ - \x0c\n\x05\x04\x02\x02\x06\x03\x12\x03\x1d\x18\x19\n\n\n\x02\x04\x03\x12\ - \x04\x20\0#\x01\n\n\n\x03\x04\x03\x01\x12\x03\x20\x08\x20\n\x0b\n\x04\ - \x04\x03\x02\0\x12\x03!\x02\x1e\n\x0c\n\x05\x04\x03\x02\0\x06\x12\x03!\ - \x02\x11\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x03!\x12\x19\n\x0c\n\x05\x04\ - \x03\x02\0\x03\x12\x03!\x1c\x1d\n\x0b\n\x04\x04\x03\x02\x01\x12\x03\"\ - \x02$\n\x0c\n\x05\x04\x03\x02\x01\x06\x12\x03\"\x02\x14\n\x0c\n\x05\x04\ - \x03\x02\x01\x01\x12\x03\"\x15\x1f\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\ - \x03\"\"#\n\n\n\x02\x04\x04\x12\x04%\00\x01\n\n\n\x03\x04\x04\x01\x12\ - \x03%\x08!\nZ\n\x04\x04\x04\x02\0\x12\x03(\x02\x18\x1aM\x20logs\x20conta\ - ins\x20the\x20transaction\x20hash\x20and\x20the\x20proto-compatible\x20e\ - thereum\n\x20logs.\n\n\x0c\n\x05\x04\x04\x02\0\x04\x12\x03(\x02\n\n\x0c\ - \n\x05\x04\x04\x02\0\x06\x12\x03(\x0b\x0e\n\x0c\n\x05\x04\x04\x02\0\x01\ - \x12\x03(\x0f\x13\n\x0c\n\x05\x04\x04\x02\0\x03\x12\x03(\x16\x17\n\\\n\ - \x04\x04\x04\x02\x01\x12\x03+\x02\x10\x1aO\x20returned\x20data\x20from\ - \x20evm\x20function\x20(result\x20or\x20data\x20supplied\x20with\x20reve\ - rt\n\x20opcode)\n\n\x0c\n\x05\x04\x04\x02\x01\x05\x12\x03+\x02\x07\n\x0c\ - \n\x05\x04\x04\x02\x01\x01\x12\x03+\x08\x0b\n\x0c\n\x05\x04\x04\x02\x01\ - \x03\x12\x03+\x0e\x0f\n=\n\x04\x04\x04\x02\x02\x12\x03-\x02\x16\x1a0\x20\ - vm\x20error\x20is\x20the\x20error\x20returned\x20by\x20vm\x20execution\n\ - \n\x0c\n\x05\x04\x04\x02\x02\x05\x12\x03-\x02\x08\n\x0c\n\x05\x04\x04\ - \x02\x02\x01\x12\x03-\t\x11\n\x0c\n\x05\x04\x04\x02\x02\x03\x12\x03-\x14\ - \x15\n.\n\x04\x04\x04\x02\x03\x12\x03/\x02\x16\x1a!\x20gas\x20consumed\ - \x20by\x20the\x20transaction\n\n\x0c\n\x05\x04\x04\x02\x03\x05\x12\x03/\ - \x02\x08\n\x0c\n\x05\x04\x04\x02\x03\x01\x12\x03/\t\x11\n\x0c\n\x05\x04\ - \x04\x02\x03\x03\x12\x03/\x14\x15\nc\n\x02\x04\x05\x12\x034\0\"\x1aX\x20\ - Topic\x20represents\x2032-byte\x20words\x20that\x20is\x20used\x20to\x20d\ - escribe\x20what\xe2\x80\x99s\x20going\x20on\x20in\x20an\n\x20event\n\n\n\ - \n\x03\x04\x05\x01\x12\x034\x08\r\n\x0b\n\x04\x04\x05\x02\0\x12\x034\x10\ - \x20\n\x0c\n\x05\x04\x05\x02\0\x05\x12\x034\x10\x15\n\x0c\n\x05\x04\x05\ - \x02\0\x01\x12\x034\x16\x1b\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x034\x1e\ - \x1f\n\x81\x01\n\x02\x04\x06\x12\x049\0@\x01\x1au\x20Log\x20represents\ - \x20an\x20protobuf\x20compatible\x20Ethereum\x20Log\x20that\x20defines\ - \x20a\x20contract\n\x20log\x20event.\n\x20Copied\x20from\x20`devnet/prot\ - o``\n\n\n\n\x03\x04\x06\x01\x12\x039\x08\x0b\n?\n\x04\x04\x06\x02\0\x12\ - \x03;\x02\x14\x1a2\x20address\x20of\x20the\x20contract\x20that\x20genera\ - ted\x20the\x20event\n\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03;\x02\x07\n\ - \x0c\n\x05\x04\x06\x02\0\x01\x12\x03;\x08\x0f\n\x0c\n\x05\x04\x06\x02\0\ - \x03\x12\x03;\x12\x13\n7\n\x04\x04\x06\x02\x01\x12\x03=\x02\x1c\x1a*\x20\ - list\x20of\x20topics\x20provided\x20by\x20the\x20contract.\n\n\x0c\n\x05\ - \x04\x06\x02\x01\x04\x12\x03=\x02\n\n\x0c\n\x05\x04\x06\x02\x01\x06\x12\ - \x03=\x0b\x10\n\x0c\n\x05\x04\x06\x02\x01\x01\x12\x03=\x11\x17\n\x0c\n\ - \x05\x04\x06\x02\x01\x03\x12\x03=\x1a\x1b\n<\n\x04\x04\x06\x02\x02\x12\ - \x03?\x02\x11\x1a/\x20supplied\x20by\x20the\x20contract,\x20usually\x20A\ - BI-encoded\n\n\x0c\n\x05\x04\x06\x02\x02\x05\x12\x03?\x02\x07\n\x0c\n\ - \x05\x04\x06\x02\x02\x01\x12\x03?\x08\x0c\n\x0c\n\x05\x04\x06\x02\x02\ - \x03\x12\x03?\x0f\x10\nX\n\x02\x04\x07\x12\x04C\0F\x01\x1aL\x20Request\ - \x20for\x20account\x20code\x20(smart\x20contract\x20deployed\x20behind\ - \x20provided\x20address)\n\n\n\n\x03\x04\x07\x01\x12\x03C\x08\x17\n*\n\ - \x04\x04\x07\x02\0\x12\x03E\x02\x14\x1a\x1d\x2020\x20bytes\x20of\x20acco\ - unt\x20address\n\n\x0c\n\x05\x04\x07\x02\0\x05\x12\x03E\x02\x07\n\x0c\n\ - \x05\x04\x07\x02\0\x01\x12\x03E\x08\x0f\n\x0c\n\x05\x04\x07\x02\0\x03\ - \x12\x03E\x12\x13\n'\n\x02\x04\x08\x12\x04I\0N\x01\x1a\x1b\x20Response\ - \x20for\x20account\x20code\n\n\n\n\x03\x04\x08\x01\x12\x03I\x08\x1f\nb\n\ - \x04\x04\x08\x02\0\x12\x03L\x02\x14\x1aU\x20Since\x20both\x20fields\x20a\ - re\x20256-bit\x20unsigned\x20integer,\x20we\x20encode\x20them\x20as\n\ - \x20big-endian\x20bytes\n\n\x0c\n\x05\x04\x08\x02\0\x05\x12\x03L\x02\x07\ - \n\x0c\n\x05\x04\x08\x02\0\x01\x12\x03L\x08\x0f\n\x0c\n\x05\x04\x08\x02\ - \0\x03\x12\x03L\x12\x13\n\x0b\n\x04\x04\x08\x02\x01\x12\x03M\x02\x13\n\ - \x0c\n\x05\x04\x08\x02\x01\x05\x12\x03M\x02\x08\n\x0c\n\x05\x04\x08\x02\ - \x01\x01\x12\x03M\t\x0e\n\x0c\n\x05\x04\x08\x02\x01\x03\x12\x03M\x11\x12\ - \n\n\n\x02\x04\t\x12\x04P\0S\x01\n\n\n\x03\x04\t\x01\x12\x03P\x08!\n\x0b\ - \n\x04\x04\t\x02\0\x12\x03Q\x02\x14\n\x0c\n\x05\x04\t\x02\0\x05\x12\x03Q\ - \x02\x07\n\x0c\n\x05\x04\t\x02\0\x01\x12\x03Q\x08\x0f\n\x0c\n\x05\x04\t\ - \x02\0\x03\x12\x03Q\x12\x13\n\x0b\n\x04\x04\t\x02\x01\x12\x03R\x02\x14\n\ - \x0c\n\x05\x04\t\x02\x01\x05\x12\x03R\x02\x07\n\x0c\n\x05\x04\t\x02\x01\ - \x01\x12\x03R\x08\x0f\n\x0c\n\x05\x04\t\x02\x01\x03\x12\x03R\x12\x13\n\t\ - \n\x02\x04\n\x12\x03T\0,\n\n\n\x03\x04\n\x01\x12\x03T\x08)\n\n\n\x02\x04\ - \x0b\x12\x04V\0Y\x01\n\n\n\x03\x04\x0b\x01\x12\x03V\x08\x1f\n\x0b\n\x04\ - \x04\x0b\x02\0\x12\x03W\x02\x14\n\x0c\n\x05\x04\x0b\x02\0\x05\x12\x03W\ - \x02\x07\n\x0c\n\x05\x04\x0b\x02\0\x01\x12\x03W\x08\x0f\n\x0c\n\x05\x04\ - \x0b\x02\0\x03\x12\x03W\x12\x13\n\x0b\n\x04\x04\x0b\x02\x01\x12\x03X\x02\ - \x13\n\x0c\n\x05\x04\x0b\x02\x01\x05\x12\x03X\x02\x08\n\x0c\n\x05\x04\ - \x0b\x02\x01\x01\x12\x03X\t\x0e\n\x0c\n\x05\x04\x0b\x02\x01\x03\x12\x03X\ - \x11\x12\n\t\n\x02\x04\x0c\x12\x03Z\0)\n\n\n\x03\x04\x0c\x01\x12\x03Z\ - \x08'\n\t\n\x02\x04\r\x12\x03\\\0+\n\n\n\x03\x04\r\x01\x12\x03\\\x08\x18\ - \n\x0b\n\x04\x04\r\x02\0\x12\x03\\\x1b)\n\x0c\n\x05\x04\r\x02\0\x05\x12\ - \x03\\\x1b\x20\n\x0c\n\x05\x04\r\x02\0\x01\x12\x03\\!$\n\x0c\n\x05\x04\r\ - \x02\0\x03\x12\x03\\'(\n\t\n\x02\x04\x0e\x12\x03^\07\n\n\n\x03\x04\x0e\ - \x01\x12\x03^\x08\x20\n\x0b\n\x04\x04\x0e\x02\0\x12\x03^#5\n\x0c\n\x05\ - \x04\x0e\x02\0\x05\x12\x03^#'\n\x0c\n\x05\x04\x0e\x02\0\x01\x12\x03^(0\n\ - \x0c\n\x05\x04\x0e\x02\0\x03\x12\x03^34\n\n\n\x02\x04\x0f\x12\x04`\0c\ - \x01\n\n\n\x03\x04\x0f\x01\x12\x03`\x08\"\n\x0b\n\x04\x04\x0f\x02\0\x12\ - \x03a\x02\x14\n\x0c\n\x05\x04\x0f\x02\0\x05\x12\x03a\x02\x07\n\x0c\n\x05\ - \x04\x0f\x02\0\x01\x12\x03a\x08\x0f\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\ - \x03a\x12\x13\n\x0b\n\x04\x04\x0f\x02\x01\x12\x03b\x02\x12\n\x0c\n\x05\ - \x04\x0f\x02\x01\x05\x12\x03b\x02\x07\n\x0c\n\x05\x04\x0f\x02\x01\x01\ - \x12\x03b\x08\r\n\x0c\n\x05\x04\x0f\x02\x01\x03\x12\x03b\x10\x11\n\t\n\ - \x02\x04\x10\x12\x03e\0?\n\n\n\x03\x04\x10\x01\x12\x03e\x08*\n\x0b\n\x04\ - \x04\x10\x02\0\x12\x03e-=\n\x0c\n\x05\x04\x10\x02\0\x05\x12\x03e-2\n\x0c\ - \n\x05\x04\x10\x02\0\x01\x12\x03e38\n\x0c\n\x05\x04\x10\x02\0\x03\x12\ - \x03e;<\n\t\n\x02\x04\x11\x12\x03g\02\n\n\n\x03\x04\x11\x01\x12\x03g\x08\ - \x1b\n\x0b\n\x04\x04\x11\x02\0\x12\x03g\x1e0\n\x0c\n\x05\x04\x11\x02\0\ - \x05\x12\x03g\x1e#\n\x0c\n\x05\x04\x11\x02\0\x01\x12\x03g$+\n\x0c\n\x05\ - \x04\x11\x02\0\x03\x12\x03g./\n\t\n\x02\x04\x12\x12\x03i\07\n\n\n\x03\ - \x04\x12\x01\x12\x03i\x08#\n\x0b\n\x04\x04\x12\x02\0\x12\x03i&5\n\x0c\n\ - \x05\x04\x12\x02\0\x05\x12\x03i&+\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03i\ - ,0\n\x0c\n\x05\x04\x12\x02\0\x03\x12\x03i34\n\t\n\x02\x04\x13\x12\x03k\0\ - 6\n\n\n\x03\x04\x13\x01\x12\x03k\x08\x1f\n\x0b\n\x04\x04\x13\x02\0\x12\ - \x03k\"4\n\x0c\n\x05\x04\x13\x02\0\x05\x12\x03k\"'\n\x0c\n\x05\x04\x13\ - \x02\0\x01\x12\x03k(/\n\x0c\n\x05\x04\x13\x02\0\x03\x12\x03k23\n\t\n\x02\ - \x04\x14\x12\x03l\0<\n\n\n\x03\x04\x14\x01\x12\x03l\x08'\n\x0b\n\x04\x04\ - \x14\x02\0\x12\x03l*:\n\x0c\n\x05\x04\x14\x02\0\x05\x12\x03l*0\n\x0c\n\ - \x05\x04\x14\x02\0\x01\x12\x03l15\n\x0c\n\x05\x04\x14\x02\0\x03\x12\x03l\ - 89\n\t\n\x02\x04\x15\x12\x03n\06\n\n\n\x03\x04\x15\x01\x12\x03n\x08\x1f\ - \n\x0b\n\x04\x04\x15\x02\0\x12\x03n\"4\n\x0c\n\x05\x04\x15\x02\0\x05\x12\ - \x03n\"'\n\x0c\n\x05\x04\x15\x02\0\x01\x12\x03n(/\n\x0c\n\x05\x04\x15\ - \x02\0\x03\x12\x03n23\n\t\n\x02\x04\x16\x12\x03o\0;\n\n\n\x03\x04\x16\ - \x01\x12\x03o\x08'\n\x0b\n\x04\x04\x16\x02\0\x12\x03o*9\n\x0c\n\x05\x04\ - \x16\x02\0\x05\x12\x03o*/\n\x0c\n\x05\x04\x16\x02\0\x01\x12\x03o04\n\x0c\ - \n\x05\x04\x16\x02\0\x03\x12\x03o78\n\n\n\x02\x04\x17\x12\x04q\0t\x01\n\ - \n\n\x03\x04\x17\x01\x12\x03q\x08\x1e\n\x0b\n\x04\x04\x17\x02\0\x12\x03r\ - \x02\x14\n\x0c\n\x05\x04\x17\x02\0\x05\x12\x03r\x02\x07\n\x0c\n\x05\x04\ - \x17\x02\0\x01\x12\x03r\x08\x0f\n\x0c\n\x05\x04\x17\x02\0\x03\x12\x03r\ - \x12\x13\n\x0b\n\x04\x04\x17\x02\x01\x12\x03s\x02\x11\n\x0c\n\x05\x04\ - \x17\x02\x01\x05\x12\x03s\x02\x07\n\x0c\n\x05\x04\x17\x02\x01\x01\x12\ - \x03s\x08\x0c\n\x0c\n\x05\x04\x17\x02\x01\x03\x12\x03s\x0f\x10\n\t\n\x02\ - \x04\x18\x12\x03v\0)\n\n\n\x03\x04\x18\x01\x12\x03v\x08&\n\n\n\x02\x04\ - \x19\x12\x04x\0|\x01\n\n\n\x03\x04\x19\x01\x12\x03x\x08\x1e\n\x0b\n\x04\ - \x04\x19\x02\0\x12\x03y\x02\x14\n\x0c\n\x05\x04\x19\x02\0\x05\x12\x03y\ - \x02\x07\n\x0c\n\x05\x04\x19\x02\0\x01\x12\x03y\x08\x0f\n\x0c\n\x05\x04\ - \x19\x02\0\x03\x12\x03y\x12\x13\n\x0b\n\x04\x04\x19\x02\x01\x12\x03z\x02\ - \x12\n\x0c\n\x05\x04\x19\x02\x01\x05\x12\x03z\x02\x07\n\x0c\n\x05\x04\ - \x19\x02\x01\x01\x12\x03z\x08\r\n\x0c\n\x05\x04\x19\x02\x01\x03\x12\x03z\ - \x10\x11\n\x0b\n\x04\x04\x19\x02\x02\x12\x03{\x02\x12\n\x0c\n\x05\x04\ - \x19\x02\x02\x05\x12\x03{\x02\x07\n\x0c\n\x05\x04\x19\x02\x02\x01\x12\ - \x03{\x08\r\n\x0c\n\x05\x04\x19\x02\x02\x03\x12\x03{\x10\x11\n\t\n\x02\ - \x04\x1a\x12\x03~\0)\n\n\n\x03\x04\x1a\x01\x12\x03~\x08&\n\n\n\x02\x04\ - \x1b\x12\x04\x80\x01\0*\n\x0b\n\x03\x04\x1b\x01\x12\x04\x80\x01\x08\x13\ - \n\x0c\n\x04\x04\x1b\x02\0\x12\x04\x80\x01\x16(\n\r\n\x05\x04\x1b\x02\0\ - \x05\x12\x04\x80\x01\x16\x1b\n\r\n\x05\x04\x1b\x02\0\x01\x12\x04\x80\x01\ - \x1c#\n\r\n\x05\x04\x1b\x02\0\x03\x12\x04\x80\x01&'\n\n\n\x02\x04\x1c\ - \x12\x04\x82\x01\0\x1e\n\x0b\n\x03\x04\x1c\x01\x12\x04\x82\x01\x08\x1b\n\ - \x0c\n\x02\x04\x1d\x12\x06\x84\x01\0\x87\x01\x01\n\x0b\n\x03\x04\x1d\x01\ - \x12\x04\x84\x01\x08\x1e\n\x0c\n\x04\x04\x1d\x02\0\x12\x04\x85\x01\x02\ - \x14\n\r\n\x05\x04\x1d\x02\0\x05\x12\x04\x85\x01\x02\x07\n\r\n\x05\x04\ - \x1d\x02\0\x01\x12\x04\x85\x01\x08\x0f\n\r\n\x05\x04\x1d\x02\0\x03\x12\ - \x04\x85\x01\x12\x13\n\x0c\n\x04\x04\x1d\x02\x01\x12\x04\x86\x01\x02\x12\ - \n\r\n\x05\x04\x1d\x02\x01\x05\x12\x04\x86\x01\x02\x07\n\r\n\x05\x04\x1d\ - \x02\x01\x01\x12\x04\x86\x01\x08\r\n\r\n\x05\x04\x1d\x02\x01\x03\x12\x04\ - \x86\x01\x10\x11\n\n\n\x02\x04\x1e\x12\x04\x89\x01\0)\n\x0b\n\x03\x04\ - \x1e\x01\x12\x04\x89\x01\x08&\n\n\n\x02\x04\x1f\x12\x04\x8b\x01\01\n\x0b\ - \n\x03\x04\x1f\x01\x12\x04\x8b\x01\x08\x1a\n\x0c\n\x04\x04\x1f\x02\0\x12\ - \x04\x8b\x01\x1d/\n\r\n\x05\x04\x1f\x02\0\x05\x12\x04\x8b\x01\x1d\"\n\r\ - \n\x05\x04\x1f\x02\0\x01\x12\x04\x8b\x01#*\n\r\n\x05\x04\x1f\x02\0\x03\ - \x12\x04\x8b\x01-.\n\n\n\x02\x04\x20\x12\x04\x8d\x01\0%\n\x0b\n\x03\x04\ - \x20\x01\x12\x04\x8d\x01\x08\"\n\n\n\x02\x04!\x12\x04\x8f\x01\0,\n\x0b\n\ - \x03\x04!\x01\x12\x04\x8f\x01\x08\x16\n\x0c\n\x04\x04!\x02\0\x12\x04\x8f\ - \x01\x19*\n\r\n\x05\x04!\x02\0\x05\x12\x04\x8f\x01\x19\x1e\n\r\n\x05\x04\ - !\x02\0\x01\x12\x04\x8f\x01\x1f%\n\r\n\x05\x04!\x02\0\x03\x12\x04\x8f\ - \x01()\n\n\n\x02\x04\"\x12\x04\x90\x01\02\n\x0b\n\x03\x04\"\x01\x12\x04\ - \x90\x01\x08\x1e\n\x0c\n\x04\x04\"\x02\0\x12\x04\x90\x01!0\n\r\n\x05\x04\ - \"\x02\0\x05\x12\x04\x90\x01!&\n\r\n\x05\x04\"\x02\0\x01\x12\x04\x90\x01\ - '+\n\r\n\x05\x04\"\x02\0\x03\x12\x04\x90\x01./\n\n\n\x02\x04#\x12\x04\ - \x92\x01\0\x20\n\x0b\n\x03\x04#\x01\x12\x04\x92\x01\x08\x1d\n\x0c\n\x02\ - \x04$\x12\x06\x93\x01\0\x95\x01\x01\n\x0b\n\x03\x04$\x01\x12\x04\x93\x01\ - \x08%\n\x0c\n\x04\x04$\x02\0\x12\x04\x94\x01\x02\x11\n\r\n\x05\x04$\x02\ - \0\x05\x12\x04\x94\x01\x02\x07\n\r\n\x05\x04$\x02\0\x01\x12\x04\x94\x01\ - \x08\x0c\n\r\n\x05\x04$\x02\0\x03\x12\x04\x94\x01\x0f\x10\n\n\n\x02\x04%\ - \x12\x04\x97\x01\0\"\n\x0b\n\x03\x04%\x01\x12\x04\x97\x01\x08\x1f\n\x0c\ - \n\x02\x04&\x12\x06\x98\x01\0\x9a\x01\x01\n\x0b\n\x03\x04&\x01\x12\x04\ - \x98\x01\x08'\n\x0c\n\x04\x04&\x02\0\x12\x04\x99\x01\x02\x11\n\r\n\x05\ - \x04&\x02\0\x05\x12\x04\x99\x01\x02\x07\n\r\n\x05\x04&\x02\0\x01\x12\x04\ - \x99\x01\x08\x0c\n\r\n\x05\x04&\x02\0\x03\x12\x04\x99\x01\x0f\x10\n\x0c\ - \n\x02\x04'\x12\x06\x9c\x01\0\xa7\x01\x01\n\x0b\n\x03\x04'\x01\x12\x04\ - \x9c\x01\x08#\n\x0c\n\x04\x04'\x02\0\x12\x04\x9d\x01\x02\x18\n\r\n\x05\ - \x04'\x02\0\x05\x12\x04\x9d\x01\x02\x07\n\r\n\x05\x04'\x02\0\x01\x12\x04\ - \x9d\x01\x08\x13\n\r\n\x05\x04'\x02\0\x03\x12\x04\x9d\x01\x16\x17\n\x0c\ - \n\x04\x04'\x02\x01\x12\x04\x9e\x01\x02\x1a\n\r\n\x05\x04'\x02\x01\x05\ - \x12\x04\x9e\x01\x02\x07\n\r\n\x05\x04'\x02\x01\x01\x12\x04\x9e\x01\x08\ - \x15\n\r\n\x05\x04'\x02\x01\x03\x12\x04\x9e\x01\x18\x19\n\x0c\n\x04\x04'\ - \x02\x02\x12\x04\x9f\x01\x02\x19\n\r\n\x05\x04'\x02\x02\x05\x12\x04\x9f\ - \x01\x02\x08\n\r\n\x05\x04'\x02\x02\x01\x12\x04\x9f\x01\t\x14\n\r\n\x05\ - \x04'\x02\x02\x03\x12\x04\x9f\x01\x17\x18\n\x0c\n\x04\x04'\x02\x03\x12\ - \x04\xa0\x01\x02\x1e\n\r\n\x05\x04'\x02\x03\x05\x12\x04\xa0\x01\x02\x08\ - \n\r\n\x05\x04'\x02\x03\x01\x12\x04\xa0\x01\t\x19\n\r\n\x05\x04'\x02\x03\ - \x03\x12\x04\xa0\x01\x1c\x1d\n\x0c\n\x04\x04'\x02\x04\x12\x04\xa1\x01\ - \x02\x1f\n\r\n\x05\x04'\x02\x04\x05\x12\x04\xa1\x01\x02\x08\n\r\n\x05\ - \x04'\x02\x04\x01\x12\x04\xa1\x01\t\x1a\n\r\n\x05\x04'\x02\x04\x03\x12\ - \x04\xa1\x01\x1d\x1e\n\x0c\n\x04\x04'\x02\x05\x12\x04\xa2\x01\x02!\n\r\n\ - \x05\x04'\x02\x05\x05\x12\x04\xa2\x01\x02\x08\n\r\n\x05\x04'\x02\x05\x01\ - \x12\x04\xa2\x01\t\x1c\n\r\n\x05\x04'\x02\x05\x03\x12\x04\xa2\x01\x1f\ - \x20\n\x0c\n\x04\x04'\x02\x06\x12\x04\xa3\x01\x02\x16\n\r\n\x05\x04'\x02\ - \x06\x05\x12\x04\xa3\x01\x02\x07\n\r\n\x05\x04'\x02\x06\x01\x12\x04\xa3\ - \x01\x08\x11\n\r\n\x05\x04'\x02\x06\x03\x12\x04\xa3\x01\x14\x15\n\x0c\n\ - \x04\x04'\x02\x07\x12\x04\xa4\x01\x02\x14\n\r\n\x05\x04'\x02\x07\x05\x12\ - \x04\xa4\x01\x02\x08\n\r\n\x05\x04'\x02\x07\x01\x12\x04\xa4\x01\t\x0f\n\ - \r\n\x05\x04'\x02\x07\x03\x12\x04\xa4\x01\x12\x13\n\x0c\n\x04\x04'\x02\ - \x08\x12\x04\xa5\x01\x02\"\n\r\n\x05\x04'\x02\x08\x05\x12\x04\xa5\x01\ - \x02\x08\n\r\n\x05\x04'\x02\x08\x01\x12\x04\xa5\x01\t\x1d\n\r\n\x05\x04'\ - \x02\x08\x03\x12\x04\xa5\x01\x20!\n\x0c\n\x04\x04'\x02\t\x12\x04\xa6\x01\ - \x02\x16\n\r\n\x05\x04'\x02\t\x05\x12\x04\xa6\x01\x02\x08\n\r\n\x05\x04'\ - \x02\t\x01\x12\x04\xa6\x01\t\x10\n\r\n\x05\x04'\x02\t\x03\x12\x04\xa6\ - \x01\x13\x15\n\x0c\n\x02\x04(\x12\x06\xa8\x01\0\xaa\x01\x01\n\x0b\n\x03\ - \x04(\x01\x12\x04\xa8\x01\x08+\n\x0c\n\x04\x04(\x02\0\x12\x04\xa9\x01\ - \x02\x1b\n\r\n\x05\x04(\x02\0\x05\x12\x04\xa9\x01\x02\x07\n\r\n\x05\x04(\ - \x02\0\x01\x12\x04\xa9\x01\x08\x16\n\r\n\x05\x04(\x02\0\x03\x12\x04\xa9\ - \x01\x19\x1a\n\x0c\n\x02\x04)\x12\x06\xac\x01\0\xb8\x01\x01\n\x0b\n\x03\ - \x04)\x01\x12\x04\xac\x01\x08%\n\x0c\n\x04\x04)\x02\0\x12\x04\xad\x01\ - \x02\x18\n\r\n\x05\x04)\x02\0\x05\x12\x04\xad\x01\x02\x07\n\r\n\x05\x04)\ - \x02\0\x01\x12\x04\xad\x01\x08\x13\n\r\n\x05\x04)\x02\0\x03\x12\x04\xad\ - \x01\x16\x17\n\x0c\n\x04\x04)\x02\x01\x12\x04\xae\x01\x02\x1a\n\r\n\x05\ - \x04)\x02\x01\x05\x12\x04\xae\x01\x02\x07\n\r\n\x05\x04)\x02\x01\x01\x12\ - \x04\xae\x01\x08\x15\n\r\n\x05\x04)\x02\x01\x03\x12\x04\xae\x01\x18\x19\ - \n\x0c\n\x04\x04)\x02\x02\x12\x04\xaf\x01\x02\x19\n\r\n\x05\x04)\x02\x02\ - \x05\x12\x04\xaf\x01\x02\x08\n\r\n\x05\x04)\x02\x02\x01\x12\x04\xaf\x01\ - \t\x14\n\r\n\x05\x04)\x02\x02\x03\x12\x04\xaf\x01\x17\x18\n\x0c\n\x04\ - \x04)\x02\x03\x12\x04\xb0\x01\x02\x1e\n\r\n\x05\x04)\x02\x03\x05\x12\x04\ - \xb0\x01\x02\x08\n\r\n\x05\x04)\x02\x03\x01\x12\x04\xb0\x01\t\x19\n\r\n\ - \x05\x04)\x02\x03\x03\x12\x04\xb0\x01\x1c\x1d\n\x0c\n\x04\x04)\x02\x04\ - \x12\x04\xb1\x01\x02\x1f\n\r\n\x05\x04)\x02\x04\x05\x12\x04\xb1\x01\x02\ - \x08\n\r\n\x05\x04)\x02\x04\x01\x12\x04\xb1\x01\t\x1a\n\r\n\x05\x04)\x02\ - \x04\x03\x12\x04\xb1\x01\x1d\x1e\n\x0c\n\x04\x04)\x02\x05\x12\x04\xb2\ - \x01\x02!\n\r\n\x05\x04)\x02\x05\x05\x12\x04\xb2\x01\x02\x08\n\r\n\x05\ - \x04)\x02\x05\x01\x12\x04\xb2\x01\t\x1c\n\r\n\x05\x04)\x02\x05\x03\x12\ - \x04\xb2\x01\x1f\x20\n\x0c\n\x04\x04)\x02\x06\x12\x04\xb3\x01\x02\x16\n\ - \r\n\x05\x04)\x02\x06\x05\x12\x04\xb3\x01\x02\x07\n\r\n\x05\x04)\x02\x06\ - \x01\x12\x04\xb3\x01\x08\x11\n\r\n\x05\x04)\x02\x06\x03\x12\x04\xb3\x01\ - \x14\x15\n\x0c\n\x04\x04)\x02\x07\x12\x04\xb4\x01\x02\x14\n\r\n\x05\x04)\ - \x02\x07\x05\x12\x04\xb4\x01\x02\x08\n\r\n\x05\x04)\x02\x07\x01\x12\x04\ - \xb4\x01\t\x0f\n\r\n\x05\x04)\x02\x07\x03\x12\x04\xb4\x01\x12\x13\n\x0c\ - \n\x04\x04)\x02\x08\x12\x04\xb5\x01\x02\"\n\r\n\x05\x04)\x02\x08\x05\x12\ - \x04\xb5\x01\x02\x08\n\r\n\x05\x04)\x02\x08\x01\x12\x04\xb5\x01\t\x1d\n\ - \r\n\x05\x04)\x02\x08\x03\x12\x04\xb5\x01\x20!\n\x0c\n\x04\x04)\x02\t\ - \x12\x04\xb6\x01\x02\x16\n\r\n\x05\x04)\x02\t\x05\x12\x04\xb6\x01\x02\ - \x08\n\r\n\x05\x04)\x02\t\x01\x12\x04\xb6\x01\t\x10\n\r\n\x05\x04)\x02\t\ - \x03\x12\x04\xb6\x01\x13\x15\n\x0c\n\x04\x04)\x02\n\x12\x04\xb7\x01\x02\ - \x1b\n\r\n\x05\x04)\x02\n\x05\x12\x04\xb7\x01\x02\x07\n\r\n\x05\x04)\x02\ - \n\x01\x12\x04\xb7\x01\x08\x15\n\r\n\x05\x04)\x02\n\x03\x12\x04\xb7\x01\ - \x18\x1a\n\x0c\n\x02\x04*\x12\x06\xb9\x01\0\xbb\x01\x01\n\x0b\n\x03\x04*\ - \x01\x12\x04\xb9\x01\x08-\n\x0c\n\x04\x04*\x02\0\x12\x04\xba\x01\x02\x1b\ - \n\r\n\x05\x04*\x02\0\x05\x12\x04\xba\x01\x02\x07\n\r\n\x05\x04*\x02\0\ - \x01\x12\x04\xba\x01\x08\x16\n\r\n\x05\x04*\x02\0\x03\x12\x04\xba\x01\ - \x19\x1a\n\x0c\n\x02\x04+\x12\x06\xbd\x01\0\xc2\x01\x01\n\x0b\n\x03\x04+\ - \x01\x12\x04\xbd\x01\x08\x1c\n\x0c\n\x04\x04+\x02\0\x12\x04\xbe\x01\x02\ - \x18\n\r\n\x05\x04+\x02\0\x05\x12\x04\xbe\x01\x02\x07\n\r\n\x05\x04+\x02\ - \0\x01\x12\x04\xbe\x01\x08\x13\n\r\n\x05\x04+\x02\0\x03\x12\x04\xbe\x01\ - \x16\x17\n\x0c\n\x04\x04+\x02\x01\x12\x04\xbf\x01\x02\x1e\n\r\n\x05\x04+\ - \x02\x01\x05\x12\x04\xbf\x01\x02\x08\n\r\n\x05\x04+\x02\x01\x01\x12\x04\ - \xbf\x01\t\x19\n\r\n\x05\x04+\x02\x01\x03\x12\x04\xbf\x01\x1c\x1d\n\x0c\ - \n\x04\x04+\x02\x02\x12\x04\xc0\x01\x02!\n\r\n\x05\x04+\x02\x02\x05\x12\ - \x04\xc0\x01\x02\x08\n\r\n\x05\x04+\x02\x02\x01\x12\x04\xc0\x01\t\x1c\n\ - \r\n\x05\x04+\x02\x02\x03\x12\x04\xc0\x01\x1f\x20\n\x0c\n\x04\x04+\x02\ - \x03\x12\x04\xc1\x01\x02$\n\r\n\x05\x04+\x02\x03\x04\x12\x04\xc1\x01\x02\ - \n\n\r\n\x05\x04+\x02\x03\x05\x12\x04\xc1\x01\x0b\x10\n\r\n\x05\x04+\x02\ - \x03\x01\x12\x04\xc1\x01\x11\x1f\n\r\n\x05\x04+\x02\x03\x03\x12\x04\xc1\ - \x01\"#\n\x0c\n\x02\x04,\x12\x06\xc3\x01\0\xc5\x01\x01\n\x0b\n\x03\x04,\ - \x01\x12\x04\xc3\x01\x08$\n\x0c\n\x04\x04,\x02\0\x12\x04\xc4\x01\x02\x1b\ - \n\r\n\x05\x04,\x02\0\x05\x12\x04\xc4\x01\x02\x06\n\r\n\x05\x04,\x02\0\ - \x01\x12\x04\xc4\x01\x07\x16\n\r\n\x05\x04,\x02\0\x03\x12\x04\xc4\x01\ - \x19\x1a\n\x0c\n\x02\x04-\x12\x06\xc7\x01\0\xca\x01\x01\n\x0b\n\x03\x04-\ - \x01\x12\x04\xc7\x01\x08\x20\n\x0c\n\x04\x04-\x02\0\x12\x04\xc8\x01\x02\ - \x18\n\r\n\x05\x04-\x02\0\x05\x12\x04\xc8\x01\x02\x07\n\r\n\x05\x04-\x02\ - \0\x01\x12\x04\xc8\x01\x08\x13\n\r\n\x05\x04-\x02\0\x03\x12\x04\xc8\x01\ - \x16\x17\n\x0c\n\x04\x04-\x02\x01\x12\x04\xc9\x01\x02\x1a\n\r\n\x05\x04-\ - \x02\x01\x05\x12\x04\xc9\x01\x02\x07\n\r\n\x05\x04-\x02\x01\x01\x12\x04\ - \xc9\x01\x08\x15\n\r\n\x05\x04-\x02\x01\x03\x12\x04\xc9\x01\x18\x19\n\ - \xf1\x01\n\x02\x04.\x12\x06\xce\x01\0\xe3\x01\x01\x1a\xe2\x01\x20Verific\ - ationDetails\x20must\x20have\x20same\x20members\x20with\x20VerificationD\ - etails\x20in\x20\"sgxvm/proto/ffi.proto\"\n\x20including\x20verification\ - \x20type\x20and\x20verification\x20id\x20as\x20key.\n\x20But\x20the\x20m\ - ember\x20types\x20can\x20be\x20different,\x20such\x20as\x20string(addres\ - s)\x20to\x20bytes\n\n\x0b\n\x03\x04.\x01\x12\x04\xce\x01\x08\x1b\n!\n\ - \x04\x04.\x02\0\x12\x04\xd0\x01\x02\x1e\x1a\x13\x20Verification\x20type\ - \n\n\r\n\x05\x04.\x02\0\x05\x12\x04\xd0\x01\x02\x08\n\r\n\x05\x04.\x02\0\ - \x01\x12\x04\xd0\x01\t\x19\n\r\n\x05\x04.\x02\0\x03\x12\x04\xd0\x01\x1c\ - \x1d\n\x1f\n\x04\x04.\x02\x01\x12\x04\xd2\x01\x02\x1b\x1a\x11\x20Verific\ - ation\x20Id\n\n\r\n\x05\x04.\x02\x01\x05\x12\x04\xd2\x01\x02\x07\n\r\n\ - \x05\x04.\x02\x01\x01\x12\x04\xd2\x01\x08\x16\n\r\n\x05\x04.\x02\x01\x03\ - \x12\x04\xd2\x01\x19\x1a\n+\n\x04\x04.\x02\x02\x12\x04\xd4\x01\x02\x1a\ - \x1a\x1d\x20Verification\x20issuer\x20address\n\n\r\n\x05\x04.\x02\x02\ - \x05\x12\x04\xd4\x01\x02\x07\n\r\n\x05\x04.\x02\x02\x01\x12\x04\xd4\x01\ - \x08\x15\n\r\n\x05\x04.\x02\x02\x03\x12\x04\xd4\x01\x18\x19\n6\n\x04\x04\ - .\x02\x03\x12\x04\xd6\x01\x02\x19\x1a(\x20From\x20which\x20chain\x20proo\ - f\x20was\x20transferred\n\n\r\n\x05\x04.\x02\x03\x05\x12\x04\xd6\x01\x02\ - \x08\n\r\n\x05\x04.\x02\x03\x01\x12\x04\xd6\x01\t\x14\n\r\n\x05\x04.\x02\ - \x03\x03\x12\x04\xd6\x01\x17\x18\n+\n\x04\x04.\x02\x04\x12\x04\xd8\x01\ - \x02\x1f\x1a\x1d\x20Original\x20issuance\x20timestamp\n\n\r\n\x05\x04.\ - \x02\x04\x05\x12\x04\xd8\x01\x02\x08\n\r\n\x05\x04.\x02\x04\x01\x12\x04\ - \xd8\x01\t\x1a\n\r\n\x05\x04.\x02\x04\x03\x12\x04\xd8\x01\x1d\x1e\n-\n\ - \x04\x04.\x02\x05\x12\x04\xda\x01\x02!\x1a\x1f\x20Original\x20expiration\ - \x20timestamp\n\n\r\n\x05\x04.\x02\x05\x05\x12\x04\xda\x01\x02\x08\n\r\n\ - \x05\x04.\x02\x05\x01\x12\x04\xda\x01\t\x1c\n\r\n\x05\x04.\x02\x05\x03\ - \x12\x04\xda\x01\x1f\x20\n.\n\x04\x04.\x02\x06\x12\x04\xdc\x01\x02\x19\ - \x1a\x20\x20Original\x20proof\x20data\x20(ZK-proof)\n\n\r\n\x05\x04.\x02\ - \x06\x05\x12\x04\xdc\x01\x02\x07\n\r\n\x05\x04.\x02\x06\x01\x12\x04\xdc\ - \x01\x08\x14\n\r\n\x05\x04.\x02\x06\x03\x12\x04\xdc\x01\x17\x18\n(\n\x04\ - \x04.\x02\x07\x12\x04\xde\x01\x02\x14\x1a\x1a\x20ZK-proof\x20original\ - \x20schema\n\n\r\n\x05\x04.\x02\x07\x05\x12\x04\xde\x01\x02\x08\n\r\n\ - \x05\x04.\x02\x07\x01\x12\x04\xde\x01\t\x0f\n\r\n\x05\x04.\x02\x07\x03\ - \x12\x04\xde\x01\x12\x13\nN\n\x04\x04.\x02\x08\x12\x04\xe0\x01\x02\"\x1a\ + \x0everificationId\x18\x01\x20\x01(\x0cR\x0everificationId\"Y\n\x17Query\ + RevokeVerification\x12&\n\x0everificationId\x18\x01\x20\x01(\x0cR\x0ever\ + ificationId\x12\x16\n\x06issuer\x18\x02\x20\x01(\x0cR\x06issuer\"!\n\x1f\ + QueryRevokeVerificationResponse\"\xbe\x01\n\x14QueryHasVerification\x12\ + \x20\n\x0buserAddress\x18\x01\x20\x01(\x0cR\x0buserAddress\x12*\n\x10ver\ + ificationType\x18\x02\x20\x01(\rR\x10verificationType\x120\n\x13expirati\ + onTimestamp\x18\x03\x20\x01(\rR\x13expirationTimestamp\x12&\n\x0eallowed\ + Issuers\x18\x04\x20\x03(\x0cR\x0eallowedIssuers\"H\n\x1cQueryHasVerifica\ + tionResponse\x12(\n\x0fhasVerification\x18\x01\x20\x01(\x08R\x0fhasVerif\ + ication\"b\n\x18QueryGetVerificationData\x12\x20\n\x0buserAddress\x18\ + \x01\x20\x01(\x0cR\x0buserAddress\x12$\n\rissuerAddress\x18\x02\x20\x01(\ + \x0cR\rissuerAddress\"\x9b\x03\n\x13VerificationDetails\x12*\n\x10verifi\ + cationType\x18\x01\x20\x01(\rR\x10verificationType\x12&\n\x0everificatio\ + nID\x18\x02\x20\x01(\x0cR\x0everificationID\x12$\n\rissuerAddress\x18\ + \x03\x20\x01(\x0cR\rissuerAddress\x12\x20\n\x0boriginChain\x18\x04\x20\ + \x01(\tR\x0boriginChain\x12,\n\x11issuanceTimestamp\x18\x05\x20\x01(\rR\ + \x11issuanceTimestamp\x120\n\x13expirationTimestamp\x18\x06\x20\x01(\rR\ + \x13expirationTimestamp\x12\"\n\x0coriginalData\x18\x07\x20\x01(\x0cR\ + \x0coriginalData\x12\x16\n\x06schema\x18\x08\x20\x01(\tR\x06schema\x122\ + \n\x14issuerVerificationId\x18\t\x20\x01(\tR\x14issuerVerificationId\x12\ + \x18\n\x07version\x18\n\x20\x01(\rR\x07version\"T\n\x20QueryGetVerificat\ + ionDataResponse\x120\n\x04data\x18\x01\x20\x03(\x0b2\x1c.ffi.ffi.Verific\ + ationDetailsR\x04data\"\x82\x01\n\x16QueryConvertCredential\x12&\n\x0eve\ + rificationId\x18\x01\x20\x01(\x0cR\x0everificationId\x12(\n\x0fholderPub\ + licKey\x18\x02\x20\x01(\x0cR\x0fholderPublicKey\x12\x16\n\x06caller\x18\ + \x03\x20\x01(\x0cR\x06caller\"\x20\n\x1eQueryConvertCredentialResponse\"\ + \x9a\r\n\rCosmosRequest\x12:\n\ngetAccount\x18\x01\x20\x01(\x0b2\x18.ffi\ + .ffi.QueryGetAccountH\0R\ngetAccount\x12=\n\x0bcontainsKey\x18\x02\x20\ + \x01(\x0b2\x19.ffi.ffi.QueryContainsKeyH\0R\x0bcontainsKey\x12@\n\x0bacc\ + ountCode\x18\x03\x20\x01(\x0b2\x1c.ffi.ffi.QueryGetAccountCodeH\0R\x0bac\ + countCode\x12>\n\x08codeHash\x18\x04\x20\x01(\x0b2\x20.ffi.ffi.QueryGetA\ + ccountCodeHashH\0R\x08codeHash\x12>\n\x08codeSize\x18\x05\x20\x01(\x0b2\ + \x20.ffi.ffi.QueryGetAccountCodeSizeH\0R\x08codeSize\x12G\n\x0bstorageCe\ + ll\x18\x06\x20\x01(\x0b2#.ffi.ffi.QueryGetAccountStorageCellH\0R\x0bstor\ + ageCell\x12O\n\x11insertAccountCode\x18\x07\x20\x01(\x0b2\x1f.ffi.ffi.Qu\ + eryInsertAccountCodeH\0R\x11insertAccountCode\x12O\n\x11insertStorageCel\ + l\x18\x08\x20\x01(\x0b2\x1f.ffi.ffi.QueryInsertStorageCellH\0R\x11insert\ + StorageCell\x12.\n\x06remove\x18\t\x20\x01(\x0b2\x14.ffi.ffi.QueryRemove\ + H\0R\x06remove\x12O\n\x11removeStorageCell\x18\n\x20\x01(\x0b2\x1f.ffi.f\ + fi.QueryRemoveStorageCellH\0R\x11removeStorageCell\x12C\n\rremoveStorage\ + \x18\x0b\x20\x01(\x0b2\x1b.ffi.ffi.QueryRemoveStorageH\0R\rremoveStorage\ + \x127\n\tblockHash\x18\x0c\x20\x01(\x0b2\x17.ffi.ffi.QueryBlockHashH\0R\ + \tblockHash\x12^\n\x16addVerificationDetails\x18\r\x20\x01(\x0b2$.ffi.ff\ + i.QueryAddVerificationDetailsH\0R\x16addVerificationDetails\x12I\n\x0fha\ + sVerification\x18\x0e\x20\x01(\x0b2\x1d.ffi.ffi.QueryHasVerificationH\0R\ + \x0fhasVerification\x12U\n\x13getVerificationData\x18\x0f\x20\x01(\x0b2!\ + .ffi.ffi.QueryGetVerificationDataH\0R\x13getVerificationData\x12X\n\x14i\ + nsertAccountBalance\x18\x10\x20\x01(\x0b2\".ffi.ffi.QueryInsertAccountBa\ + lanceH\0R\x14insertAccountBalance\x12R\n\x12insertAccountNonce\x18\x11\ + \x20\x01(\x0b2\x20.ffi.ffi.QueryInsertAccountNonceH\0R\x12insertAccountN\ + once\x12L\n\x10issuanceTreeRoot\x18\x12\x20\x01(\x0b2\x1e.ffi.ffi.QueryI\ + ssuanceTreeRootH\0R\x10issuanceTreeRoot\x12R\n\x12revocationTreeRoot\x18\ + \x13\x20\x01(\x0b2\x20.ffi.ffi.QueryRevocationTreeRootH\0R\x12revocation\ + TreeRoot\x12d\n\x18addVerificationDetailsV2\x18\x14\x20\x01(\x0b2&.ffi.f\ + fi.QueryAddVerificationDetailsV2H\0R\x18addVerificationDetailsV2\x12R\n\ + \x12revokeVerification\x18\x15\x20\x01(\x0b2\x20.ffi.ffi.QueryRevokeVeri\ + ficationH\0R\x12revokeVerification\x12O\n\x11convertCredential\x18\x16\ + \x20\x01(\x0b2\x1f.ffi.ffi.QueryConvertCredentialH\0R\x11convertCredenti\ + alB\x05\n\x03req\"\xa0\x02\n\x0fSGXVMCallParams\x12\x12\n\x04from\x18\ + \x01\x20\x01(\x0cR\x04from\x12\x0e\n\x02to\x18\x02\x20\x01(\x0cR\x02to\ + \x12\x12\n\x04data\x18\x03\x20\x01(\x0cR\x04data\x12\x1a\n\x08gasLimit\ + \x18\x04\x20\x01(\x04R\x08gasLimit\x12\x1a\n\x08gasPrice\x18\x05\x20\x01\ + (\x0cR\x08gasPrice\x12\x14\n\x05value\x18\x06\x20\x01(\x0cR\x05value\x12\ + 7\n\naccessList\x18\x07\x20\x03(\x0b2\x17.ffi.ffi.AccessListItemR\nacces\ + sList\x12\x16\n\x06commit\x18\x08\x20\x01(\x08R\x06commit\x12\x14\n\x05n\ + once\x18\t\x20\x01(\x04R\x05nonce\x12\x20\n\x0bunencrypted\x18\n\x20\x01\ + (\x08R\x0bunencrypted\"\xf0\x01\n\x11SGXVMCreateParams\x12\x12\n\x04from\ + \x18\x01\x20\x01(\x0cR\x04from\x12\x12\n\x04data\x18\x02\x20\x01(\x0cR\ + \x04data\x12\x1a\n\x08gasLimit\x18\x03\x20\x01(\x04R\x08gasLimit\x12\x1a\ + \n\x08gasPrice\x18\x04\x20\x01(\x0cR\x08gasPrice\x12\x14\n\x05value\x18\ + \x05\x20\x01(\x0cR\x05value\x127\n\naccessList\x18\x06\x20\x03(\x0b2\x17\ + .ffi.ffi.AccessListItemR\naccessList\x12\x16\n\x06commit\x18\x07\x20\x01\ + (\x08R\x06commit\x12\x14\n\x05nonce\x18\x08\x20\x01(\x04R\x05nonce\"{\n\ + \x10SGXVMCallRequest\x120\n\x06params\x18\x01\x20\x01(\x0b2\x18.ffi.ffi.\ + SGXVMCallParamsR\x06params\x125\n\x07context\x18\x02\x20\x01(\x0b2\x1b.f\ + fi.ffi.TransactionContextR\x07context\"\x7f\n\x12SGXVMCreateRequest\x122\ + \n\x06params\x18\x01\x20\x01(\x0b2\x1a.ffi.ffi.SGXVMCreateParamsR\x06par\ + ams\x125\n\x07context\x18\x02\x20\x01(\x0b2\x1b.ffi.ffi.TransactionConte\ + xtR\x07context\"8\n\x14NodePublicKeyRequest\x12\x20\n\x0bblockNumber\x18\ + \x01\x20\x01(\x04R\x0bblockNumber\"5\n\x15NodePublicKeyResponse\x12\x1c\ + \n\tpublicKey\x18\x01\x20\x01(\x0cR\tpublicKey\"y\n\tEpochData\x12\x20\n\ + \x0bepochNumber\x18\x01\x20\x01(\rR\x0bepochNumber\x12$\n\rstartingBlock\ + \x18\x02\x20\x01(\x04R\rstartingBlock\x12$\n\rnodePublicKey\x18\x03\x20\ + \x01(\x0cR\rnodePublicKey\"@\n\x12ListEpochsResponse\x12*\n\x06epochs\ + \x18\x01\x20\x03(\x0b2\x12.ffi.ffi.EpochDataR\x06epochs\"\xe4\x01\n\nFFI\ + Request\x12=\n\x0bcallRequest\x18\x01\x20\x01(\x0b2\x19.ffi.ffi.SGXVMCal\ + lRequestH\0R\x0bcallRequest\x12C\n\rcreateRequest\x18\x02\x20\x01(\x0b2\ + \x1b.ffi.ffi.SGXVMCreateRequestH\0R\rcreateRequest\x12K\n\x10publicKeyRe\ + quest\x18\x03\x20\x01(\x0b2\x1d.ffi.ffi.NodePublicKeyRequestH\0R\x10publ\ + icKeyRequestB\x05\n\x03reqB&Z$github.com/SigmaGmbH/librustgo/typesJ\xf9`\ + \n\x07\x12\x05\0\0\xcd\x02\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\ + \x01\x02\x12\x03\x02\0\x10\n\x08\n\x01\x08\x12\x03\x04\0;\n\t\n\x02\x08\ + \x0b\x12\x03\x04\0;\n\x1d\n\x02\x04\0\x12\x04\x08\0\x0b\x012\x11\x20Gene\ + ral\x20request\n\n\n\n\x03\x04\0\x01\x12\x03\x08\x08\x16\n\x0b\n\x04\x04\ + \0\x02\0\x12\x03\t\x02!\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\t\x02\n\n\ + \x0c\n\x05\x04\0\x02\0\x05\x12\x03\t\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x01\ + \x12\x03\t\x11\x1c\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\t\x1f\x20\n\x0b\n\ + \x04\x04\0\x02\x01\x12\x03\n\x02\x14\n\x0c\n\x05\x04\0\x02\x01\x05\x12\ + \x03\n\x02\x07\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\n\x08\x0f\n\x0c\n\ + \x05\x04\0\x02\x01\x03\x12\x03\n\x12\x13\n\n\n\x02\x04\x01\x12\x04\r\0\ + \x14\x01\n\n\n\x03\x04\x01\x01\x12\x03\r\x08\x17\n\x0b\n\x04\x04\x01\x02\ + \0\x12\x03\x0e\x02\x11\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x0e\x02\x07\ + \n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x0e\x08\x0c\n\x0c\n\x05\x04\x01\ + \x02\0\x03\x12\x03\x0e\x0f\x10\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\x0f\ + \x02\x0f\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\x0f\x02\x07\n\x0c\n\x05\ + \x04\x01\x02\x01\x01\x12\x03\x0f\x08\n\n\x0c\n\x05\x04\x01\x02\x01\x03\ + \x12\x03\x0f\r\x0e\n\x0b\n\x04\x04\x01\x02\x02\x12\x03\x10\x02\x11\n\x0c\ + \n\x05\x04\x01\x02\x02\x05\x12\x03\x10\x02\x07\n\x0c\n\x05\x04\x01\x02\ + \x02\x01\x12\x03\x10\x08\x0c\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03\x10\ + \x0f\x10\n\x0b\n\x04\x04\x01\x02\x03\x12\x03\x11\x02\x16\n\x0c\n\x05\x04\ + \x01\x02\x03\x05\x12\x03\x11\x02\x08\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\ + \x03\x11\t\x11\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03\x11\x14\x15\n\x0b\ + \n\x04\x04\x01\x02\x04\x12\x03\x12\x02\x12\n\x0c\n\x05\x04\x01\x02\x04\ + \x05\x12\x03\x12\x02\x07\n\x0c\n\x05\x04\x01\x02\x04\x01\x12\x03\x12\x08\ + \r\n\x0c\n\x05\x04\x01\x02\x04\x03\x12\x03\x12\x10\x11\n\x0b\n\x04\x04\ + \x01\x02\x05\x12\x03\x13\x02)\n\x0c\n\x05\x04\x01\x02\x05\x04\x12\x03\ + \x13\x02\n\n\x0c\n\x05\x04\x01\x02\x05\x06\x12\x03\x13\x0b\x19\n\x0c\n\ + \x05\x04\x01\x02\x05\x01\x12\x03\x13\x1a$\n\x0c\n\x05\x04\x01\x02\x05\ + \x03\x12\x03\x13'(\n\n\n\x02\x04\x02\x12\x04\x16\0\x1e\x01\n\n\n\x03\x04\ + \x02\x01\x12\x03\x16\x08\x1a\n\x0b\n\x04\x04\x02\x02\0\x12\x03\x17\x02\ + \x16\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\x17\x02\x08\n\x0c\n\x05\x04\ + \x02\x02\0\x01\x12\x03\x17\t\x11\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\ + \x17\x14\x15\n\x0b\n\x04\x04\x02\x02\x01\x12\x03\x18\x02\x16\n\x0c\n\x05\ + \x04\x02\x02\x01\x05\x12\x03\x18\x02\x07\n\x0c\n\x05\x04\x02\x02\x01\x01\ + \x12\x03\x18\x08\x11\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03\x18\x14\x15\ + \n\x0b\n\x04\x04\x02\x02\x02\x12\x03\x19\x02\x17\n\x0c\n\x05\x04\x02\x02\ + \x02\x05\x12\x03\x19\x02\x08\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03\x19\ + \t\x12\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03\x19\x15\x16\n\x0b\n\x04\ + \x04\x02\x02\x03\x12\x03\x1a\x02\x1d\n\x0c\n\x05\x04\x02\x02\x03\x05\x12\ + \x03\x1a\x02\x08\n\x0c\n\x05\x04\x02\x02\x03\x01\x12\x03\x1a\t\x18\n\x0c\ + \n\x05\x04\x02\x02\x03\x03\x12\x03\x1a\x1b\x1c\n\x0b\n\x04\x04\x02\x02\ + \x04\x12\x03\x1b\x02#\n\x0c\n\x05\x04\x02\x02\x04\x05\x12\x03\x1b\x02\ + \x07\n\x0c\n\x05\x04\x02\x02\x04\x01\x12\x03\x1b\x08\x1e\n\x0c\n\x05\x04\ + \x02\x02\x04\x03\x12\x03\x1b!\"\n\x0b\n\x04\x04\x02\x02\x05\x12\x03\x1c\ + \x02\x1b\n\x0c\n\x05\x04\x02\x02\x05\x05\x12\x03\x1c\x02\x07\n\x0c\n\x05\ + \x04\x02\x02\x05\x01\x12\x03\x1c\x08\x16\n\x0c\n\x05\x04\x02\x02\x05\x03\ + \x12\x03\x1c\x19\x1a\n\x0b\n\x04\x04\x02\x02\x06\x12\x03\x1d\x02\x1a\n\ + \x0c\n\x05\x04\x02\x02\x06\x05\x12\x03\x1d\x02\x08\n\x0c\n\x05\x04\x02\ + \x02\x06\x01\x12\x03\x1d\t\x15\n\x0c\n\x05\x04\x02\x02\x06\x03\x12\x03\ + \x1d\x18\x19\n\n\n\x02\x04\x03\x12\x04\x20\0#\x01\n\n\n\x03\x04\x03\x01\ + \x12\x03\x20\x08\x20\n\x0b\n\x04\x04\x03\x02\0\x12\x03!\x02\x1e\n\x0c\n\ + \x05\x04\x03\x02\0\x06\x12\x03!\x02\x11\n\x0c\n\x05\x04\x03\x02\0\x01\ + \x12\x03!\x12\x19\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03!\x1c\x1d\n\x0b\n\ + \x04\x04\x03\x02\x01\x12\x03\"\x02$\n\x0c\n\x05\x04\x03\x02\x01\x06\x12\ + \x03\"\x02\x14\n\x0c\n\x05\x04\x03\x02\x01\x01\x12\x03\"\x15\x1f\n\x0c\n\ + \x05\x04\x03\x02\x01\x03\x12\x03\"\"#\n\n\n\x02\x04\x04\x12\x04%\00\x01\ + \n\n\n\x03\x04\x04\x01\x12\x03%\x08!\nZ\n\x04\x04\x04\x02\0\x12\x03(\x02\ + \x18\x1aM\x20logs\x20contains\x20the\x20transaction\x20hash\x20and\x20th\ + e\x20proto-compatible\x20ethereum\n\x20logs.\n\n\x0c\n\x05\x04\x04\x02\0\ + \x04\x12\x03(\x02\n\n\x0c\n\x05\x04\x04\x02\0\x06\x12\x03(\x0b\x0e\n\x0c\ + \n\x05\x04\x04\x02\0\x01\x12\x03(\x0f\x13\n\x0c\n\x05\x04\x04\x02\0\x03\ + \x12\x03(\x16\x17\n\\\n\x04\x04\x04\x02\x01\x12\x03+\x02\x10\x1aO\x20ret\ + urned\x20data\x20from\x20evm\x20function\x20(result\x20or\x20data\x20sup\ + plied\x20with\x20revert\n\x20opcode)\n\n\x0c\n\x05\x04\x04\x02\x01\x05\ + \x12\x03+\x02\x07\n\x0c\n\x05\x04\x04\x02\x01\x01\x12\x03+\x08\x0b\n\x0c\ + \n\x05\x04\x04\x02\x01\x03\x12\x03+\x0e\x0f\n=\n\x04\x04\x04\x02\x02\x12\ + \x03-\x02\x16\x1a0\x20vm\x20error\x20is\x20the\x20error\x20returned\x20b\ + y\x20vm\x20execution\n\n\x0c\n\x05\x04\x04\x02\x02\x05\x12\x03-\x02\x08\ + \n\x0c\n\x05\x04\x04\x02\x02\x01\x12\x03-\t\x11\n\x0c\n\x05\x04\x04\x02\ + \x02\x03\x12\x03-\x14\x15\n.\n\x04\x04\x04\x02\x03\x12\x03/\x02\x16\x1a!\ + \x20gas\x20consumed\x20by\x20the\x20transaction\n\n\x0c\n\x05\x04\x04\ + \x02\x03\x05\x12\x03/\x02\x08\n\x0c\n\x05\x04\x04\x02\x03\x01\x12\x03/\t\ + \x11\n\x0c\n\x05\x04\x04\x02\x03\x03\x12\x03/\x14\x15\nc\n\x02\x04\x05\ + \x12\x034\0\"\x1aX\x20Topic\x20represents\x2032-byte\x20words\x20that\ + \x20is\x20used\x20to\x20describe\x20what\xe2\x80\x99s\x20going\x20on\x20\ + in\x20an\n\x20event\n\n\n\n\x03\x04\x05\x01\x12\x034\x08\r\n\x0b\n\x04\ + \x04\x05\x02\0\x12\x034\x10\x20\n\x0c\n\x05\x04\x05\x02\0\x05\x12\x034\ + \x10\x15\n\x0c\n\x05\x04\x05\x02\0\x01\x12\x034\x16\x1b\n\x0c\n\x05\x04\ + \x05\x02\0\x03\x12\x034\x1e\x1f\n\x81\x01\n\x02\x04\x06\x12\x049\0@\x01\ + \x1au\x20Log\x20represents\x20an\x20protobuf\x20compatible\x20Ethereum\ + \x20Log\x20that\x20defines\x20a\x20contract\n\x20log\x20event.\n\x20Copi\ + ed\x20from\x20`devnet/proto``\n\n\n\n\x03\x04\x06\x01\x12\x039\x08\x0b\n\ + ?\n\x04\x04\x06\x02\0\x12\x03;\x02\x14\x1a2\x20address\x20of\x20the\x20c\ + ontract\x20that\x20generated\x20the\x20event\n\n\x0c\n\x05\x04\x06\x02\0\ + \x05\x12\x03;\x02\x07\n\x0c\n\x05\x04\x06\x02\0\x01\x12\x03;\x08\x0f\n\ + \x0c\n\x05\x04\x06\x02\0\x03\x12\x03;\x12\x13\n7\n\x04\x04\x06\x02\x01\ + \x12\x03=\x02\x1c\x1a*\x20list\x20of\x20topics\x20provided\x20by\x20the\ + \x20contract.\n\n\x0c\n\x05\x04\x06\x02\x01\x04\x12\x03=\x02\n\n\x0c\n\ + \x05\x04\x06\x02\x01\x06\x12\x03=\x0b\x10\n\x0c\n\x05\x04\x06\x02\x01\ + \x01\x12\x03=\x11\x17\n\x0c\n\x05\x04\x06\x02\x01\x03\x12\x03=\x1a\x1b\n\ + <\n\x04\x04\x06\x02\x02\x12\x03?\x02\x11\x1a/\x20supplied\x20by\x20the\ + \x20contract,\x20usually\x20ABI-encoded\n\n\x0c\n\x05\x04\x06\x02\x02\ + \x05\x12\x03?\x02\x07\n\x0c\n\x05\x04\x06\x02\x02\x01\x12\x03?\x08\x0c\n\ + \x0c\n\x05\x04\x06\x02\x02\x03\x12\x03?\x0f\x10\nX\n\x02\x04\x07\x12\x04\ + C\0F\x01\x1aL\x20Request\x20for\x20account\x20code\x20(smart\x20contract\ + \x20deployed\x20behind\x20provided\x20address)\n\n\n\n\x03\x04\x07\x01\ + \x12\x03C\x08\x17\n*\n\x04\x04\x07\x02\0\x12\x03E\x02\x14\x1a\x1d\x2020\ + \x20bytes\x20of\x20account\x20address\n\n\x0c\n\x05\x04\x07\x02\0\x05\ + \x12\x03E\x02\x07\n\x0c\n\x05\x04\x07\x02\0\x01\x12\x03E\x08\x0f\n\x0c\n\ + \x05\x04\x07\x02\0\x03\x12\x03E\x12\x13\n'\n\x02\x04\x08\x12\x04I\0N\x01\ + \x1a\x1b\x20Response\x20for\x20account\x20code\n\n\n\n\x03\x04\x08\x01\ + \x12\x03I\x08\x1f\nb\n\x04\x04\x08\x02\0\x12\x03L\x02\x14\x1aU\x20Since\ + \x20both\x20fields\x20are\x20256-bit\x20unsigned\x20integer,\x20we\x20en\ + code\x20them\x20as\n\x20big-endian\x20bytes\n\n\x0c\n\x05\x04\x08\x02\0\ + \x05\x12\x03L\x02\x07\n\x0c\n\x05\x04\x08\x02\0\x01\x12\x03L\x08\x0f\n\ + \x0c\n\x05\x04\x08\x02\0\x03\x12\x03L\x12\x13\n\x0b\n\x04\x04\x08\x02\ + \x01\x12\x03M\x02\x13\n\x0c\n\x05\x04\x08\x02\x01\x05\x12\x03M\x02\x08\n\ + \x0c\n\x05\x04\x08\x02\x01\x01\x12\x03M\t\x0e\n\x0c\n\x05\x04\x08\x02\ + \x01\x03\x12\x03M\x11\x12\n\n\n\x02\x04\t\x12\x04P\0S\x01\n\n\n\x03\x04\ + \t\x01\x12\x03P\x08!\n\x0b\n\x04\x04\t\x02\0\x12\x03Q\x02\x14\n\x0c\n\ + \x05\x04\t\x02\0\x05\x12\x03Q\x02\x07\n\x0c\n\x05\x04\t\x02\0\x01\x12\ + \x03Q\x08\x0f\n\x0c\n\x05\x04\t\x02\0\x03\x12\x03Q\x12\x13\n\x0b\n\x04\ + \x04\t\x02\x01\x12\x03R\x02\x14\n\x0c\n\x05\x04\t\x02\x01\x05\x12\x03R\ + \x02\x07\n\x0c\n\x05\x04\t\x02\x01\x01\x12\x03R\x08\x0f\n\x0c\n\x05\x04\ + \t\x02\x01\x03\x12\x03R\x12\x13\n\t\n\x02\x04\n\x12\x03T\0,\n\n\n\x03\ + \x04\n\x01\x12\x03T\x08)\n\n\n\x02\x04\x0b\x12\x04V\0Y\x01\n\n\n\x03\x04\ + \x0b\x01\x12\x03V\x08\x1f\n\x0b\n\x04\x04\x0b\x02\0\x12\x03W\x02\x14\n\ + \x0c\n\x05\x04\x0b\x02\0\x05\x12\x03W\x02\x07\n\x0c\n\x05\x04\x0b\x02\0\ + \x01\x12\x03W\x08\x0f\n\x0c\n\x05\x04\x0b\x02\0\x03\x12\x03W\x12\x13\n\ + \x0b\n\x04\x04\x0b\x02\x01\x12\x03X\x02\x13\n\x0c\n\x05\x04\x0b\x02\x01\ + \x05\x12\x03X\x02\x08\n\x0c\n\x05\x04\x0b\x02\x01\x01\x12\x03X\t\x0e\n\ + \x0c\n\x05\x04\x0b\x02\x01\x03\x12\x03X\x11\x12\n\t\n\x02\x04\x0c\x12\ + \x03Z\0)\n\n\n\x03\x04\x0c\x01\x12\x03Z\x08'\n\t\n\x02\x04\r\x12\x03\\\0\ + +\n\n\n\x03\x04\r\x01\x12\x03\\\x08\x18\n\x0b\n\x04\x04\r\x02\0\x12\x03\ + \\\x1b)\n\x0c\n\x05\x04\r\x02\0\x05\x12\x03\\\x1b\x20\n\x0c\n\x05\x04\r\ + \x02\0\x01\x12\x03\\!$\n\x0c\n\x05\x04\r\x02\0\x03\x12\x03\\'(\n\t\n\x02\ + \x04\x0e\x12\x03^\07\n\n\n\x03\x04\x0e\x01\x12\x03^\x08\x20\n\x0b\n\x04\ + \x04\x0e\x02\0\x12\x03^#5\n\x0c\n\x05\x04\x0e\x02\0\x05\x12\x03^#'\n\x0c\ + \n\x05\x04\x0e\x02\0\x01\x12\x03^(0\n\x0c\n\x05\x04\x0e\x02\0\x03\x12\ + \x03^34\n\n\n\x02\x04\x0f\x12\x04`\0c\x01\n\n\n\x03\x04\x0f\x01\x12\x03`\ + \x08\"\n\x0b\n\x04\x04\x0f\x02\0\x12\x03a\x02\x14\n\x0c\n\x05\x04\x0f\ + \x02\0\x05\x12\x03a\x02\x07\n\x0c\n\x05\x04\x0f\x02\0\x01\x12\x03a\x08\ + \x0f\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03a\x12\x13\n\x0b\n\x04\x04\x0f\ + \x02\x01\x12\x03b\x02\x12\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03b\x02\ + \x07\n\x0c\n\x05\x04\x0f\x02\x01\x01\x12\x03b\x08\r\n\x0c\n\x05\x04\x0f\ + \x02\x01\x03\x12\x03b\x10\x11\n\t\n\x02\x04\x10\x12\x03e\0?\n\n\n\x03\ + \x04\x10\x01\x12\x03e\x08*\n\x0b\n\x04\x04\x10\x02\0\x12\x03e-=\n\x0c\n\ + \x05\x04\x10\x02\0\x05\x12\x03e-2\n\x0c\n\x05\x04\x10\x02\0\x01\x12\x03e\ + 38\n\x0c\n\x05\x04\x10\x02\0\x03\x12\x03e;<\n\t\n\x02\x04\x11\x12\x03g\0\ + 2\n\n\n\x03\x04\x11\x01\x12\x03g\x08\x1b\n\x0b\n\x04\x04\x11\x02\0\x12\ + \x03g\x1e0\n\x0c\n\x05\x04\x11\x02\0\x05\x12\x03g\x1e#\n\x0c\n\x05\x04\ + \x11\x02\0\x01\x12\x03g$+\n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03g./\n\t\n\ + \x02\x04\x12\x12\x03i\07\n\n\n\x03\x04\x12\x01\x12\x03i\x08#\n\x0b\n\x04\ + \x04\x12\x02\0\x12\x03i&5\n\x0c\n\x05\x04\x12\x02\0\x05\x12\x03i&+\n\x0c\ + \n\x05\x04\x12\x02\0\x01\x12\x03i,0\n\x0c\n\x05\x04\x12\x02\0\x03\x12\ + \x03i34\n\t\n\x02\x04\x13\x12\x03k\06\n\n\n\x03\x04\x13\x01\x12\x03k\x08\ + \x1f\n\x0b\n\x04\x04\x13\x02\0\x12\x03k\"4\n\x0c\n\x05\x04\x13\x02\0\x05\ + \x12\x03k\"'\n\x0c\n\x05\x04\x13\x02\0\x01\x12\x03k(/\n\x0c\n\x05\x04\ + \x13\x02\0\x03\x12\x03k23\n\t\n\x02\x04\x14\x12\x03l\0<\n\n\n\x03\x04\ + \x14\x01\x12\x03l\x08'\n\x0b\n\x04\x04\x14\x02\0\x12\x03l*:\n\x0c\n\x05\ + \x04\x14\x02\0\x05\x12\x03l*0\n\x0c\n\x05\x04\x14\x02\0\x01\x12\x03l15\n\ + \x0c\n\x05\x04\x14\x02\0\x03\x12\x03l89\n\t\n\x02\x04\x15\x12\x03n\06\n\ + \n\n\x03\x04\x15\x01\x12\x03n\x08\x1f\n\x0b\n\x04\x04\x15\x02\0\x12\x03n\ + \"4\n\x0c\n\x05\x04\x15\x02\0\x05\x12\x03n\"'\n\x0c\n\x05\x04\x15\x02\0\ + \x01\x12\x03n(/\n\x0c\n\x05\x04\x15\x02\0\x03\x12\x03n23\n\t\n\x02\x04\ + \x16\x12\x03o\0;\n\n\n\x03\x04\x16\x01\x12\x03o\x08'\n\x0b\n\x04\x04\x16\ + \x02\0\x12\x03o*9\n\x0c\n\x05\x04\x16\x02\0\x05\x12\x03o*/\n\x0c\n\x05\ + \x04\x16\x02\0\x01\x12\x03o04\n\x0c\n\x05\x04\x16\x02\0\x03\x12\x03o78\n\ + \n\n\x02\x04\x17\x12\x04q\0t\x01\n\n\n\x03\x04\x17\x01\x12\x03q\x08\x1e\ + \n\x0b\n\x04\x04\x17\x02\0\x12\x03r\x02\x14\n\x0c\n\x05\x04\x17\x02\0\ + \x05\x12\x03r\x02\x07\n\x0c\n\x05\x04\x17\x02\0\x01\x12\x03r\x08\x0f\n\ + \x0c\n\x05\x04\x17\x02\0\x03\x12\x03r\x12\x13\n\x0b\n\x04\x04\x17\x02\ + \x01\x12\x03s\x02\x11\n\x0c\n\x05\x04\x17\x02\x01\x05\x12\x03s\x02\x07\n\ + \x0c\n\x05\x04\x17\x02\x01\x01\x12\x03s\x08\x0c\n\x0c\n\x05\x04\x17\x02\ + \x01\x03\x12\x03s\x0f\x10\n\t\n\x02\x04\x18\x12\x03v\0)\n\n\n\x03\x04\ + \x18\x01\x12\x03v\x08&\n\n\n\x02\x04\x19\x12\x04x\0|\x01\n\n\n\x03\x04\ + \x19\x01\x12\x03x\x08\x1e\n\x0b\n\x04\x04\x19\x02\0\x12\x03y\x02\x14\n\ + \x0c\n\x05\x04\x19\x02\0\x05\x12\x03y\x02\x07\n\x0c\n\x05\x04\x19\x02\0\ + \x01\x12\x03y\x08\x0f\n\x0c\n\x05\x04\x19\x02\0\x03\x12\x03y\x12\x13\n\ + \x0b\n\x04\x04\x19\x02\x01\x12\x03z\x02\x12\n\x0c\n\x05\x04\x19\x02\x01\ + \x05\x12\x03z\x02\x07\n\x0c\n\x05\x04\x19\x02\x01\x01\x12\x03z\x08\r\n\ + \x0c\n\x05\x04\x19\x02\x01\x03\x12\x03z\x10\x11\n\x0b\n\x04\x04\x19\x02\ + \x02\x12\x03{\x02\x12\n\x0c\n\x05\x04\x19\x02\x02\x05\x12\x03{\x02\x07\n\ + \x0c\n\x05\x04\x19\x02\x02\x01\x12\x03{\x08\r\n\x0c\n\x05\x04\x19\x02\ + \x02\x03\x12\x03{\x10\x11\n\t\n\x02\x04\x1a\x12\x03~\0)\n\n\n\x03\x04\ + \x1a\x01\x12\x03~\x08&\n\n\n\x02\x04\x1b\x12\x04\x80\x01\0*\n\x0b\n\x03\ + \x04\x1b\x01\x12\x04\x80\x01\x08\x13\n\x0c\n\x04\x04\x1b\x02\0\x12\x04\ + \x80\x01\x16(\n\r\n\x05\x04\x1b\x02\0\x05\x12\x04\x80\x01\x16\x1b\n\r\n\ + \x05\x04\x1b\x02\0\x01\x12\x04\x80\x01\x1c#\n\r\n\x05\x04\x1b\x02\0\x03\ + \x12\x04\x80\x01&'\n\n\n\x02\x04\x1c\x12\x04\x82\x01\0\x1e\n\x0b\n\x03\ + \x04\x1c\x01\x12\x04\x82\x01\x08\x1b\n\x0c\n\x02\x04\x1d\x12\x06\x84\x01\ + \0\x87\x01\x01\n\x0b\n\x03\x04\x1d\x01\x12\x04\x84\x01\x08\x1e\n\x0c\n\ + \x04\x04\x1d\x02\0\x12\x04\x85\x01\x02\x14\n\r\n\x05\x04\x1d\x02\0\x05\ + \x12\x04\x85\x01\x02\x07\n\r\n\x05\x04\x1d\x02\0\x01\x12\x04\x85\x01\x08\ + \x0f\n\r\n\x05\x04\x1d\x02\0\x03\x12\x04\x85\x01\x12\x13\n\x0c\n\x04\x04\ + \x1d\x02\x01\x12\x04\x86\x01\x02\x12\n\r\n\x05\x04\x1d\x02\x01\x05\x12\ + \x04\x86\x01\x02\x07\n\r\n\x05\x04\x1d\x02\x01\x01\x12\x04\x86\x01\x08\r\ + \n\r\n\x05\x04\x1d\x02\x01\x03\x12\x04\x86\x01\x10\x11\n\n\n\x02\x04\x1e\ + \x12\x04\x89\x01\0)\n\x0b\n\x03\x04\x1e\x01\x12\x04\x89\x01\x08&\n\n\n\ + \x02\x04\x1f\x12\x04\x8b\x01\01\n\x0b\n\x03\x04\x1f\x01\x12\x04\x8b\x01\ + \x08\x1a\n\x0c\n\x04\x04\x1f\x02\0\x12\x04\x8b\x01\x1d/\n\r\n\x05\x04\ + \x1f\x02\0\x05\x12\x04\x8b\x01\x1d\"\n\r\n\x05\x04\x1f\x02\0\x01\x12\x04\ + \x8b\x01#*\n\r\n\x05\x04\x1f\x02\0\x03\x12\x04\x8b\x01-.\n\n\n\x02\x04\ + \x20\x12\x04\x8d\x01\0%\n\x0b\n\x03\x04\x20\x01\x12\x04\x8d\x01\x08\"\n\ + \n\n\x02\x04!\x12\x04\x8f\x01\0,\n\x0b\n\x03\x04!\x01\x12\x04\x8f\x01\ + \x08\x16\n\x0c\n\x04\x04!\x02\0\x12\x04\x8f\x01\x19*\n\r\n\x05\x04!\x02\ + \0\x05\x12\x04\x8f\x01\x19\x1e\n\r\n\x05\x04!\x02\0\x01\x12\x04\x8f\x01\ + \x1f%\n\r\n\x05\x04!\x02\0\x03\x12\x04\x8f\x01()\n\n\n\x02\x04\"\x12\x04\ + \x90\x01\02\n\x0b\n\x03\x04\"\x01\x12\x04\x90\x01\x08\x1e\n\x0c\n\x04\ + \x04\"\x02\0\x12\x04\x90\x01!0\n\r\n\x05\x04\"\x02\0\x05\x12\x04\x90\x01\ + !&\n\r\n\x05\x04\"\x02\0\x01\x12\x04\x90\x01'+\n\r\n\x05\x04\"\x02\0\x03\ + \x12\x04\x90\x01./\n\n\n\x02\x04#\x12\x04\x92\x01\0\x20\n\x0b\n\x03\x04#\ + \x01\x12\x04\x92\x01\x08\x1d\n\x0c\n\x02\x04$\x12\x06\x93\x01\0\x95\x01\ + \x01\n\x0b\n\x03\x04$\x01\x12\x04\x93\x01\x08%\n\x0c\n\x04\x04$\x02\0\ + \x12\x04\x94\x01\x02\x11\n\r\n\x05\x04$\x02\0\x05\x12\x04\x94\x01\x02\ + \x07\n\r\n\x05\x04$\x02\0\x01\x12\x04\x94\x01\x08\x0c\n\r\n\x05\x04$\x02\ + \0\x03\x12\x04\x94\x01\x0f\x10\n\n\n\x02\x04%\x12\x04\x97\x01\0\"\n\x0b\ + \n\x03\x04%\x01\x12\x04\x97\x01\x08\x1f\n\x0c\n\x02\x04&\x12\x06\x98\x01\ + \0\x9a\x01\x01\n\x0b\n\x03\x04&\x01\x12\x04\x98\x01\x08'\n\x0c\n\x04\x04\ + &\x02\0\x12\x04\x99\x01\x02\x11\n\r\n\x05\x04&\x02\0\x05\x12\x04\x99\x01\ + \x02\x07\n\r\n\x05\x04&\x02\0\x01\x12\x04\x99\x01\x08\x0c\n\r\n\x05\x04&\ + \x02\0\x03\x12\x04\x99\x01\x0f\x10\n\x0c\n\x02\x04'\x12\x06\x9c\x01\0\ + \xa7\x01\x01\n\x0b\n\x03\x04'\x01\x12\x04\x9c\x01\x08#\n\x0c\n\x04\x04'\ + \x02\0\x12\x04\x9d\x01\x02\x18\n\r\n\x05\x04'\x02\0\x05\x12\x04\x9d\x01\ + \x02\x07\n\r\n\x05\x04'\x02\0\x01\x12\x04\x9d\x01\x08\x13\n\r\n\x05\x04'\ + \x02\0\x03\x12\x04\x9d\x01\x16\x17\n\x0c\n\x04\x04'\x02\x01\x12\x04\x9e\ + \x01\x02\x1a\n\r\n\x05\x04'\x02\x01\x05\x12\x04\x9e\x01\x02\x07\n\r\n\ + \x05\x04'\x02\x01\x01\x12\x04\x9e\x01\x08\x15\n\r\n\x05\x04'\x02\x01\x03\ + \x12\x04\x9e\x01\x18\x19\n\x0c\n\x04\x04'\x02\x02\x12\x04\x9f\x01\x02\ + \x19\n\r\n\x05\x04'\x02\x02\x05\x12\x04\x9f\x01\x02\x08\n\r\n\x05\x04'\ + \x02\x02\x01\x12\x04\x9f\x01\t\x14\n\r\n\x05\x04'\x02\x02\x03\x12\x04\ + \x9f\x01\x17\x18\n\x0c\n\x04\x04'\x02\x03\x12\x04\xa0\x01\x02\x1e\n\r\n\ + \x05\x04'\x02\x03\x05\x12\x04\xa0\x01\x02\x08\n\r\n\x05\x04'\x02\x03\x01\ + \x12\x04\xa0\x01\t\x19\n\r\n\x05\x04'\x02\x03\x03\x12\x04\xa0\x01\x1c\ + \x1d\n\x0c\n\x04\x04'\x02\x04\x12\x04\xa1\x01\x02\x1f\n\r\n\x05\x04'\x02\ + \x04\x05\x12\x04\xa1\x01\x02\x08\n\r\n\x05\x04'\x02\x04\x01\x12\x04\xa1\ + \x01\t\x1a\n\r\n\x05\x04'\x02\x04\x03\x12\x04\xa1\x01\x1d\x1e\n\x0c\n\ + \x04\x04'\x02\x05\x12\x04\xa2\x01\x02!\n\r\n\x05\x04'\x02\x05\x05\x12\ + \x04\xa2\x01\x02\x08\n\r\n\x05\x04'\x02\x05\x01\x12\x04\xa2\x01\t\x1c\n\ + \r\n\x05\x04'\x02\x05\x03\x12\x04\xa2\x01\x1f\x20\n\x0c\n\x04\x04'\x02\ + \x06\x12\x04\xa3\x01\x02\x16\n\r\n\x05\x04'\x02\x06\x05\x12\x04\xa3\x01\ + \x02\x07\n\r\n\x05\x04'\x02\x06\x01\x12\x04\xa3\x01\x08\x11\n\r\n\x05\ + \x04'\x02\x06\x03\x12\x04\xa3\x01\x14\x15\n\x0c\n\x04\x04'\x02\x07\x12\ + \x04\xa4\x01\x02\x14\n\r\n\x05\x04'\x02\x07\x05\x12\x04\xa4\x01\x02\x08\ + \n\r\n\x05\x04'\x02\x07\x01\x12\x04\xa4\x01\t\x0f\n\r\n\x05\x04'\x02\x07\ + \x03\x12\x04\xa4\x01\x12\x13\n\x0c\n\x04\x04'\x02\x08\x12\x04\xa5\x01\ + \x02\"\n\r\n\x05\x04'\x02\x08\x05\x12\x04\xa5\x01\x02\x08\n\r\n\x05\x04'\ + \x02\x08\x01\x12\x04\xa5\x01\t\x1d\n\r\n\x05\x04'\x02\x08\x03\x12\x04\ + \xa5\x01\x20!\n\x0c\n\x04\x04'\x02\t\x12\x04\xa6\x01\x02\x16\n\r\n\x05\ + \x04'\x02\t\x05\x12\x04\xa6\x01\x02\x08\n\r\n\x05\x04'\x02\t\x01\x12\x04\ + \xa6\x01\t\x10\n\r\n\x05\x04'\x02\t\x03\x12\x04\xa6\x01\x13\x15\n\x0c\n\ + \x02\x04(\x12\x06\xa8\x01\0\xaa\x01\x01\n\x0b\n\x03\x04(\x01\x12\x04\xa8\ + \x01\x08+\n\x0c\n\x04\x04(\x02\0\x12\x04\xa9\x01\x02\x1b\n\r\n\x05\x04(\ + \x02\0\x05\x12\x04\xa9\x01\x02\x07\n\r\n\x05\x04(\x02\0\x01\x12\x04\xa9\ + \x01\x08\x16\n\r\n\x05\x04(\x02\0\x03\x12\x04\xa9\x01\x19\x1a\n\x0c\n\ + \x02\x04)\x12\x06\xac\x01\0\xb8\x01\x01\n\x0b\n\x03\x04)\x01\x12\x04\xac\ + \x01\x08%\n\x0c\n\x04\x04)\x02\0\x12\x04\xad\x01\x02\x18\n\r\n\x05\x04)\ + \x02\0\x05\x12\x04\xad\x01\x02\x07\n\r\n\x05\x04)\x02\0\x01\x12\x04\xad\ + \x01\x08\x13\n\r\n\x05\x04)\x02\0\x03\x12\x04\xad\x01\x16\x17\n\x0c\n\ + \x04\x04)\x02\x01\x12\x04\xae\x01\x02\x1a\n\r\n\x05\x04)\x02\x01\x05\x12\ + \x04\xae\x01\x02\x07\n\r\n\x05\x04)\x02\x01\x01\x12\x04\xae\x01\x08\x15\ + \n\r\n\x05\x04)\x02\x01\x03\x12\x04\xae\x01\x18\x19\n\x0c\n\x04\x04)\x02\ + \x02\x12\x04\xaf\x01\x02\x19\n\r\n\x05\x04)\x02\x02\x05\x12\x04\xaf\x01\ + \x02\x08\n\r\n\x05\x04)\x02\x02\x01\x12\x04\xaf\x01\t\x14\n\r\n\x05\x04)\ + \x02\x02\x03\x12\x04\xaf\x01\x17\x18\n\x0c\n\x04\x04)\x02\x03\x12\x04\ + \xb0\x01\x02\x1e\n\r\n\x05\x04)\x02\x03\x05\x12\x04\xb0\x01\x02\x08\n\r\ + \n\x05\x04)\x02\x03\x01\x12\x04\xb0\x01\t\x19\n\r\n\x05\x04)\x02\x03\x03\ + \x12\x04\xb0\x01\x1c\x1d\n\x0c\n\x04\x04)\x02\x04\x12\x04\xb1\x01\x02\ + \x1f\n\r\n\x05\x04)\x02\x04\x05\x12\x04\xb1\x01\x02\x08\n\r\n\x05\x04)\ + \x02\x04\x01\x12\x04\xb1\x01\t\x1a\n\r\n\x05\x04)\x02\x04\x03\x12\x04\ + \xb1\x01\x1d\x1e\n\x0c\n\x04\x04)\x02\x05\x12\x04\xb2\x01\x02!\n\r\n\x05\ + \x04)\x02\x05\x05\x12\x04\xb2\x01\x02\x08\n\r\n\x05\x04)\x02\x05\x01\x12\ + \x04\xb2\x01\t\x1c\n\r\n\x05\x04)\x02\x05\x03\x12\x04\xb2\x01\x1f\x20\n\ + \x0c\n\x04\x04)\x02\x06\x12\x04\xb3\x01\x02\x16\n\r\n\x05\x04)\x02\x06\ + \x05\x12\x04\xb3\x01\x02\x07\n\r\n\x05\x04)\x02\x06\x01\x12\x04\xb3\x01\ + \x08\x11\n\r\n\x05\x04)\x02\x06\x03\x12\x04\xb3\x01\x14\x15\n\x0c\n\x04\ + \x04)\x02\x07\x12\x04\xb4\x01\x02\x14\n\r\n\x05\x04)\x02\x07\x05\x12\x04\ + \xb4\x01\x02\x08\n\r\n\x05\x04)\x02\x07\x01\x12\x04\xb4\x01\t\x0f\n\r\n\ + \x05\x04)\x02\x07\x03\x12\x04\xb4\x01\x12\x13\n\x0c\n\x04\x04)\x02\x08\ + \x12\x04\xb5\x01\x02\"\n\r\n\x05\x04)\x02\x08\x05\x12\x04\xb5\x01\x02\ + \x08\n\r\n\x05\x04)\x02\x08\x01\x12\x04\xb5\x01\t\x1d\n\r\n\x05\x04)\x02\ + \x08\x03\x12\x04\xb5\x01\x20!\n\x0c\n\x04\x04)\x02\t\x12\x04\xb6\x01\x02\ + \x16\n\r\n\x05\x04)\x02\t\x05\x12\x04\xb6\x01\x02\x08\n\r\n\x05\x04)\x02\ + \t\x01\x12\x04\xb6\x01\t\x10\n\r\n\x05\x04)\x02\t\x03\x12\x04\xb6\x01\ + \x13\x15\n\x0c\n\x04\x04)\x02\n\x12\x04\xb7\x01\x02\x1b\n\r\n\x05\x04)\ + \x02\n\x05\x12\x04\xb7\x01\x02\x07\n\r\n\x05\x04)\x02\n\x01\x12\x04\xb7\ + \x01\x08\x15\n\r\n\x05\x04)\x02\n\x03\x12\x04\xb7\x01\x18\x1a\n\x0c\n\ + \x02\x04*\x12\x06\xb9\x01\0\xbb\x01\x01\n\x0b\n\x03\x04*\x01\x12\x04\xb9\ + \x01\x08-\n\x0c\n\x04\x04*\x02\0\x12\x04\xba\x01\x02\x1b\n\r\n\x05\x04*\ + \x02\0\x05\x12\x04\xba\x01\x02\x07\n\r\n\x05\x04*\x02\0\x01\x12\x04\xba\ + \x01\x08\x16\n\r\n\x05\x04*\x02\0\x03\x12\x04\xba\x01\x19\x1a\n\x0c\n\ + \x02\x04+\x12\x06\xbd\x01\0\xc0\x01\x01\n\x0b\n\x03\x04+\x01\x12\x04\xbd\ + \x01\x08\x1f\n\x0c\n\x04\x04+\x02\0\x12\x04\xbe\x01\x02\x1b\n\r\n\x05\ + \x04+\x02\0\x05\x12\x04\xbe\x01\x02\x07\n\r\n\x05\x04+\x02\0\x01\x12\x04\ + \xbe\x01\x08\x16\n\r\n\x05\x04+\x02\0\x03\x12\x04\xbe\x01\x19\x1a\n\x0c\ + \n\x04\x04+\x02\x01\x12\x04\xbf\x01\x02\x13\n\r\n\x05\x04+\x02\x01\x05\ + \x12\x04\xbf\x01\x02\x07\n\r\n\x05\x04+\x02\x01\x01\x12\x04\xbf\x01\x08\ + \x0e\n\r\n\x05\x04+\x02\x01\x03\x12\x04\xbf\x01\x11\x12\n\n\n\x02\x04,\ + \x12\x04\xc1\x01\0*\n\x0b\n\x03\x04,\x01\x12\x04\xc1\x01\x08'\n\x0c\n\ + \x02\x04-\x12\x06\xc3\x01\0\xc8\x01\x01\n\x0b\n\x03\x04-\x01\x12\x04\xc3\ + \x01\x08\x1c\n\x0c\n\x04\x04-\x02\0\x12\x04\xc4\x01\x02\x18\n\r\n\x05\ + \x04-\x02\0\x05\x12\x04\xc4\x01\x02\x07\n\r\n\x05\x04-\x02\0\x01\x12\x04\ + \xc4\x01\x08\x13\n\r\n\x05\x04-\x02\0\x03\x12\x04\xc4\x01\x16\x17\n\x0c\ + \n\x04\x04-\x02\x01\x12\x04\xc5\x01\x02\x1e\n\r\n\x05\x04-\x02\x01\x05\ + \x12\x04\xc5\x01\x02\x08\n\r\n\x05\x04-\x02\x01\x01\x12\x04\xc5\x01\t\ + \x19\n\r\n\x05\x04-\x02\x01\x03\x12\x04\xc5\x01\x1c\x1d\n\x0c\n\x04\x04-\ + \x02\x02\x12\x04\xc6\x01\x02!\n\r\n\x05\x04-\x02\x02\x05\x12\x04\xc6\x01\ + \x02\x08\n\r\n\x05\x04-\x02\x02\x01\x12\x04\xc6\x01\t\x1c\n\r\n\x05\x04-\ + \x02\x02\x03\x12\x04\xc6\x01\x1f\x20\n\x0c\n\x04\x04-\x02\x03\x12\x04\ + \xc7\x01\x02$\n\r\n\x05\x04-\x02\x03\x04\x12\x04\xc7\x01\x02\n\n\r\n\x05\ + \x04-\x02\x03\x05\x12\x04\xc7\x01\x0b\x10\n\r\n\x05\x04-\x02\x03\x01\x12\ + \x04\xc7\x01\x11\x1f\n\r\n\x05\x04-\x02\x03\x03\x12\x04\xc7\x01\"#\n\x0c\ + \n\x02\x04.\x12\x06\xc9\x01\0\xcb\x01\x01\n\x0b\n\x03\x04.\x01\x12\x04\ + \xc9\x01\x08$\n\x0c\n\x04\x04.\x02\0\x12\x04\xca\x01\x02\x1b\n\r\n\x05\ + \x04.\x02\0\x05\x12\x04\xca\x01\x02\x06\n\r\n\x05\x04.\x02\0\x01\x12\x04\ + \xca\x01\x07\x16\n\r\n\x05\x04.\x02\0\x03\x12\x04\xca\x01\x19\x1a\n\x0c\ + \n\x02\x04/\x12\x06\xcd\x01\0\xd0\x01\x01\n\x0b\n\x03\x04/\x01\x12\x04\ + \xcd\x01\x08\x20\n\x0c\n\x04\x04/\x02\0\x12\x04\xce\x01\x02\x18\n\r\n\ + \x05\x04/\x02\0\x05\x12\x04\xce\x01\x02\x07\n\r\n\x05\x04/\x02\0\x01\x12\ + \x04\xce\x01\x08\x13\n\r\n\x05\x04/\x02\0\x03\x12\x04\xce\x01\x16\x17\n\ + \x0c\n\x04\x04/\x02\x01\x12\x04\xcf\x01\x02\x1a\n\r\n\x05\x04/\x02\x01\ + \x05\x12\x04\xcf\x01\x02\x07\n\r\n\x05\x04/\x02\x01\x01\x12\x04\xcf\x01\ + \x08\x15\n\r\n\x05\x04/\x02\x01\x03\x12\x04\xcf\x01\x18\x19\n\xf1\x01\n\ + \x02\x040\x12\x06\xd4\x01\0\xe9\x01\x01\x1a\xe2\x01\x20VerificationDetai\ + ls\x20must\x20have\x20same\x20members\x20with\x20VerificationDetails\x20\ + in\x20\"sgxvm/proto/ffi.proto\"\n\x20including\x20verification\x20type\ + \x20and\x20verification\x20id\x20as\x20key.\n\x20But\x20the\x20member\ + \x20types\x20can\x20be\x20different,\x20such\x20as\x20string(address)\ + \x20to\x20bytes\n\n\x0b\n\x03\x040\x01\x12\x04\xd4\x01\x08\x1b\n!\n\x04\ + \x040\x02\0\x12\x04\xd6\x01\x02\x1e\x1a\x13\x20Verification\x20type\n\n\ + \r\n\x05\x040\x02\0\x05\x12\x04\xd6\x01\x02\x08\n\r\n\x05\x040\x02\0\x01\ + \x12\x04\xd6\x01\t\x19\n\r\n\x05\x040\x02\0\x03\x12\x04\xd6\x01\x1c\x1d\ + \n\x1f\n\x04\x040\x02\x01\x12\x04\xd8\x01\x02\x1b\x1a\x11\x20Verificatio\ + n\x20Id\n\n\r\n\x05\x040\x02\x01\x05\x12\x04\xd8\x01\x02\x07\n\r\n\x05\ + \x040\x02\x01\x01\x12\x04\xd8\x01\x08\x16\n\r\n\x05\x040\x02\x01\x03\x12\ + \x04\xd8\x01\x19\x1a\n+\n\x04\x040\x02\x02\x12\x04\xda\x01\x02\x1a\x1a\ + \x1d\x20Verification\x20issuer\x20address\n\n\r\n\x05\x040\x02\x02\x05\ + \x12\x04\xda\x01\x02\x07\n\r\n\x05\x040\x02\x02\x01\x12\x04\xda\x01\x08\ + \x15\n\r\n\x05\x040\x02\x02\x03\x12\x04\xda\x01\x18\x19\n6\n\x04\x040\ + \x02\x03\x12\x04\xdc\x01\x02\x19\x1a(\x20From\x20which\x20chain\x20proof\ + \x20was\x20transferred\n\n\r\n\x05\x040\x02\x03\x05\x12\x04\xdc\x01\x02\ + \x08\n\r\n\x05\x040\x02\x03\x01\x12\x04\xdc\x01\t\x14\n\r\n\x05\x040\x02\ + \x03\x03\x12\x04\xdc\x01\x17\x18\n+\n\x04\x040\x02\x04\x12\x04\xde\x01\ + \x02\x1f\x1a\x1d\x20Original\x20issuance\x20timestamp\n\n\r\n\x05\x040\ + \x02\x04\x05\x12\x04\xde\x01\x02\x08\n\r\n\x05\x040\x02\x04\x01\x12\x04\ + \xde\x01\t\x1a\n\r\n\x05\x040\x02\x04\x03\x12\x04\xde\x01\x1d\x1e\n-\n\ + \x04\x040\x02\x05\x12\x04\xe0\x01\x02!\x1a\x1f\x20Original\x20expiration\ + \x20timestamp\n\n\r\n\x05\x040\x02\x05\x05\x12\x04\xe0\x01\x02\x08\n\r\n\ + \x05\x040\x02\x05\x01\x12\x04\xe0\x01\t\x1c\n\r\n\x05\x040\x02\x05\x03\ + \x12\x04\xe0\x01\x1f\x20\n.\n\x04\x040\x02\x06\x12\x04\xe2\x01\x02\x19\ + \x1a\x20\x20Original\x20proof\x20data\x20(ZK-proof)\n\n\r\n\x05\x040\x02\ + \x06\x05\x12\x04\xe2\x01\x02\x07\n\r\n\x05\x040\x02\x06\x01\x12\x04\xe2\ + \x01\x08\x14\n\r\n\x05\x040\x02\x06\x03\x12\x04\xe2\x01\x17\x18\n(\n\x04\ + \x040\x02\x07\x12\x04\xe4\x01\x02\x14\x1a\x1a\x20ZK-proof\x20original\ + \x20schema\n\n\r\n\x05\x040\x02\x07\x05\x12\x04\xe4\x01\x02\x08\n\r\n\ + \x05\x040\x02\x07\x01\x12\x04\xe4\x01\t\x0f\n\r\n\x05\x040\x02\x07\x03\ + \x12\x04\xe4\x01\x12\x13\nN\n\x04\x040\x02\x08\x12\x04\xe6\x01\x02\"\x1a\ @\x20Verification\x20id\x20for\x20checking(KYC/KYB/AML\x20etc)\x20from\ - \x20issuer\x20side\n\n\r\n\x05\x04.\x02\x08\x05\x12\x04\xe0\x01\x02\x08\ - \n\r\n\x05\x04.\x02\x08\x01\x12\x04\xe0\x01\t\x1d\n\r\n\x05\x04.\x02\x08\ - \x03\x12\x04\xe0\x01\x20!\n\x17\n\x04\x04.\x02\t\x12\x04\xe2\x01\x02\x16\ - \x1a\t\x20Version\n\n\r\n\x05\x04.\x02\t\x05\x12\x04\xe2\x01\x02\x08\n\r\ - \n\x05\x04.\x02\t\x01\x12\x04\xe2\x01\t\x10\n\r\n\x05\x04.\x02\t\x03\x12\ - \x04\xe2\x01\x13\x15\n\x0c\n\x02\x04/\x12\x06\xe4\x01\0\xe6\x01\x01\n\ - \x0b\n\x03\x04/\x01\x12\x04\xe4\x01\x08(\n\x0c\n\x04\x04/\x02\0\x12\x04\ - \xe5\x01\x02(\n\r\n\x05\x04/\x02\0\x04\x12\x04\xe5\x01\x02\n\n\r\n\x05\ - \x04/\x02\0\x06\x12\x04\xe5\x01\x0b\x1e\n\r\n\x05\x04/\x02\0\x01\x12\x04\ - \xe5\x01\x1f#\n\r\n\x05\x04/\x02\0\x03\x12\x04\xe5\x01&'\n\x0c\n\x02\x04\ - 0\x12\x06\xe8\x01\0\xff\x01\x01\n\x0b\n\x03\x040\x01\x12\x04\xe8\x01\x08\ - \x15\n\x0e\n\x04\x040\x08\0\x12\x06\xe9\x01\x02\xfe\x01\x03\n\r\n\x05\ - \x040\x08\0\x01\x12\x04\xe9\x01\x08\x0b\n\x0c\n\x04\x040\x02\0\x12\x04\ - \xea\x01\x04#\n\r\n\x05\x040\x02\0\x06\x12\x04\xea\x01\x04\x13\n\r\n\x05\ - \x040\x02\0\x01\x12\x04\xea\x01\x14\x1e\n\r\n\x05\x040\x02\0\x03\x12\x04\ - \xea\x01!\"\n\x0c\n\x04\x040\x02\x01\x12\x04\xeb\x01\x04%\n\r\n\x05\x040\ - \x02\x01\x06\x12\x04\xeb\x01\x04\x14\n\r\n\x05\x040\x02\x01\x01\x12\x04\ - \xeb\x01\x15\x20\n\r\n\x05\x040\x02\x01\x03\x12\x04\xeb\x01#$\n\x0c\n\ - \x04\x040\x02\x02\x12\x04\xec\x01\x04(\n\r\n\x05\x040\x02\x02\x06\x12\ - \x04\xec\x01\x04\x17\n\r\n\x05\x040\x02\x02\x01\x12\x04\xec\x01\x18#\n\r\ - \n\x05\x040\x02\x02\x03\x12\x04\xec\x01&'\n\x0c\n\x04\x040\x02\x03\x12\ - \x04\xed\x01\x04)\n\r\n\x05\x040\x02\x03\x06\x12\x04\xed\x01\x04\x1b\n\r\ - \n\x05\x040\x02\x03\x01\x12\x04\xed\x01\x1c$\n\r\n\x05\x040\x02\x03\x03\ - \x12\x04\xed\x01'(\n\x0c\n\x04\x040\x02\x04\x12\x04\xee\x01\x04)\n\r\n\ - \x05\x040\x02\x04\x06\x12\x04\xee\x01\x04\x1b\n\r\n\x05\x040\x02\x04\x01\ - \x12\x04\xee\x01\x1c$\n\r\n\x05\x040\x02\x04\x03\x12\x04\xee\x01'(\n\x0c\ - \n\x04\x040\x02\x05\x12\x04\xef\x01\x04/\n\r\n\x05\x040\x02\x05\x06\x12\ - \x04\xef\x01\x04\x1e\n\r\n\x05\x040\x02\x05\x01\x12\x04\xef\x01\x1f*\n\r\ - \n\x05\x040\x02\x05\x03\x12\x04\xef\x01-.\n\x0c\n\x04\x040\x02\x06\x12\ - \x04\xf0\x01\x041\n\r\n\x05\x040\x02\x06\x06\x12\x04\xf0\x01\x04\x1a\n\r\ - \n\x05\x040\x02\x06\x01\x12\x04\xf0\x01\x1b,\n\r\n\x05\x040\x02\x06\x03\ - \x12\x04\xf0\x01/0\n\x0c\n\x04\x040\x02\x07\x12\x04\xf1\x01\x041\n\r\n\ - \x05\x040\x02\x07\x06\x12\x04\xf1\x01\x04\x1a\n\r\n\x05\x040\x02\x07\x01\ - \x12\x04\xf1\x01\x1b,\n\r\n\x05\x040\x02\x07\x03\x12\x04\xf1\x01/0\n\x0c\ - \n\x04\x040\x02\x08\x12\x04\xf2\x01\x04\x1b\n\r\n\x05\x040\x02\x08\x06\ - \x12\x04\xf2\x01\x04\x0f\n\r\n\x05\x040\x02\x08\x01\x12\x04\xf2\x01\x10\ - \x16\n\r\n\x05\x040\x02\x08\x03\x12\x04\xf2\x01\x19\x1a\n\x0c\n\x04\x040\ - \x02\t\x12\x04\xf3\x01\x042\n\r\n\x05\x040\x02\t\x06\x12\x04\xf3\x01\x04\ - \x1a\n\r\n\x05\x040\x02\t\x01\x12\x04\xf3\x01\x1b,\n\r\n\x05\x040\x02\t\ - \x03\x12\x04\xf3\x01/1\n\x0c\n\x04\x040\x02\n\x12\x04\xf4\x01\x04*\n\r\n\ - \x05\x040\x02\n\x06\x12\x04\xf4\x01\x04\x16\n\r\n\x05\x040\x02\n\x01\x12\ - \x04\xf4\x01\x17$\n\r\n\x05\x040\x02\n\x03\x12\x04\xf4\x01')\n\x0c\n\x04\ - \x040\x02\x0b\x12\x04\xf5\x01\x04\"\n\r\n\x05\x040\x02\x0b\x06\x12\x04\ - \xf5\x01\x04\x12\n\r\n\x05\x040\x02\x0b\x01\x12\x04\xf5\x01\x13\x1c\n\r\ - \n\x05\x040\x02\x0b\x03\x12\x04\xf5\x01\x1f!\n\x0c\n\x04\x040\x02\x0c\ - \x12\x04\xf6\x01\x04<\n\r\n\x05\x040\x02\x0c\x06\x12\x04\xf6\x01\x04\x1f\ - \n\r\n\x05\x040\x02\x0c\x01\x12\x04\xf6\x01\x206\n\r\n\x05\x040\x02\x0c\ - \x03\x12\x04\xf6\x019;\n\x0c\n\x04\x040\x02\r\x12\x04\xf7\x01\x04.\n\r\n\ - \x05\x040\x02\r\x06\x12\x04\xf7\x01\x04\x18\n\r\n\x05\x040\x02\r\x01\x12\ - \x04\xf7\x01\x19(\n\r\n\x05\x040\x02\r\x03\x12\x04\xf7\x01+-\n\x0c\n\x04\ - \x040\x02\x0e\x12\x04\xf8\x01\x046\n\r\n\x05\x040\x02\x0e\x06\x12\x04\ - \xf8\x01\x04\x1c\n\r\n\x05\x040\x02\x0e\x01\x12\x04\xf8\x01\x1d0\n\r\n\ - \x05\x040\x02\x0e\x03\x12\x04\xf8\x0135\n\x0c\n\x04\x040\x02\x0f\x12\x04\ - \xf9\x01\x048\n\r\n\x05\x040\x02\x0f\x06\x12\x04\xf9\x01\x04\x1d\n\r\n\ - \x05\x040\x02\x0f\x01\x12\x04\xf9\x01\x1e2\n\r\n\x05\x040\x02\x0f\x03\ - \x12\x04\xf9\x0157\n\x0c\n\x04\x040\x02\x10\x12\x04\xfa\x01\x044\n\r\n\ - \x05\x040\x02\x10\x06\x12\x04\xfa\x01\x04\x1b\n\r\n\x05\x040\x02\x10\x01\ - \x12\x04\xfa\x01\x1c.\n\r\n\x05\x040\x02\x10\x03\x12\x04\xfa\x0113\n\x0c\ - \n\x04\x040\x02\x11\x12\x04\xfb\x01\x040\n\r\n\x05\x040\x02\x11\x06\x12\ - \x04\xfb\x01\x04\x19\n\r\n\x05\x040\x02\x11\x01\x12\x04\xfb\x01\x1a*\n\r\ - \n\x05\x040\x02\x11\x03\x12\x04\xfb\x01-/\n\x0c\n\x04\x040\x02\x12\x12\ - \x04\xfc\x01\x044\n\r\n\x05\x040\x02\x12\x06\x12\x04\xfc\x01\x04\x1b\n\r\ - \n\x05\x040\x02\x12\x01\x12\x04\xfc\x01\x1c.\n\r\n\x05\x040\x02\x12\x03\ - \x12\x04\xfc\x0113\n\x0c\n\x04\x040\x02\x13\x12\x04\xfd\x01\x04@\n\r\n\ - \x05\x040\x02\x13\x06\x12\x04\xfd\x01\x04!\n\r\n\x05\x040\x02\x13\x01\ - \x12\x04\xfd\x01\":\n\r\n\x05\x040\x02\x13\x03\x12\x04\xfd\x01=?\nF\n\ - \x02\x041\x12\x06\x82\x02\0\x8d\x02\x01\x1a8\x20Message\x20with\x20data\ - \x20required\x20to\x20execute\x20`call`\x20operation\n\n\x0b\n\x03\x041\ - \x01\x12\x04\x82\x02\x08\x17\n\x0c\n\x04\x041\x02\0\x12\x04\x83\x02\x02\ - \x11\n\r\n\x05\x041\x02\0\x05\x12\x04\x83\x02\x02\x07\n\r\n\x05\x041\x02\ - \0\x01\x12\x04\x83\x02\x08\x0c\n\r\n\x05\x041\x02\0\x03\x12\x04\x83\x02\ - \x0f\x10\n\x0c\n\x04\x041\x02\x01\x12\x04\x84\x02\x02\x0f\n\r\n\x05\x041\ - \x02\x01\x05\x12\x04\x84\x02\x02\x07\n\r\n\x05\x041\x02\x01\x01\x12\x04\ - \x84\x02\x08\n\n\r\n\x05\x041\x02\x01\x03\x12\x04\x84\x02\r\x0e\n\x0c\n\ - \x04\x041\x02\x02\x12\x04\x85\x02\x02\x11\n\r\n\x05\x041\x02\x02\x05\x12\ - \x04\x85\x02\x02\x07\n\r\n\x05\x041\x02\x02\x01\x12\x04\x85\x02\x08\x0c\ - \n\r\n\x05\x041\x02\x02\x03\x12\x04\x85\x02\x0f\x10\n\x0c\n\x04\x041\x02\ - \x03\x12\x04\x86\x02\x02\x16\n\r\n\x05\x041\x02\x03\x05\x12\x04\x86\x02\ - \x02\x08\n\r\n\x05\x041\x02\x03\x01\x12\x04\x86\x02\t\x11\n\r\n\x05\x041\ - \x02\x03\x03\x12\x04\x86\x02\x14\x15\n\x0c\n\x04\x041\x02\x04\x12\x04\ - \x87\x02\x02\x15\n\r\n\x05\x041\x02\x04\x05\x12\x04\x87\x02\x02\x07\n\r\ - \n\x05\x041\x02\x04\x01\x12\x04\x87\x02\x08\x10\n\r\n\x05\x041\x02\x04\ - \x03\x12\x04\x87\x02\x13\x14\n\x0c\n\x04\x041\x02\x05\x12\x04\x88\x02\ - \x02\x12\n\r\n\x05\x041\x02\x05\x05\x12\x04\x88\x02\x02\x07\n\r\n\x05\ - \x041\x02\x05\x01\x12\x04\x88\x02\x08\r\n\r\n\x05\x041\x02\x05\x03\x12\ - \x04\x88\x02\x10\x11\n\x0c\n\x04\x041\x02\x06\x12\x04\x89\x02\x02)\n\r\n\ - \x05\x041\x02\x06\x04\x12\x04\x89\x02\x02\n\n\r\n\x05\x041\x02\x06\x06\ - \x12\x04\x89\x02\x0b\x19\n\r\n\x05\x041\x02\x06\x01\x12\x04\x89\x02\x1a$\ - \n\r\n\x05\x041\x02\x06\x03\x12\x04\x89\x02'(\n\x0c\n\x04\x041\x02\x07\ - \x12\x04\x8a\x02\x02\x12\n\r\n\x05\x041\x02\x07\x05\x12\x04\x8a\x02\x02\ - \x06\n\r\n\x05\x041\x02\x07\x01\x12\x04\x8a\x02\x07\r\n\r\n\x05\x041\x02\ - \x07\x03\x12\x04\x8a\x02\x10\x11\n\x0c\n\x04\x041\x02\x08\x12\x04\x8b\ - \x02\x02\x13\n\r\n\x05\x041\x02\x08\x05\x12\x04\x8b\x02\x02\x08\n\r\n\ - \x05\x041\x02\x08\x01\x12\x04\x8b\x02\t\x0e\n\r\n\x05\x041\x02\x08\x03\ - \x12\x04\x8b\x02\x11\x12\n\x0c\n\x04\x041\x02\t\x12\x04\x8c\x02\x02\x18\ - \n\r\n\x05\x041\x02\t\x05\x12\x04\x8c\x02\x02\x06\n\r\n\x05\x041\x02\t\ - \x01\x12\x04\x8c\x02\x07\x12\n\r\n\x05\x041\x02\t\x03\x12\x04\x8c\x02\ - \x15\x17\nH\n\x02\x042\x12\x06\x90\x02\0\x99\x02\x01\x1a:\x20Message\x20\ - with\x20data\x20required\x20to\x20execute\x20`create`\x20operation\n\n\ - \x0b\n\x03\x042\x01\x12\x04\x90\x02\x08\x19\n\x0c\n\x04\x042\x02\0\x12\ - \x04\x91\x02\x02\x11\n\r\n\x05\x042\x02\0\x05\x12\x04\x91\x02\x02\x07\n\ - \r\n\x05\x042\x02\0\x01\x12\x04\x91\x02\x08\x0c\n\r\n\x05\x042\x02\0\x03\ - \x12\x04\x91\x02\x0f\x10\n\x0c\n\x04\x042\x02\x01\x12\x04\x92\x02\x02\ - \x11\n\r\n\x05\x042\x02\x01\x05\x12\x04\x92\x02\x02\x07\n\r\n\x05\x042\ - \x02\x01\x01\x12\x04\x92\x02\x08\x0c\n\r\n\x05\x042\x02\x01\x03\x12\x04\ - \x92\x02\x0f\x10\n\x0c\n\x04\x042\x02\x02\x12\x04\x93\x02\x02\x16\n\r\n\ - \x05\x042\x02\x02\x05\x12\x04\x93\x02\x02\x08\n\r\n\x05\x042\x02\x02\x01\ - \x12\x04\x93\x02\t\x11\n\r\n\x05\x042\x02\x02\x03\x12\x04\x93\x02\x14\ - \x15\n\x0c\n\x04\x042\x02\x03\x12\x04\x94\x02\x02\x15\n\r\n\x05\x042\x02\ - \x03\x05\x12\x04\x94\x02\x02\x07\n\r\n\x05\x042\x02\x03\x01\x12\x04\x94\ - \x02\x08\x10\n\r\n\x05\x042\x02\x03\x03\x12\x04\x94\x02\x13\x14\n\x0c\n\ - \x04\x042\x02\x04\x12\x04\x95\x02\x02\x12\n\r\n\x05\x042\x02\x04\x05\x12\ - \x04\x95\x02\x02\x07\n\r\n\x05\x042\x02\x04\x01\x12\x04\x95\x02\x08\r\n\ - \r\n\x05\x042\x02\x04\x03\x12\x04\x95\x02\x10\x11\n\x0c\n\x04\x042\x02\ - \x05\x12\x04\x96\x02\x02)\n\r\n\x05\x042\x02\x05\x04\x12\x04\x96\x02\x02\ - \n\n\r\n\x05\x042\x02\x05\x06\x12\x04\x96\x02\x0b\x19\n\r\n\x05\x042\x02\ - \x05\x01\x12\x04\x96\x02\x1a$\n\r\n\x05\x042\x02\x05\x03\x12\x04\x96\x02\ - '(\n\x0c\n\x04\x042\x02\x06\x12\x04\x97\x02\x02\x12\n\r\n\x05\x042\x02\ - \x06\x05\x12\x04\x97\x02\x02\x06\n\r\n\x05\x042\x02\x06\x01\x12\x04\x97\ - \x02\x07\r\n\r\n\x05\x042\x02\x06\x03\x12\x04\x97\x02\x10\x11\n\x0c\n\ - \x04\x042\x02\x07\x12\x04\x98\x02\x02\x13\n\r\n\x05\x042\x02\x07\x05\x12\ - \x04\x98\x02\x02\x08\n\r\n\x05\x042\x02\x07\x01\x12\x04\x98\x02\t\x0e\n\ - \r\n\x05\x042\x02\x07\x03\x12\x04\x98\x02\x11\x12\n3\n\x02\x043\x12\x06\ - \x9c\x02\0\x9f\x02\x01\x1a%\x20Request\x20to\x20execute\x20`call`\x20ope\ - ration\n\n\x0b\n\x03\x043\x01\x12\x04\x9c\x02\x08\x18\n\x0c\n\x04\x043\ - \x02\0\x12\x04\x9d\x02\x02\x1d\n\r\n\x05\x043\x02\0\x06\x12\x04\x9d\x02\ - \x02\x11\n\r\n\x05\x043\x02\0\x01\x12\x04\x9d\x02\x12\x18\n\r\n\x05\x043\ - \x02\0\x03\x12\x04\x9d\x02\x1b\x1c\n\x0c\n\x04\x043\x02\x01\x12\x04\x9e\ - \x02\x02!\n\r\n\x05\x043\x02\x01\x06\x12\x04\x9e\x02\x02\x14\n\r\n\x05\ - \x043\x02\x01\x01\x12\x04\x9e\x02\x15\x1c\n\r\n\x05\x043\x02\x01\x03\x12\ - \x04\x9e\x02\x1f\x20\n5\n\x02\x044\x12\x06\xa2\x02\0\xa5\x02\x01\x1a'\ - \x20Request\x20to\x20execute\x20`create`\x20operation\n\n\x0b\n\x03\x044\ - \x01\x12\x04\xa2\x02\x08\x1a\n\x0c\n\x04\x044\x02\0\x12\x04\xa3\x02\x02\ - \x1f\n\r\n\x05\x044\x02\0\x06\x12\x04\xa3\x02\x02\x13\n\r\n\x05\x044\x02\ - \0\x01\x12\x04\xa3\x02\x14\x1a\n\r\n\x05\x044\x02\0\x03\x12\x04\xa3\x02\ - \x1d\x1e\n\x0c\n\x04\x044\x02\x01\x12\x04\xa4\x02\x02!\n\r\n\x05\x044\ - \x02\x01\x06\x12\x04\xa4\x02\x02\x14\n\r\n\x05\x044\x02\x01\x01\x12\x04\ - \xa4\x02\x15\x1c\n\r\n\x05\x044\x02\x01\x03\x12\x04\xa4\x02\x1f\x20\n1\n\ - \x02\x045\x12\x06\xa8\x02\0\xaa\x02\x01\x1a#\x20Request\x20to\x20obtain\ - \x20node\x20public\x20key\n\n\x0b\n\x03\x045\x01\x12\x04\xa8\x02\x08\x1c\ - \n\x0c\n\x04\x045\x02\0\x12\x04\xa9\x02\x02\x19\n\r\n\x05\x045\x02\0\x05\ - \x12\x04\xa9\x02\x02\x08\n\r\n\x05\x045\x02\0\x01\x12\x04\xa9\x02\t\x14\ - \n\r\n\x05\x045\x02\0\x03\x12\x04\xa9\x02\x17\x18\n+\n\x02\x046\x12\x04\ - \xad\x02\06\x1a\x1f\x20Response\x20with\x20node\x20public\x20key\n\n\x0b\ - \n\x03\x046\x01\x12\x04\xad\x02\x08\x1d\n\x0c\n\x04\x046\x02\0\x12\x04\ - \xad\x02\x204\n\r\n\x05\x046\x02\0\x05\x12\x04\xad\x02\x20%\n\r\n\x05\ - \x046\x02\0\x01\x12\x04\xad\x02&/\n\r\n\x05\x046\x02\0\x03\x12\x04\xad\ - \x0223\n\x0c\n\x02\x047\x12\x06\xaf\x02\0\xb3\x02\x01\n\x0b\n\x03\x047\ - \x01\x12\x04\xaf\x02\x08\x11\n\x0c\n\x04\x047\x02\0\x12\x04\xb0\x02\x02\ - \x19\n\r\n\x05\x047\x02\0\x05\x12\x04\xb0\x02\x02\x08\n\r\n\x05\x047\x02\ - \0\x01\x12\x04\xb0\x02\t\x14\n\r\n\x05\x047\x02\0\x03\x12\x04\xb0\x02\ - \x17\x18\n\x0c\n\x04\x047\x02\x01\x12\x04\xb1\x02\x02\x1b\n\r\n\x05\x047\ - \x02\x01\x05\x12\x04\xb1\x02\x02\x08\n\r\n\x05\x047\x02\x01\x01\x12\x04\ - \xb1\x02\t\x16\n\r\n\x05\x047\x02\x01\x03\x12\x04\xb1\x02\x19\x1a\n\x0c\ - \n\x04\x047\x02\x02\x12\x04\xb2\x02\x02\x1a\n\r\n\x05\x047\x02\x02\x05\ - \x12\x04\xb2\x02\x02\x07\n\r\n\x05\x047\x02\x02\x01\x12\x04\xb2\x02\x08\ - \x15\n\r\n\x05\x047\x02\x02\x03\x12\x04\xb2\x02\x18\x19\n\x0c\n\x02\x048\ - \x12\x06\xb4\x02\0\xb6\x02\x01\n\x0b\n\x03\x048\x01\x12\x04\xb4\x02\x08\ - \x1a\n\x0c\n\x04\x048\x02\0\x12\x04\xb5\x02\x02\x20\n\r\n\x05\x048\x02\0\ - \x04\x12\x04\xb5\x02\x02\n\n\r\n\x05\x048\x02\0\x06\x12\x04\xb5\x02\x0b\ - \x14\n\r\n\x05\x048\x02\0\x01\x12\x04\xb5\x02\x15\x1b\n\r\n\x05\x048\x02\ - \0\x03\x12\x04\xb5\x02\x1e\x1f\n\x0c\n\x02\x049\x12\x06\xb8\x02\0\xbe\ - \x02\x01\n\x0b\n\x03\x049\x01\x12\x04\xb8\x02\x08\x12\n\x0e\n\x04\x049\ - \x08\0\x12\x06\xb9\x02\x02\xbd\x02\x03\n\r\n\x05\x049\x08\0\x01\x12\x04\ - \xb9\x02\x08\x0b\n\x0c\n\x04\x049\x02\0\x12\x04\xba\x02\x04%\n\r\n\x05\ - \x049\x02\0\x06\x12\x04\xba\x02\x04\x14\n\r\n\x05\x049\x02\0\x01\x12\x04\ - \xba\x02\x15\x20\n\r\n\x05\x049\x02\0\x03\x12\x04\xba\x02#$\n\x0c\n\x04\ - \x049\x02\x01\x12\x04\xbb\x02\x04)\n\r\n\x05\x049\x02\x01\x06\x12\x04\ - \xbb\x02\x04\x16\n\r\n\x05\x049\x02\x01\x01\x12\x04\xbb\x02\x17$\n\r\n\ - \x05\x049\x02\x01\x03\x12\x04\xbb\x02'(\n\x0c\n\x04\x049\x02\x02\x12\x04\ - \xbc\x02\x04.\n\r\n\x05\x049\x02\x02\x06\x12\x04\xbc\x02\x04\x18\n\r\n\ - \x05\x049\x02\x02\x01\x12\x04\xbc\x02\x19)\n\r\n\x05\x049\x02\x02\x03\ - \x12\x04\xbc\x02,-b\x06proto3\ + \x20issuer\x20side\n\n\r\n\x05\x040\x02\x08\x05\x12\x04\xe6\x01\x02\x08\ + \n\r\n\x05\x040\x02\x08\x01\x12\x04\xe6\x01\t\x1d\n\r\n\x05\x040\x02\x08\ + \x03\x12\x04\xe6\x01\x20!\n\x17\n\x04\x040\x02\t\x12\x04\xe8\x01\x02\x16\ + \x1a\t\x20Version\n\n\r\n\x05\x040\x02\t\x05\x12\x04\xe8\x01\x02\x08\n\r\ + \n\x05\x040\x02\t\x01\x12\x04\xe8\x01\t\x10\n\r\n\x05\x040\x02\t\x03\x12\ + \x04\xe8\x01\x13\x15\n\x0c\n\x02\x041\x12\x06\xea\x01\0\xec\x01\x01\n\ + \x0b\n\x03\x041\x01\x12\x04\xea\x01\x08(\n\x0c\n\x04\x041\x02\0\x12\x04\ + \xeb\x01\x02(\n\r\n\x05\x041\x02\0\x04\x12\x04\xeb\x01\x02\n\n\r\n\x05\ + \x041\x02\0\x06\x12\x04\xeb\x01\x0b\x1e\n\r\n\x05\x041\x02\0\x01\x12\x04\ + \xeb\x01\x1f#\n\r\n\x05\x041\x02\0\x03\x12\x04\xeb\x01&'\n\x0c\n\x02\x04\ + 2\x12\x06\xee\x01\0\xf2\x01\x01\n\x0b\n\x03\x042\x01\x12\x04\xee\x01\x08\ + \x1e\n\x0c\n\x04\x042\x02\0\x12\x04\xef\x01\x02\x1b\n\r\n\x05\x042\x02\0\ + \x05\x12\x04\xef\x01\x02\x07\n\r\n\x05\x042\x02\0\x01\x12\x04\xef\x01\ + \x08\x16\n\r\n\x05\x042\x02\0\x03\x12\x04\xef\x01\x19\x1a\n\x0c\n\x04\ + \x042\x02\x01\x12\x04\xf0\x01\x02\x1c\n\r\n\x05\x042\x02\x01\x05\x12\x04\ + \xf0\x01\x02\x07\n\r\n\x05\x042\x02\x01\x01\x12\x04\xf0\x01\x08\x17\n\r\ + \n\x05\x042\x02\x01\x03\x12\x04\xf0\x01\x1a\x1b\n\x0c\n\x04\x042\x02\x02\ + \x12\x04\xf1\x01\x02\x13\n\r\n\x05\x042\x02\x02\x05\x12\x04\xf1\x01\x02\ + \x07\n\r\n\x05\x042\x02\x02\x01\x12\x04\xf1\x01\x08\x0e\n\r\n\x05\x042\ + \x02\x02\x03\x12\x04\xf1\x01\x11\x12\n\n\n\x02\x043\x12\x04\xf3\x01\0)\n\ + \x0b\n\x03\x043\x01\x12\x04\xf3\x01\x08&\n\x0c\n\x02\x044\x12\x06\xf5\ + \x01\0\x8e\x02\x01\n\x0b\n\x03\x044\x01\x12\x04\xf5\x01\x08\x15\n\x0e\n\ + \x04\x044\x08\0\x12\x06\xf6\x01\x02\x8d\x02\x03\n\r\n\x05\x044\x08\0\x01\ + \x12\x04\xf6\x01\x08\x0b\n\x0c\n\x04\x044\x02\0\x12\x04\xf7\x01\x04#\n\r\ + \n\x05\x044\x02\0\x06\x12\x04\xf7\x01\x04\x13\n\r\n\x05\x044\x02\0\x01\ + \x12\x04\xf7\x01\x14\x1e\n\r\n\x05\x044\x02\0\x03\x12\x04\xf7\x01!\"\n\ + \x0c\n\x04\x044\x02\x01\x12\x04\xf8\x01\x04%\n\r\n\x05\x044\x02\x01\x06\ + \x12\x04\xf8\x01\x04\x14\n\r\n\x05\x044\x02\x01\x01\x12\x04\xf8\x01\x15\ + \x20\n\r\n\x05\x044\x02\x01\x03\x12\x04\xf8\x01#$\n\x0c\n\x04\x044\x02\ + \x02\x12\x04\xf9\x01\x04(\n\r\n\x05\x044\x02\x02\x06\x12\x04\xf9\x01\x04\ + \x17\n\r\n\x05\x044\x02\x02\x01\x12\x04\xf9\x01\x18#\n\r\n\x05\x044\x02\ + \x02\x03\x12\x04\xf9\x01&'\n\x0c\n\x04\x044\x02\x03\x12\x04\xfa\x01\x04)\ + \n\r\n\x05\x044\x02\x03\x06\x12\x04\xfa\x01\x04\x1b\n\r\n\x05\x044\x02\ + \x03\x01\x12\x04\xfa\x01\x1c$\n\r\n\x05\x044\x02\x03\x03\x12\x04\xfa\x01\ + '(\n\x0c\n\x04\x044\x02\x04\x12\x04\xfb\x01\x04)\n\r\n\x05\x044\x02\x04\ + \x06\x12\x04\xfb\x01\x04\x1b\n\r\n\x05\x044\x02\x04\x01\x12\x04\xfb\x01\ + \x1c$\n\r\n\x05\x044\x02\x04\x03\x12\x04\xfb\x01'(\n\x0c\n\x04\x044\x02\ + \x05\x12\x04\xfc\x01\x04/\n\r\n\x05\x044\x02\x05\x06\x12\x04\xfc\x01\x04\ + \x1e\n\r\n\x05\x044\x02\x05\x01\x12\x04\xfc\x01\x1f*\n\r\n\x05\x044\x02\ + \x05\x03\x12\x04\xfc\x01-.\n\x0c\n\x04\x044\x02\x06\x12\x04\xfd\x01\x041\ + \n\r\n\x05\x044\x02\x06\x06\x12\x04\xfd\x01\x04\x1a\n\r\n\x05\x044\x02\ + \x06\x01\x12\x04\xfd\x01\x1b,\n\r\n\x05\x044\x02\x06\x03\x12\x04\xfd\x01\ + /0\n\x0c\n\x04\x044\x02\x07\x12\x04\xfe\x01\x041\n\r\n\x05\x044\x02\x07\ + \x06\x12\x04\xfe\x01\x04\x1a\n\r\n\x05\x044\x02\x07\x01\x12\x04\xfe\x01\ + \x1b,\n\r\n\x05\x044\x02\x07\x03\x12\x04\xfe\x01/0\n\x0c\n\x04\x044\x02\ + \x08\x12\x04\xff\x01\x04\x1b\n\r\n\x05\x044\x02\x08\x06\x12\x04\xff\x01\ + \x04\x0f\n\r\n\x05\x044\x02\x08\x01\x12\x04\xff\x01\x10\x16\n\r\n\x05\ + \x044\x02\x08\x03\x12\x04\xff\x01\x19\x1a\n\x0c\n\x04\x044\x02\t\x12\x04\ + \x80\x02\x042\n\r\n\x05\x044\x02\t\x06\x12\x04\x80\x02\x04\x1a\n\r\n\x05\ + \x044\x02\t\x01\x12\x04\x80\x02\x1b,\n\r\n\x05\x044\x02\t\x03\x12\x04\ + \x80\x02/1\n\x0c\n\x04\x044\x02\n\x12\x04\x81\x02\x04*\n\r\n\x05\x044\ + \x02\n\x06\x12\x04\x81\x02\x04\x16\n\r\n\x05\x044\x02\n\x01\x12\x04\x81\ + \x02\x17$\n\r\n\x05\x044\x02\n\x03\x12\x04\x81\x02')\n\x0c\n\x04\x044\ + \x02\x0b\x12\x04\x82\x02\x04\"\n\r\n\x05\x044\x02\x0b\x06\x12\x04\x82\ + \x02\x04\x12\n\r\n\x05\x044\x02\x0b\x01\x12\x04\x82\x02\x13\x1c\n\r\n\ + \x05\x044\x02\x0b\x03\x12\x04\x82\x02\x1f!\n\x0c\n\x04\x044\x02\x0c\x12\ + \x04\x83\x02\x04<\n\r\n\x05\x044\x02\x0c\x06\x12\x04\x83\x02\x04\x1f\n\r\ + \n\x05\x044\x02\x0c\x01\x12\x04\x83\x02\x206\n\r\n\x05\x044\x02\x0c\x03\ + \x12\x04\x83\x029;\n\x0c\n\x04\x044\x02\r\x12\x04\x84\x02\x04.\n\r\n\x05\ + \x044\x02\r\x06\x12\x04\x84\x02\x04\x18\n\r\n\x05\x044\x02\r\x01\x12\x04\ + \x84\x02\x19(\n\r\n\x05\x044\x02\r\x03\x12\x04\x84\x02+-\n\x0c\n\x04\x04\ + 4\x02\x0e\x12\x04\x85\x02\x046\n\r\n\x05\x044\x02\x0e\x06\x12\x04\x85\ + \x02\x04\x1c\n\r\n\x05\x044\x02\x0e\x01\x12\x04\x85\x02\x1d0\n\r\n\x05\ + \x044\x02\x0e\x03\x12\x04\x85\x0235\n\x0c\n\x04\x044\x02\x0f\x12\x04\x86\ + \x02\x048\n\r\n\x05\x044\x02\x0f\x06\x12\x04\x86\x02\x04\x1d\n\r\n\x05\ + \x044\x02\x0f\x01\x12\x04\x86\x02\x1e2\n\r\n\x05\x044\x02\x0f\x03\x12\ + \x04\x86\x0257\n\x0c\n\x04\x044\x02\x10\x12\x04\x87\x02\x044\n\r\n\x05\ + \x044\x02\x10\x06\x12\x04\x87\x02\x04\x1b\n\r\n\x05\x044\x02\x10\x01\x12\ + \x04\x87\x02\x1c.\n\r\n\x05\x044\x02\x10\x03\x12\x04\x87\x0213\n\x0c\n\ + \x04\x044\x02\x11\x12\x04\x88\x02\x040\n\r\n\x05\x044\x02\x11\x06\x12\ + \x04\x88\x02\x04\x19\n\r\n\x05\x044\x02\x11\x01\x12\x04\x88\x02\x1a*\n\r\ + \n\x05\x044\x02\x11\x03\x12\x04\x88\x02-/\n\x0c\n\x04\x044\x02\x12\x12\ + \x04\x89\x02\x044\n\r\n\x05\x044\x02\x12\x06\x12\x04\x89\x02\x04\x1b\n\r\ + \n\x05\x044\x02\x12\x01\x12\x04\x89\x02\x1c.\n\r\n\x05\x044\x02\x12\x03\ + \x12\x04\x89\x0213\n\x0c\n\x04\x044\x02\x13\x12\x04\x8a\x02\x04@\n\r\n\ + \x05\x044\x02\x13\x06\x12\x04\x8a\x02\x04!\n\r\n\x05\x044\x02\x13\x01\ + \x12\x04\x8a\x02\":\n\r\n\x05\x044\x02\x13\x03\x12\x04\x8a\x02=?\n\x0c\n\ + \x04\x044\x02\x14\x12\x04\x8b\x02\x044\n\r\n\x05\x044\x02\x14\x06\x12\ + \x04\x8b\x02\x04\x1b\n\r\n\x05\x044\x02\x14\x01\x12\x04\x8b\x02\x1c.\n\r\ + \n\x05\x044\x02\x14\x03\x12\x04\x8b\x0213\n\x0c\n\x04\x044\x02\x15\x12\ + \x04\x8c\x02\x042\n\r\n\x05\x044\x02\x15\x06\x12\x04\x8c\x02\x04\x1a\n\r\ + \n\x05\x044\x02\x15\x01\x12\x04\x8c\x02\x1b,\n\r\n\x05\x044\x02\x15\x03\ + \x12\x04\x8c\x02/1\nF\n\x02\x045\x12\x06\x91\x02\0\x9c\x02\x01\x1a8\x20M\ + essage\x20with\x20data\x20required\x20to\x20execute\x20`call`\x20operati\ + on\n\n\x0b\n\x03\x045\x01\x12\x04\x91\x02\x08\x17\n\x0c\n\x04\x045\x02\0\ + \x12\x04\x92\x02\x02\x11\n\r\n\x05\x045\x02\0\x05\x12\x04\x92\x02\x02\ + \x07\n\r\n\x05\x045\x02\0\x01\x12\x04\x92\x02\x08\x0c\n\r\n\x05\x045\x02\ + \0\x03\x12\x04\x92\x02\x0f\x10\n\x0c\n\x04\x045\x02\x01\x12\x04\x93\x02\ + \x02\x0f\n\r\n\x05\x045\x02\x01\x05\x12\x04\x93\x02\x02\x07\n\r\n\x05\ + \x045\x02\x01\x01\x12\x04\x93\x02\x08\n\n\r\n\x05\x045\x02\x01\x03\x12\ + \x04\x93\x02\r\x0e\n\x0c\n\x04\x045\x02\x02\x12\x04\x94\x02\x02\x11\n\r\ + \n\x05\x045\x02\x02\x05\x12\x04\x94\x02\x02\x07\n\r\n\x05\x045\x02\x02\ + \x01\x12\x04\x94\x02\x08\x0c\n\r\n\x05\x045\x02\x02\x03\x12\x04\x94\x02\ + \x0f\x10\n\x0c\n\x04\x045\x02\x03\x12\x04\x95\x02\x02\x16\n\r\n\x05\x045\ + \x02\x03\x05\x12\x04\x95\x02\x02\x08\n\r\n\x05\x045\x02\x03\x01\x12\x04\ + \x95\x02\t\x11\n\r\n\x05\x045\x02\x03\x03\x12\x04\x95\x02\x14\x15\n\x0c\ + \n\x04\x045\x02\x04\x12\x04\x96\x02\x02\x15\n\r\n\x05\x045\x02\x04\x05\ + \x12\x04\x96\x02\x02\x07\n\r\n\x05\x045\x02\x04\x01\x12\x04\x96\x02\x08\ + \x10\n\r\n\x05\x045\x02\x04\x03\x12\x04\x96\x02\x13\x14\n\x0c\n\x04\x045\ + \x02\x05\x12\x04\x97\x02\x02\x12\n\r\n\x05\x045\x02\x05\x05\x12\x04\x97\ + \x02\x02\x07\n\r\n\x05\x045\x02\x05\x01\x12\x04\x97\x02\x08\r\n\r\n\x05\ + \x045\x02\x05\x03\x12\x04\x97\x02\x10\x11\n\x0c\n\x04\x045\x02\x06\x12\ + \x04\x98\x02\x02)\n\r\n\x05\x045\x02\x06\x04\x12\x04\x98\x02\x02\n\n\r\n\ + \x05\x045\x02\x06\x06\x12\x04\x98\x02\x0b\x19\n\r\n\x05\x045\x02\x06\x01\ + \x12\x04\x98\x02\x1a$\n\r\n\x05\x045\x02\x06\x03\x12\x04\x98\x02'(\n\x0c\ + \n\x04\x045\x02\x07\x12\x04\x99\x02\x02\x12\n\r\n\x05\x045\x02\x07\x05\ + \x12\x04\x99\x02\x02\x06\n\r\n\x05\x045\x02\x07\x01\x12\x04\x99\x02\x07\ + \r\n\r\n\x05\x045\x02\x07\x03\x12\x04\x99\x02\x10\x11\n\x0c\n\x04\x045\ + \x02\x08\x12\x04\x9a\x02\x02\x13\n\r\n\x05\x045\x02\x08\x05\x12\x04\x9a\ + \x02\x02\x08\n\r\n\x05\x045\x02\x08\x01\x12\x04\x9a\x02\t\x0e\n\r\n\x05\ + \x045\x02\x08\x03\x12\x04\x9a\x02\x11\x12\n\x0c\n\x04\x045\x02\t\x12\x04\ + \x9b\x02\x02\x18\n\r\n\x05\x045\x02\t\x05\x12\x04\x9b\x02\x02\x06\n\r\n\ + \x05\x045\x02\t\x01\x12\x04\x9b\x02\x07\x12\n\r\n\x05\x045\x02\t\x03\x12\ + \x04\x9b\x02\x15\x17\nH\n\x02\x046\x12\x06\x9f\x02\0\xa8\x02\x01\x1a:\ + \x20Message\x20with\x20data\x20required\x20to\x20execute\x20`create`\x20\ + operation\n\n\x0b\n\x03\x046\x01\x12\x04\x9f\x02\x08\x19\n\x0c\n\x04\x04\ + 6\x02\0\x12\x04\xa0\x02\x02\x11\n\r\n\x05\x046\x02\0\x05\x12\x04\xa0\x02\ + \x02\x07\n\r\n\x05\x046\x02\0\x01\x12\x04\xa0\x02\x08\x0c\n\r\n\x05\x046\ + \x02\0\x03\x12\x04\xa0\x02\x0f\x10\n\x0c\n\x04\x046\x02\x01\x12\x04\xa1\ + \x02\x02\x11\n\r\n\x05\x046\x02\x01\x05\x12\x04\xa1\x02\x02\x07\n\r\n\ + \x05\x046\x02\x01\x01\x12\x04\xa1\x02\x08\x0c\n\r\n\x05\x046\x02\x01\x03\ + \x12\x04\xa1\x02\x0f\x10\n\x0c\n\x04\x046\x02\x02\x12\x04\xa2\x02\x02\ + \x16\n\r\n\x05\x046\x02\x02\x05\x12\x04\xa2\x02\x02\x08\n\r\n\x05\x046\ + \x02\x02\x01\x12\x04\xa2\x02\t\x11\n\r\n\x05\x046\x02\x02\x03\x12\x04\ + \xa2\x02\x14\x15\n\x0c\n\x04\x046\x02\x03\x12\x04\xa3\x02\x02\x15\n\r\n\ + \x05\x046\x02\x03\x05\x12\x04\xa3\x02\x02\x07\n\r\n\x05\x046\x02\x03\x01\ + \x12\x04\xa3\x02\x08\x10\n\r\n\x05\x046\x02\x03\x03\x12\x04\xa3\x02\x13\ + \x14\n\x0c\n\x04\x046\x02\x04\x12\x04\xa4\x02\x02\x12\n\r\n\x05\x046\x02\ + \x04\x05\x12\x04\xa4\x02\x02\x07\n\r\n\x05\x046\x02\x04\x01\x12\x04\xa4\ + \x02\x08\r\n\r\n\x05\x046\x02\x04\x03\x12\x04\xa4\x02\x10\x11\n\x0c\n\ + \x04\x046\x02\x05\x12\x04\xa5\x02\x02)\n\r\n\x05\x046\x02\x05\x04\x12\ + \x04\xa5\x02\x02\n\n\r\n\x05\x046\x02\x05\x06\x12\x04\xa5\x02\x0b\x19\n\ + \r\n\x05\x046\x02\x05\x01\x12\x04\xa5\x02\x1a$\n\r\n\x05\x046\x02\x05\ + \x03\x12\x04\xa5\x02'(\n\x0c\n\x04\x046\x02\x06\x12\x04\xa6\x02\x02\x12\ + \n\r\n\x05\x046\x02\x06\x05\x12\x04\xa6\x02\x02\x06\n\r\n\x05\x046\x02\ + \x06\x01\x12\x04\xa6\x02\x07\r\n\r\n\x05\x046\x02\x06\x03\x12\x04\xa6\ + \x02\x10\x11\n\x0c\n\x04\x046\x02\x07\x12\x04\xa7\x02\x02\x13\n\r\n\x05\ + \x046\x02\x07\x05\x12\x04\xa7\x02\x02\x08\n\r\n\x05\x046\x02\x07\x01\x12\ + \x04\xa7\x02\t\x0e\n\r\n\x05\x046\x02\x07\x03\x12\x04\xa7\x02\x11\x12\n3\ + \n\x02\x047\x12\x06\xab\x02\0\xae\x02\x01\x1a%\x20Request\x20to\x20execu\ + te\x20`call`\x20operation\n\n\x0b\n\x03\x047\x01\x12\x04\xab\x02\x08\x18\ + \n\x0c\n\x04\x047\x02\0\x12\x04\xac\x02\x02\x1d\n\r\n\x05\x047\x02\0\x06\ + \x12\x04\xac\x02\x02\x11\n\r\n\x05\x047\x02\0\x01\x12\x04\xac\x02\x12\ + \x18\n\r\n\x05\x047\x02\0\x03\x12\x04\xac\x02\x1b\x1c\n\x0c\n\x04\x047\ + \x02\x01\x12\x04\xad\x02\x02!\n\r\n\x05\x047\x02\x01\x06\x12\x04\xad\x02\ + \x02\x14\n\r\n\x05\x047\x02\x01\x01\x12\x04\xad\x02\x15\x1c\n\r\n\x05\ + \x047\x02\x01\x03\x12\x04\xad\x02\x1f\x20\n5\n\x02\x048\x12\x06\xb1\x02\ + \0\xb4\x02\x01\x1a'\x20Request\x20to\x20execute\x20`create`\x20operation\ + \n\n\x0b\n\x03\x048\x01\x12\x04\xb1\x02\x08\x1a\n\x0c\n\x04\x048\x02\0\ + \x12\x04\xb2\x02\x02\x1f\n\r\n\x05\x048\x02\0\x06\x12\x04\xb2\x02\x02\ + \x13\n\r\n\x05\x048\x02\0\x01\x12\x04\xb2\x02\x14\x1a\n\r\n\x05\x048\x02\ + \0\x03\x12\x04\xb2\x02\x1d\x1e\n\x0c\n\x04\x048\x02\x01\x12\x04\xb3\x02\ + \x02!\n\r\n\x05\x048\x02\x01\x06\x12\x04\xb3\x02\x02\x14\n\r\n\x05\x048\ + \x02\x01\x01\x12\x04\xb3\x02\x15\x1c\n\r\n\x05\x048\x02\x01\x03\x12\x04\ + \xb3\x02\x1f\x20\n1\n\x02\x049\x12\x06\xb7\x02\0\xb9\x02\x01\x1a#\x20Req\ + uest\x20to\x20obtain\x20node\x20public\x20key\n\n\x0b\n\x03\x049\x01\x12\ + \x04\xb7\x02\x08\x1c\n\x0c\n\x04\x049\x02\0\x12\x04\xb8\x02\x02\x19\n\r\ + \n\x05\x049\x02\0\x05\x12\x04\xb8\x02\x02\x08\n\r\n\x05\x049\x02\0\x01\ + \x12\x04\xb8\x02\t\x14\n\r\n\x05\x049\x02\0\x03\x12\x04\xb8\x02\x17\x18\ + \n+\n\x02\x04:\x12\x04\xbc\x02\06\x1a\x1f\x20Response\x20with\x20node\ + \x20public\x20key\n\n\x0b\n\x03\x04:\x01\x12\x04\xbc\x02\x08\x1d\n\x0c\n\ + \x04\x04:\x02\0\x12\x04\xbc\x02\x204\n\r\n\x05\x04:\x02\0\x05\x12\x04\ + \xbc\x02\x20%\n\r\n\x05\x04:\x02\0\x01\x12\x04\xbc\x02&/\n\r\n\x05\x04:\ + \x02\0\x03\x12\x04\xbc\x0223\n\x0c\n\x02\x04;\x12\x06\xbe\x02\0\xc2\x02\ + \x01\n\x0b\n\x03\x04;\x01\x12\x04\xbe\x02\x08\x11\n\x0c\n\x04\x04;\x02\0\ + \x12\x04\xbf\x02\x02\x19\n\r\n\x05\x04;\x02\0\x05\x12\x04\xbf\x02\x02\ + \x08\n\r\n\x05\x04;\x02\0\x01\x12\x04\xbf\x02\t\x14\n\r\n\x05\x04;\x02\0\ + \x03\x12\x04\xbf\x02\x17\x18\n\x0c\n\x04\x04;\x02\x01\x12\x04\xc0\x02\ + \x02\x1b\n\r\n\x05\x04;\x02\x01\x05\x12\x04\xc0\x02\x02\x08\n\r\n\x05\ + \x04;\x02\x01\x01\x12\x04\xc0\x02\t\x16\n\r\n\x05\x04;\x02\x01\x03\x12\ + \x04\xc0\x02\x19\x1a\n\x0c\n\x04\x04;\x02\x02\x12\x04\xc1\x02\x02\x1a\n\ + \r\n\x05\x04;\x02\x02\x05\x12\x04\xc1\x02\x02\x07\n\r\n\x05\x04;\x02\x02\ + \x01\x12\x04\xc1\x02\x08\x15\n\r\n\x05\x04;\x02\x02\x03\x12\x04\xc1\x02\ + \x18\x19\n\x0c\n\x02\x04<\x12\x06\xc3\x02\0\xc5\x02\x01\n\x0b\n\x03\x04<\ + \x01\x12\x04\xc3\x02\x08\x1a\n\x0c\n\x04\x04<\x02\0\x12\x04\xc4\x02\x02\ + \x20\n\r\n\x05\x04<\x02\0\x04\x12\x04\xc4\x02\x02\n\n\r\n\x05\x04<\x02\0\ + \x06\x12\x04\xc4\x02\x0b\x14\n\r\n\x05\x04<\x02\0\x01\x12\x04\xc4\x02\ + \x15\x1b\n\r\n\x05\x04<\x02\0\x03\x12\x04\xc4\x02\x1e\x1f\n\x0c\n\x02\ + \x04=\x12\x06\xc7\x02\0\xcd\x02\x01\n\x0b\n\x03\x04=\x01\x12\x04\xc7\x02\ + \x08\x12\n\x0e\n\x04\x04=\x08\0\x12\x06\xc8\x02\x02\xcc\x02\x03\n\r\n\ + \x05\x04=\x08\0\x01\x12\x04\xc8\x02\x08\x0b\n\x0c\n\x04\x04=\x02\0\x12\ + \x04\xc9\x02\x04%\n\r\n\x05\x04=\x02\0\x06\x12\x04\xc9\x02\x04\x14\n\r\n\ + \x05\x04=\x02\0\x01\x12\x04\xc9\x02\x15\x20\n\r\n\x05\x04=\x02\0\x03\x12\ + \x04\xc9\x02#$\n\x0c\n\x04\x04=\x02\x01\x12\x04\xca\x02\x04)\n\r\n\x05\ + \x04=\x02\x01\x06\x12\x04\xca\x02\x04\x16\n\r\n\x05\x04=\x02\x01\x01\x12\ + \x04\xca\x02\x17$\n\r\n\x05\x04=\x02\x01\x03\x12\x04\xca\x02'(\n\x0c\n\ + \x04\x04=\x02\x02\x12\x04\xcb\x02\x04.\n\r\n\x05\x04=\x02\x02\x06\x12\ + \x04\xcb\x02\x04\x18\n\r\n\x05\x04=\x02\x02\x01\x12\x04\xcb\x02\x19)\n\r\ + \n\x05\x04=\x02\x02\x03\x12\x04\xcb\x02,-b\x06proto3\ "; static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { diff --git a/sgxvm/src/storage.rs b/sgxvm/src/storage.rs index 5d00d2b6..8c915205 100644 --- a/sgxvm/src/storage.rs +++ b/sgxvm/src/storage.rs @@ -217,7 +217,7 @@ impl Storage for FFIStorage { } fn get_account_code_hash(&self, address: &H160) -> Result { - let encoded_request = coder::encode_get_account_code_hash(&address); + let encoded_request = coder::encode_get_account_code_hash(address); if let Some(result) = querier::make_request(self.querier, encoded_request) { match protobuf::parse_from_bytes::(result.as_slice()) { Err(err) => { diff --git a/tests/solidity/contracts/ComplianceBridge.sol b/tests/solidity/contracts/ComplianceBridge.sol index 8472d921..bb2f93ce 100644 --- a/tests/solidity/contracts/ComplianceBridge.sol +++ b/tests/solidity/contracts/ComplianceBridge.sol @@ -64,12 +64,17 @@ interface IComplianceBridge { function getRevocationTreeRoot() external returns (bytes memory); function getIssuanceTreeRoot() external returns (bytes memory); + + function revokeVerification(bytes memory verificationId) external; + + function convertCredential(bytes memory verificationId, bytes memory publicKey) external returns (bytes memory); } contract ComplianceProxy { event VerificationResponse(bool success, bytes data); event HasVerificationResponse(bool success, bytes data); event GetVerificationDataResponse(bool success, bytes data); + event RevocationResponse(bool success, bytes data); uint32 public constant VERIFICATION_TYPE = 2; @@ -198,4 +203,11 @@ contract ComplianceProxy { (bool success, bytes memory data) = address(1028).staticcall(payload); return data; } + + function revokeVerification(bytes memory verificationId) public{ + bytes memory payload = abi.encodeCall(IComplianceBridge.revokeVerification,(verificationId)); + (bool success, bytes memory data) = address(1028).call(payload); + + emit RevocationResponse(success, data); + } } diff --git a/tests/solidity/test/ComplianceBridge.js b/tests/solidity/test/ComplianceBridge.js index 93cf8b49..ffb2910b 100644 --- a/tests/solidity/test/ComplianceBridge.js +++ b/tests/solidity/test/ComplianceBridge.js @@ -162,6 +162,64 @@ describe('ComplianceBridge', () => { expect(rootAfter).to.be.not.equal(rootBefore) }) + it('Should be able to revoke verification', async () => { + const [signer] = await ethers.getSigners() + const userPublicKey = ethers.constants.HashZero // [0; 32] is valid BJJ public key + + const tx = await sendShieldedTransaction( + signer, + contract.address, + contract.interface.encodeFunctionData('markUserAsVerifiedV2', [signer.address, userPublicKey]), + 0, true + ) + const res = await tx.wait() + const parsedLog = contract.interface.parseLog(res.logs[0]) + const issuedVerificationId = parsedLog.args.data + expect(parsedLog.args.success).to.be.true + expect(issuedVerificationId.length).to.be.greaterThan(0) + + const issuanceRootBeforeResp = await sendShieldedQuery( + signer.provider, + contract.address, + contract.interface.encodeFunctionData('getIssuanceRoot') + ) + const issuanceRootBefore = contract.interface.decodeFunctionResult('getIssuanceRoot', issuanceRootBeforeResp)[0] + + const revocationRootBeforeResp = await sendShieldedQuery( + signer.provider, + contract.address, + contract.interface.encodeFunctionData('getRevocationRoot') + ) + const revocationRootBefore = contract.interface.decodeFunctionResult('getIssuanceRoot', revocationRootBeforeResp)[0] + + const revokeTx = await sendShieldedTransaction( + signer, + contract.address, + contract.interface.encodeFunctionData('revokeVerification', [issuedVerificationId]), + 0, true + ) + const revokeRes = await revokeTx.wait() + const revokeLog = contract.interface.parseLog(revokeRes.logs[0]) + expect(revokeLog.args.success).to.be.true + + const issuanceRootAfterResp = await sendShieldedQuery( + signer.provider, + contract.address, + contract.interface.encodeFunctionData('getIssuanceRoot') + ) + const issuanceRootAfter = contract.interface.decodeFunctionResult('getIssuanceRoot', issuanceRootAfterResp)[0] + + const revocationRootAfterResp = await sendShieldedQuery( + signer.provider, + contract.address, + contract.interface.encodeFunctionData('getRevocationRoot') + ) + const revocationRootAfter = contract.interface.decodeFunctionResult('getIssuanceRoot', revocationRootAfterResp)[0] + + expect(issuanceRootAfter).to.be.equal(issuanceRootBefore) + expect(revocationRootAfter).to.be.not.equal(revocationRootBefore) + }) + describe('With verified user', async () => { let verified beforeEach(async () => { diff --git a/tests/solidity/test/SDI.js b/tests/solidity/test/SDI.js index 0ef70de5..13b71efd 100644 --- a/tests/solidity/test/SDI.js +++ b/tests/solidity/test/SDI.js @@ -95,6 +95,7 @@ describe('SDI tests', () => { let userKeypair let userSigner; let verificationId; + let mainSigner; let provider; @@ -103,6 +104,7 @@ describe('SDI tests', () => { before(async () => { provider = new ethers.providers.JsonRpcProvider('http://localhost:8547'); // Unencrypted rpc url const signer = new ethers.Wallet(DEFAULT_PK, provider); + mainSigner = signer; contract = await ethers.getContractAt('ComplianceProxy', DEFAULT_PROXY_CONTRACT_ADDRESS, signer); // Construct user signer @@ -138,13 +140,92 @@ describe('SDI tests', () => { const nonRevocationProof = await getNonRevocationProofInput(provider, credentialHash); const verificationData = await frontendContract.getVerificationData(userSigner.address); - const encodedIssuer = BigInt(verificationData[0].issuerAddress); + const index = verificationData.length - 1; + const encodedIssuer = BigInt(verificationData[index].issuerAddress); const credentialElements = [ - `${verificationData[0].verificationType}`, + `${verificationData[index].verificationType}`, encodedIssuer.toString(), - `${verificationData[0].expirationTimestamp}`, - `${verificationData[0].issuanceTimestamp}`, + `${verificationData[index].expirationTimestamp}`, + `${verificationData[index].issuanceTimestamp}`, + ]; + + const holderSignature = await signMiMC(userKeypair.seed, BigInt(credentialHash)); + + const input = { + holderPrivateKey: userKeypair.privateKey, + ...issuanceProof, + ...nonRevocationProof, + credentialElements, + allowedIssuers, + currentTimestamp, + S: holderSignature.S, + Rx: holderSignature.R8[0], + Ry: holderSignature.R8[1], + }; + + const proofFiles = getProofFiles(); + const {proof, publicSignals} = await snarkjs.plonk.fullProve(input, proofFiles.sdi.wasm, proofFiles.sdi.zkey); + + const calldata = await snarkjs.plonk.exportSolidityCallData(proof, publicSignals); + const [encodedProof] = calldata.split(',') + const proofBytes = encodedProof.trim() + + const isVerifiedOnChain = await verifierContract.verifyProof(proofBytes, publicSignals); + expect(isVerifiedOnChain).to.be.true; + }); + + it('Should be able to convert V1 credential to V2', async () => { + // add new V1 verification + const tx = await contract.markUserAsVerified(userSigner.address, {gasLimit: 500_000}); + const res = await tx.wait(); + + expect(res.events[0].args.success).to.be.true + verificationId = res.events[0].args.data; + + // convert credential into V2 + const encodedPublicKey = ethers.utils.hexlify(userKeypair.compressedKey) + + const abi = [ + "function convertCredential(bytes memory verificationId, bytes memory publicKey) external returns (bytes memory)" + ]; + + const iface = new ethers.utils.Interface(abi); + const encodedConvertParams = iface.encodeFunctionData("convertCredential", [verificationId, encodedPublicKey]); + + // fund user account to convert credential + const fundTx = await mainSigner.sendTransaction({ + to: userSigner.address, + value: ethers.utils.parseEther("1"), + }); + await fundTx.wait(); + + console.log('user address: ', userSigner.address) + + const convertTx = await userSigner.sendTransaction({ + to: "0x0000000000000000000000000000000000000404", + data: encodedConvertParams, + gasLimit: 500_000, + }) + await convertTx.wait(); + + const expectedIssuer = await frontendContract.issuer(); + const allowedIssuers = [BigInt(expectedIssuer).toString(), "0", "0", "0", "0"]; + const currentTimestamp = Date.now(); // should be `block.timestamp` + + const credentialHash = await recoverCredentialHash(provider, verificationId); + const issuanceProof = await getIssuanceProofInput(provider, credentialHash); + const nonRevocationProof = await getNonRevocationProofInput(provider, credentialHash); + + const verificationData = await frontendContract.getVerificationData(userSigner.address); + const index = verificationData.length - 1; + const encodedIssuer = BigInt(verificationData[index].issuerAddress); + + const credentialElements = [ + `${verificationData[index].verificationType}`, + encodedIssuer.toString(), + `${verificationData[index].expirationTimestamp}`, + `${verificationData[index].issuanceTimestamp}`, ]; const holderSignature = await signMiMC(userKeypair.seed, BigInt(credentialHash)); diff --git a/x/compliance/client/cli/query.go b/x/compliance/client/cli/query.go index 8c920653..a69ee25d 100644 --- a/x/compliance/client/cli/query.go +++ b/x/compliance/client/cli/query.go @@ -30,6 +30,8 @@ func GetQueryCmd() *cobra.Command { CmdGetIssuersDetails(), CmdGetVerificationDetails(), CmdGetVerificationsDetails(), + CmdGetHolderByVerificationId(), + CmdGetHolderPublicKey(), ) return cmd @@ -253,3 +255,57 @@ func CmdGetVerificationsDetails() *cobra.Command { return cmd } + +func CmdGetHolderByVerificationId() *cobra.Command { + cmd := &cobra.Command{ + Use: "get-verification-holder [hex-verification-id]", + Short: "Returns holder by verification id", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryHolderByVerificationIdRequest{ + VerificationId: args[0], + } + + resp, err := queryClient.VerificationHolder(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(resp) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "verification details") + + return cmd +} + +func CmdGetHolderPublicKey() *cobra.Command { + cmd := &cobra.Command{ + Use: "get-holder-public-key [userAddress]", + Short: "Returns holder by verification id", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryAttachedHolderPublicKeyRequest{ + Address: args[0], + } + + resp, err := queryClient.AttachedHolderPublicKey(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(resp) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "verification details") + + return cmd +} diff --git a/x/compliance/keeper/keeper.go b/x/compliance/keeper/keeper.go index 12168add..aeadc64e 100644 --- a/x/compliance/keeper/keeper.go +++ b/x/compliance/keeper/keeper.go @@ -265,6 +265,10 @@ func (k Keeper) AddVerificationDetails(ctx sdk.Context, userAddress sdk.AccAddre } func (k Keeper) addVerificationDetailsInternal(ctx sdk.Context, userAddress sdk.AccAddress, issuerAddress sdk.AccAddress, verificationType types.VerificationType, details *types.VerificationDetails) ([]byte, error) { + if err := details.ValidateSize(); err != nil { + return nil, errors.Wrap(types.ErrInvalidParam, err.Error()) + } + isAddressVerified, err := k.IsAddressVerified(ctx, issuerAddress) if err != nil { return nil, err @@ -279,7 +283,7 @@ func (k Keeper) addVerificationDetailsInternal(ctx sdk.Context, userAddress sdk. } details.Type = verificationType if details.IssuanceTimestamp < 1 || (details.ExpirationTimestamp > 0 && details.IssuanceTimestamp >= details.ExpirationTimestamp) { - return nil, errors.Wrap(types.ErrInvalidParam, "invalid issuance timestamp") + return nil, errors.Wrap(types.ErrInvalidParam, "invalid issuance timestamp. Should be less than expiration timestamp.") } if len(details.OriginalData) < 1 { return nil, errors.Wrap(types.ErrInvalidParam, "empty proof data") @@ -340,6 +344,10 @@ func (k Keeper) SetVerificationDetails( verificationDetailsId []byte, details *types.VerificationDetails, ) error { + if err := details.ValidateSize(); err != nil { + return errors.Wrap(types.ErrInvalidParam, err.Error()) + } + verificationDetailsStore := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixVerificationDetails) if verificationDetailsStore.Has(verificationDetailsId) { return errors.Wrap(types.ErrInvalidParam, "provided verification details already in storage") @@ -395,6 +403,23 @@ func (k Keeper) SetVerificationDetails( return nil } +func (k Keeper) RevokeVerification(ctx sdk.Context, verificationDetailsId []byte, issuerAddress sdk.AccAddress) error { + verificationDetails, err := k.GetVerificationDetails(ctx, verificationDetailsId) + if err != nil { + return err + } + + if verificationDetails.IsRevoked { + return errors.Wrap(types.ErrInvalidParam, "verification was already revoked") + } + + if verificationDetails.IssuerAddress != issuerAddress.String() { + return errors.Wrap(types.ErrInvalidParam, "caller is not verification issuer") + } + + return k.MarkVerificationDetailsAsRevoked(ctx, verificationDetailsId) +} + func (k Keeper) MarkVerificationDetailsAsRevoked( ctx sdk.Context, verificationDetailsId []byte, @@ -1003,6 +1028,98 @@ func (k Keeper) GetPubKeyByVerificationId(ctx sdk.Context, verificationId []byte return store.Get(verificationId) } +// IsVerificationRevoked checks if verification with provided verification id is revoked or its issuer +// was not verified or was removed. +func (k Keeper) IsVerificationRevoked(ctx sdk.Context, verificationId []byte) (bool, error) { + verificationDetails, err := k.GetVerificationDetails(ctx, verificationId) + if err != nil { + return false, err + } + + if verificationDetails.IsRevoked { + return true, nil + } + + issuerAddress, err := sdk.AccAddressFromBech32(verificationDetails.IssuerAddress) + addressDetails, err := k.GetAddressDetails(ctx, issuerAddress) + if err != nil { + return false, err + } + + if addressDetails.IsRevoked || !addressDetails.IsVerified { + return true, nil + } + + return false, nil +} + +func (k Keeper) ConvertCredential(ctx sdk.Context, verificationId []byte, publicKeyToSet []byte, caller sdk.AccAddress) error { + // Check if signer is owner of credential + credentialOwner := k.getHolderByVerificationId(ctx, verificationId) + if !credentialOwner.Equals(caller) { + return errors.Wrap(types.ErrBadRequest, "signer is not credential holder") + } + + var holderPublicKey []byte + holderPublicKey = k.GetHolderPublicKey(ctx, caller) + if holderPublicKey == nil { + // validate provided public key + xCoordPublicKey, err := types.ExtractXCoordinate(publicKeyToSet, false) + if err != nil { + return errors.Wrapf(types.ErrInvalidParam, "cannot parse provided public key: (%s)", err) + } + holderPublicKey = xCoordPublicKey.Bytes() + } + + err := k.LinkVerificationIdToPubKey(ctx, holderPublicKey, verificationId) + if err != nil { + return err + } + + isVerificationRevoked, err := k.IsVerificationRevoked(ctx, verificationId) + if err != nil { + return err + } + if isVerificationRevoked { + return errors.Wrap(types.ErrBadRequest, "credential was revoked") + } + + details, err := k.GetVerificationDetails(ctx, verificationId) + if err != nil { + return err + } + + issuerAddress, err := sdk.AccAddressFromBech32(details.IssuerAddress) + if err != nil { + return err + } + + credentialValue := &types.ZKCredential{ + Type: details.Type, + IssuerAddress: issuerAddress.Bytes(), + HolderPublicKey: holderPublicKey, + ExpirationTimestamp: details.ExpirationTimestamp, + IssuanceTimestamp: details.IssuanceTimestamp, + } + credentialHash, err := credentialValue.Hash() + if err != nil { + return err + } + + isIncluded, err := k.IsIncludedInIssuanceTree(ctx, credentialHash) + if err != nil { + return err + } + + if !isIncluded { + if err = k.AddCredentialHashToIssued(ctx, credentialHash); err != nil { + return err + } + } + + return nil +} + func closeIteratorOrPanic(iterator sdk.Iterator) { err := iterator.Close() if err != nil { diff --git a/x/compliance/keeper/keeper_test.go b/x/compliance/keeper/keeper_test.go index a2a6f565..59627ede 100644 --- a/x/compliance/keeper/keeper_test.go +++ b/x/compliance/keeper/keeper_test.go @@ -947,3 +947,23 @@ func (suite *KeeperTestSuite) TestAddVerificationDetailsV2() { }) } } + +func (suite *KeeperTestSuite) TestHugeOriginalData() { + user := tests.RandomAccAddress() + issuer := tests.RandomAccAddress() + issuerDetails := &types.IssuerDetails{Creator: tests.RandomAccAddress().String(), Name: "testIssuer"} + err := suite.keeper.SetIssuerDetails(suite.ctx, issuer, issuerDetails) + suite.Require().NoError(err) + + verificationDetails := &types.VerificationDetails{ + IssuerAddress: issuer.String(), + OriginChain: "test chain", + IssuanceTimestamp: 1712018692, + ExpirationTimestamp: 1715018692, + OriginalData: make([]byte, 10000000), + } + verificationId := hexutils.HexToBytes("83456ef3b8ea6777da69d1509cf51861985e2b4e24cf7f5d4c5080996bf8cf4e") + err = suite.keeper.SetVerificationDetails(suite.ctx, user, verificationId, verificationDetails) + suite.Require().Error(err) + suite.Require().ErrorContains(err, "original data too long") +} diff --git a/x/compliance/keeper/msg_server.go b/x/compliance/keeper/msg_server.go index 2bf035d7..d76436d7 100644 --- a/x/compliance/keeper/msg_server.go +++ b/x/compliance/keeper/msg_server.go @@ -142,7 +142,6 @@ func (k msgServer) HandleRevokeVerification(goCtx context.Context, msg *types.Ms } } - verificationDetails.IsRevoked = true if err = k.MarkVerificationDetailsAsRevoked(ctx, msg.VerificationId); err != nil { return nil, err } @@ -362,15 +361,19 @@ func (k msgServer) HandleConvertCredential(goCtx context.Context, msg *types.Msg return nil, errors.Wrap(types.ErrBadRequest, "holder public key not found. Please attach it") } - details, err := k.GetVerificationDetails(ctx, msg.VerificationId) + isVerificationRevoked, err := k.IsVerificationRevoked(ctx, msg.VerificationId) if err != nil { return nil, err } - - if details.IsRevoked { + if isVerificationRevoked { return nil, errors.Wrap(types.ErrBadRequest, "credential was revoked") } + details, err := k.GetVerificationDetails(ctx, msg.VerificationId) + if err != nil { + return nil, err + } + issuerAddress, err := sdk.AccAddressFromBech32(details.IssuerAddress) if err != nil { return nil, err diff --git a/x/compliance/keeper/msg_server_test.go b/x/compliance/keeper/msg_server_test.go index 04d3fdfb..9188cb00 100644 --- a/x/compliance/keeper/msg_server_test.go +++ b/x/compliance/keeper/msg_server_test.go @@ -1508,6 +1508,15 @@ func (suite *KeeperTestSuite) TestConvertCredential() { err = suite.keeper.SetIssuerDetails(suite.ctx, issuer, details) suite.Require().NoError(err) + err = suite.keeper.SetAddressDetails( + suite.ctx, + issuer, + &types.AddressDetails{ + IsVerified: true, + IsRevoked: false, + }) + suite.Require().NoError(err) + verificationDetails := &types.VerificationDetails{ Type: types.VerificationType_VT_KYC, IssuerAddress: issuer.String(), diff --git a/x/compliance/keeper/query.go b/x/compliance/keeper/query.go index d16710c6..3734e657 100644 --- a/x/compliance/keeper/query.go +++ b/x/compliance/keeper/query.go @@ -252,6 +252,7 @@ func (k Querier) VerificationsDetails(goCtx context.Context, req *types.QueryVer Schema: verificationDetails.Schema, IssuerVerificationId: verificationDetails.IssuerVerificationId, Version: verificationDetails.Version, + IsRevoked: verificationDetails.IsRevoked, }) return nil }) @@ -339,3 +340,19 @@ func (k Querier) CredentialHash(goCtx context.Context, req *types.QueryCredentia return &types.QueryCredentialHashResponse{CredentialHash: credentialHashBytes}, nil } + +func (k Querier) VerificationHolder(goCtx context.Context, req *types.QueryHolderByVerificationIdRequest) (*types.QueryHolderByVerificationIdResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(goCtx) + + id, err := base64.StdEncoding.DecodeString(req.VerificationId) + if err != nil { + return nil, err + } + + holder := k.getHolderByVerificationId(ctx, id) + + return &types.QueryHolderByVerificationIdResponse{Address: holder.String()}, nil +} diff --git a/x/compliance/keeper/tree_manager.go b/x/compliance/keeper/tree_manager.go index 5372284d..aef4e3f6 100644 --- a/x/compliance/keeper/tree_manager.go +++ b/x/compliance/keeper/tree_manager.go @@ -79,9 +79,15 @@ func (k Keeper) addZeroElementToRevocationTree(ctx sdk.Context) error { } // We add zero element to revocation tree to make it work correctly - zero := big.NewInt(0) - if _, _, _, err = tree.Get(sdk.WrapSDKContext(ctx), zero); err != nil { - if err = tree.Add(sdk.WrapSDKContext(ctx), zero, zero); err != nil { + // value = MiMC7(0) + // key = MiMC7(value) + zeroElementKey := new(big.Int) + zeroElementKey.SetString("20479787315037141259873752832946319094807983372697723108173353219959612477980", 10) + zeroElementValue := new(big.Int) + zeroElementValue.SetString("11730251359286723731141466095709901450170369094578288842486979042586033922425", 10) + + if _, _, _, err = tree.Get(sdk.WrapSDKContext(ctx), zeroElementKey); err != nil { + if err = tree.Add(sdk.WrapSDKContext(ctx), zeroElementKey, zeroElementValue); err != nil { return err } } diff --git a/x/compliance/keeper/tree_manager_test.go b/x/compliance/keeper/tree_manager_test.go index 4df47536..47486dbd 100644 --- a/x/compliance/keeper/tree_manager_test.go +++ b/x/compliance/keeper/tree_manager_test.go @@ -52,3 +52,19 @@ func (suite *KeeperTestSuite) TestNonInclusionProof() { suite.Require().NotNil(res) } + +func (suite *KeeperTestSuite) TestNonRevocationProof() { + suite.Setup(suite.T()) + + storage := keeper.NewTreeStorage(suite.ctx, &suite.keeper, types.KeyPrefixRevocationTree) + + revocationTree, err := merkletree.NewMerkleTree(suite.ctx, &storage, 32) + suite.Require().NoError(err) + + nonExistingKey := big.NewInt(123) + proof, _, err := revocationTree.GenerateProof(suite.ctx, nonExistingKey, revocationTree.Root()) + suite.Require().NoError(err) + + isVerified := merkletree.VerifyProof(revocationTree.Root(), proof, nonExistingKey, big.NewInt(0)) + suite.Require().True(isVerified) +} diff --git a/x/compliance/types/consts.go b/x/compliance/types/consts.go new file mode 100644 index 00000000..8c379f24 --- /dev/null +++ b/x/compliance/types/consts.go @@ -0,0 +1,8 @@ +package types + +const ( + MaxIssuerVerificationIdSize = 256 + MaxProofDataSize = 4096 + MaxSchemaSize = 1028 + MaxOriginChainSize = 96 +) diff --git a/x/compliance/types/entities.go b/x/compliance/types/entities.go index f17988be..c975c315 100644 --- a/x/compliance/types/entities.go +++ b/x/compliance/types/entities.go @@ -2,6 +2,7 @@ package types import ( "encoding/binary" + "errors" "github.com/iden3/go-iden3-crypto/mimc7" "math/big" ) @@ -22,3 +23,23 @@ func (c *ZKCredential) Hash() (*big.Int, error) { valuesToHash := []*big.Int{typeBig, issuerAddressBig, holderPublicKeyBig, expirationBig, issuanceBig} return mimc7.Hash(valuesToHash, big.NewInt(0)) } + +func (vd *VerificationDetails) ValidateSize() error { + if len(vd.OriginChain) > MaxOriginChainSize { + return errors.New("origin chain too long") + } + + if len(vd.IssuerVerificationId) > MaxIssuerVerificationIdSize { + return errors.New("issuer verification id too long") + } + + if len(vd.OriginalData) > MaxProofDataSize { + return errors.New("original data too long") + } + + if len(vd.Schema) > MaxSchemaSize { + return errors.New("schema too long") + } + + return nil +} diff --git a/x/compliance/types/entities.pb.go b/x/compliance/types/entities.pb.go index 0033d70f..d9e6a72c 100644 --- a/x/compliance/types/entities.pb.go +++ b/x/compliance/types/entities.pb.go @@ -36,6 +36,7 @@ const ( VerificationType_VT_ADDRESS VerificationType = 6 VerificationType_VT_CUSTOM VerificationType = 7 VerificationType_VT_CREDIT_SCORE VerificationType = 8 + VerificationType_VT_BIOMETRIC VerificationType = 9 ) var VerificationType_name = map[int32]string{ @@ -48,6 +49,7 @@ var VerificationType_name = map[int32]string{ 6: "VT_ADDRESS", 7: "VT_CUSTOM", 8: "VT_CREDIT_SCORE", + 9: "VT_BIOMETRIC", } var VerificationType_value = map[string]int32{ @@ -60,6 +62,7 @@ var VerificationType_value = map[string]int32{ "VT_ADDRESS": 6, "VT_CUSTOM": 7, "VT_CREDIT_SCORE": 8, + "VT_BIOMETRIC": 9, } func (x VerificationType) String() string { @@ -596,57 +599,57 @@ func init() { } var fileDescriptor_a6b6c3ec8e3c39ee = []byte{ - // 785 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xe2, 0x46, - 0x18, 0x8e, 0x81, 0x10, 0x78, 0x31, 0xe0, 0x9d, 0x44, 0x91, 0x15, 0xa9, 0x34, 0x65, 0xbb, 0x2a, - 0x8a, 0x54, 0xa2, 0x7e, 0x1c, 0x7a, 0xe8, 0x85, 0x00, 0x6d, 0xdd, 0x7c, 0xb0, 0x1a, 0x0c, 0xd5, - 0xee, 0x65, 0x34, 0x6b, 0x4f, 0xc9, 0x28, 0x06, 0x5b, 0x33, 0x4e, 0x1a, 0x8e, 0xfd, 0x07, 0xbd, - 0xb7, 0xf7, 0x1e, 0xfa, 0x47, 0x7a, 0xdc, 0x63, 0x8f, 0x55, 0xf2, 0x47, 0xaa, 0x19, 0xdb, 0xe0, - 0xa5, 0x41, 0xaa, 0x54, 0xed, 0xed, 0x7d, 0x9f, 0xf7, 0xeb, 0x99, 0xf7, 0x19, 0x7b, 0xe0, 0x85, - 0xfc, 0x89, 0x4b, 0x19, 0x8b, 0x70, 0xc1, 0x6f, 0x4e, 0xbd, 0x70, 0x1e, 0x05, 0x9c, 0x2e, 0x3c, - 0x76, 0xca, 0x16, 0x31, 0x8f, 0x39, 0x93, 0xdd, 0x48, 0x84, 0x71, 0x88, 0x0e, 0x73, 0x69, 0xdd, - 0x75, 0xda, 0xd1, 0xc1, 0x2c, 0x9c, 0x85, 0x3a, 0xe5, 0x54, 0x59, 0x49, 0xf6, 0xd1, 0xf3, 0x2d, - 0x4d, 0x23, 0x2a, 0xe8, 0x3c, 0x6d, 0xd9, 0xbe, 0x87, 0xe6, 0x28, 0x62, 0x82, 0xc6, 0xa1, 0x18, - 0xb0, 0x98, 0xf2, 0x40, 0xa2, 0x23, 0xa8, 0x84, 0x29, 0x64, 0x1b, 0xc7, 0x46, 0xa7, 0x8a, 0x57, - 0x3e, 0x72, 0xa0, 0x9e, 0xd9, 0x24, 0x5e, 0x46, 0xcc, 0x2e, 0x1c, 0x1b, 0x9d, 0xc6, 0xe7, 0x1f, - 0x77, 0x9f, 0x66, 0xd6, 0xcd, 0x7a, 0xbb, 0xcb, 0x88, 0x61, 0x33, 0xcc, 0x79, 0xed, 0xdf, 0x0d, - 0xa8, 0x3b, 0x52, 0xde, 0xb2, 0xd5, 0x60, 0x04, 0xa5, 0x05, 0x9d, 0xb3, 0x74, 0xa8, 0xb6, 0xd1, - 0x31, 0xd4, 0x7c, 0x26, 0x3d, 0xc1, 0xa3, 0x98, 0x87, 0x0b, 0x3d, 0xae, 0x8a, 0xf3, 0x10, 0xb2, - 0xa0, 0x78, 0x2b, 0x02, 0xbb, 0xa8, 0x23, 0xca, 0x54, 0x7d, 0x82, 0x70, 0x16, 0xda, 0xa5, 0xa4, - 0x8f, 0xb2, 0x55, 0x9f, 0x80, 0xcd, 0x68, 0x30, 0x54, 0x1b, 0x5d, 0xda, 0xbb, 0x49, 0x9f, 0x1c, - 0x84, 0x6c, 0xd8, 0xf3, 0x04, 0xd3, 0xa7, 0x2e, 0xeb, 0x68, 0xe6, 0xb6, 0x7f, 0x33, 0xa0, 0xd1, - 0xf3, 0x7d, 0xc1, 0xa4, 0xcc, 0xa8, 0x7e, 0x08, 0x35, 0x2e, 0xc9, 0x1d, 0x13, 0xfc, 0x47, 0xce, - 0x7c, 0xcd, 0xb8, 0x82, 0x81, 0xcb, 0x69, 0x8a, 0xa0, 0x0f, 0x00, 0xb8, 0x24, 0x82, 0xdd, 0x85, - 0x37, 0xcc, 0xd7, 0xb4, 0x2b, 0xb8, 0xca, 0x25, 0x4e, 0x00, 0xf4, 0x3d, 0xd4, 0x93, 0x62, 0x8f, - 0xaa, 0x43, 0x48, 0xbb, 0x78, 0x5c, 0xec, 0xd4, 0xb6, 0xef, 0x71, 0x9a, 0x4b, 0xc6, 0xef, 0x96, - 0x2a, 0x7a, 0x66, 0x3e, 0x8e, 0xbe, 0x86, 0x92, 0xd6, 0xc6, 0xd0, 0xda, 0x74, 0xfe, 0x4b, 0x4f, - 0xad, 0x8f, 0xae, 0x42, 0x9f, 0x40, 0x33, 0xdf, 0x9f, 0xf0, 0x84, 0xbe, 0x89, 0x1b, 0x79, 0xd8, - 0xf1, 0xd1, 0x0b, 0x68, 0x70, 0xad, 0x1f, 0xa1, 0xc9, 0x72, 0x52, 0x0d, 0xea, 0x09, 0x9a, 0x6e, - 0xac, 0xfd, 0x47, 0x11, 0xf6, 0xf3, 0xa3, 0xb2, 0x15, 0xfe, 0x3f, 0x96, 0xff, 0x1e, 0x5e, 0x78, - 0x62, 0x38, 0xfa, 0x08, 0xcc, 0x50, 0xf0, 0x19, 0x5f, 0x10, 0xef, 0x9a, 0xf2, 0x45, 0xca, 0xb0, - 0x96, 0x60, 0x7d, 0x05, 0xa1, 0x4f, 0x01, 0xa9, 0x1a, 0x35, 0x8c, 0xc4, 0x7c, 0xce, 0x64, 0x4c, - 0xe7, 0x91, 0xbe, 0x3b, 0x75, 0xfc, 0x2c, 0x8b, 0xb8, 0x59, 0x00, 0x7d, 0x06, 0x07, 0xec, 0x3e, - 0xe2, 0x22, 0x59, 0xce, 0xba, 0x60, 0x57, 0x17, 0xec, 0xaf, 0x63, 0xeb, 0x92, 0xe7, 0x50, 0x4f, - 0x06, 0xd2, 0x80, 0xf8, 0x34, 0xa6, 0xfa, 0x7e, 0x99, 0xd8, 0xcc, 0xc0, 0x01, 0x8d, 0x29, 0x3a, - 0x84, 0xb2, 0xf4, 0xae, 0xd9, 0x9c, 0xda, 0x7b, 0x9a, 0x63, 0xea, 0xa1, 0x2f, 0xe1, 0x30, 0x3d, - 0xe8, 0xa6, 0x2a, 0x15, 0x9d, 0x77, 0x90, 0x44, 0xa7, 0xef, 0x6a, 0x63, 0xc3, 0xde, 0x1d, 0x13, - 0x52, 0x7d, 0x32, 0x55, 0x4d, 0x2c, 0x73, 0x37, 0x2e, 0x26, 0x6c, 0x5c, 0xcc, 0xf6, 0xcf, 0x05, - 0x30, 0x5f, 0x9f, 0xf7, 0x05, 0xf3, 0xd5, 0xbf, 0x87, 0x06, 0xef, 0x45, 0x26, 0x73, 0x53, 0xa6, - 0x13, 0x78, 0x76, 0x1d, 0x06, 0x3e, 0x13, 0x24, 0xba, 0x7d, 0x13, 0x70, 0x8f, 0xdc, 0xb0, 0xa5, - 0xd6, 0xca, 0xc4, 0xcd, 0x24, 0xf0, 0x52, 0xe3, 0xe7, 0x6c, 0xb9, 0x55, 0x80, 0xd2, 0x76, 0x01, - 0x9e, 0x96, 0x78, 0x77, 0x8b, 0xc4, 0x27, 0xbf, 0x1a, 0x60, 0x6d, 0x9e, 0x07, 0x21, 0x68, 0x4c, - 0x5d, 0x32, 0xb9, 0x1a, 0xbf, 0x1c, 0xf6, 0x9d, 0x6f, 0x9c, 0xe1, 0xc0, 0xda, 0x41, 0x00, 0xe5, - 0xa9, 0x4b, 0xce, 0x5f, 0xf5, 0x2d, 0x63, 0x65, 0x9f, 0x59, 0x85, 0x95, 0xfd, 0x83, 0x55, 0x44, - 0x4d, 0xa8, 0x4d, 0x5d, 0xf2, 0xdd, 0xe4, 0xb2, 0x77, 0xe5, 0xb8, 0xaf, 0xac, 0x52, 0x1a, 0xec, - 0x5d, 0x5e, 0x58, 0xbb, 0xa8, 0x01, 0xa0, 0xec, 0xc1, 0x00, 0x0f, 0xc7, 0x63, 0xab, 0x8c, 0xea, - 0x50, 0x9d, 0xba, 0xa4, 0x3f, 0x19, 0xbb, 0xa3, 0x4b, 0x6b, 0x0f, 0xed, 0x43, 0x53, 0xb9, 0x78, - 0x38, 0x70, 0x5c, 0x32, 0xee, 0x8f, 0xf0, 0xd0, 0xaa, 0x9c, 0x9c, 0x81, 0x99, 0xff, 0xab, 0x2a, - 0x62, 0xa3, 0x4d, 0x62, 0x0d, 0x80, 0x91, 0x4b, 0x9c, 0x2b, 0xc7, 0x75, 0x7a, 0x17, 0x96, 0x91, - 0xfa, 0x78, 0xf8, 0xed, 0xe4, 0xa2, 0x87, 0xad, 0xc2, 0xd9, 0x57, 0x7f, 0x3e, 0xb4, 0x8c, 0xb7, - 0x0f, 0x2d, 0xe3, 0xef, 0x87, 0x96, 0xf1, 0xcb, 0x63, 0x6b, 0xe7, 0xed, 0x63, 0x6b, 0xe7, 0xaf, - 0xc7, 0xd6, 0xce, 0xeb, 0x56, 0xfe, 0xd1, 0xb8, 0xcf, 0x3f, 0x1b, 0x4a, 0x4f, 0xf9, 0xa6, 0xac, - 0x9f, 0x8d, 0x2f, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xe8, 0x8f, 0xc9, 0xb2, 0x06, 0x00, - 0x00, + // 800 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xe3, 0x44, + 0x18, 0xae, 0x93, 0x34, 0x4d, 0xde, 0x38, 0x89, 0x77, 0x5a, 0x55, 0x56, 0x25, 0x42, 0xc9, 0xb2, + 0xa2, 0xaa, 0x44, 0x2b, 0x3e, 0x0e, 0x1c, 0xb8, 0xa4, 0x89, 0x01, 0xd3, 0x8f, 0xac, 0x26, 0xae, + 0xd1, 0xee, 0x65, 0x34, 0x6b, 0x0f, 0xe9, 0xa8, 0x4e, 0x6c, 0xcd, 0xb8, 0xa5, 0x39, 0xf2, 0x0f, + 0xf8, 0x01, 0xdc, 0x39, 0x20, 0xfe, 0x07, 0xc7, 0x3d, 0x72, 0x44, 0xed, 0x1f, 0x41, 0x33, 0xb6, + 0x1b, 0x6f, 0x68, 0x24, 0x24, 0xb4, 0xb7, 0xf7, 0x7d, 0xde, 0xaf, 0x67, 0xde, 0x67, 0xec, 0x81, + 0x17, 0xf2, 0x27, 0x2e, 0x65, 0x2a, 0xe2, 0x39, 0xbf, 0x3e, 0x0e, 0xe2, 0x59, 0x12, 0x71, 0x3a, + 0x0f, 0xd8, 0x31, 0x9b, 0xa7, 0x3c, 0xe5, 0x4c, 0x1e, 0x25, 0x22, 0x4e, 0x63, 0xb4, 0x5b, 0x4a, + 0x3b, 0x5a, 0xa6, 0xed, 0xed, 0x4c, 0xe3, 0x69, 0xac, 0x53, 0x8e, 0x95, 0x95, 0x65, 0xef, 0x3d, + 0x5f, 0xd3, 0x34, 0xa1, 0x82, 0xce, 0xf2, 0x96, 0xfd, 0x3b, 0xe8, 0x8e, 0x13, 0x26, 0x68, 0x1a, + 0x8b, 0x11, 0x4b, 0x29, 0x8f, 0x24, 0xda, 0x83, 0x46, 0x9c, 0x43, 0xb6, 0xb1, 0x6f, 0x1c, 0x34, + 0xf1, 0xa3, 0x8f, 0x5c, 0x68, 0x17, 0x36, 0x49, 0x17, 0x09, 0xb3, 0x2b, 0xfb, 0xc6, 0x41, 0xe7, + 0xf3, 0x8f, 0x8f, 0x9e, 0x66, 0x76, 0x54, 0xf4, 0xf6, 0x16, 0x09, 0xc3, 0x66, 0x5c, 0xf2, 0xfa, + 0xbf, 0x19, 0xd0, 0x76, 0xa5, 0xbc, 0x61, 0x8f, 0x83, 0x11, 0xd4, 0xe6, 0x74, 0xc6, 0xf2, 0xa1, + 0xda, 0x46, 0xfb, 0xd0, 0x0a, 0x99, 0x0c, 0x04, 0x4f, 0x52, 0x1e, 0xcf, 0xf5, 0xb8, 0x26, 0x2e, + 0x43, 0xc8, 0x82, 0xea, 0x8d, 0x88, 0xec, 0xaa, 0x8e, 0x28, 0x53, 0xf5, 0x89, 0xe2, 0x69, 0x6c, + 0xd7, 0xb2, 0x3e, 0xca, 0x56, 0x7d, 0x22, 0x36, 0xa5, 0x91, 0xa3, 0x36, 0xba, 0xb0, 0x37, 0xb3, + 0x3e, 0x25, 0x08, 0xd9, 0xb0, 0x15, 0x08, 0xa6, 0x4f, 0x5d, 0xd7, 0xd1, 0xc2, 0xed, 0xff, 0x6a, + 0x40, 0x67, 0x10, 0x86, 0x82, 0x49, 0x59, 0x50, 0xfd, 0x10, 0x5a, 0x5c, 0x92, 0x5b, 0x26, 0xf8, + 0x8f, 0x9c, 0x85, 0x9a, 0x71, 0x03, 0x03, 0x97, 0x7e, 0x8e, 0xa0, 0x0f, 0x00, 0xb8, 0x24, 0x82, + 0xdd, 0xc6, 0xd7, 0x2c, 0xd4, 0xb4, 0x1b, 0xb8, 0xc9, 0x25, 0xce, 0x00, 0xf4, 0x3d, 0xb4, 0xb3, + 0xe2, 0x80, 0xaa, 0x43, 0x48, 0xbb, 0xba, 0x5f, 0x3d, 0x68, 0xad, 0xdf, 0xa3, 0x5f, 0x4a, 0xc6, + 0xef, 0x96, 0x2a, 0x7a, 0x66, 0x39, 0x8e, 0xbe, 0x86, 0x9a, 0xd6, 0xc6, 0xd0, 0xda, 0x1c, 0xfc, + 0x97, 0x9e, 0x5a, 0x1f, 0x5d, 0x85, 0x3e, 0x81, 0x6e, 0xb9, 0x3f, 0xe1, 0x19, 0x7d, 0x13, 0x77, + 0xca, 0xb0, 0x1b, 0xa2, 0x17, 0xd0, 0xe1, 0x5a, 0x3f, 0x42, 0xb3, 0xe5, 0xe4, 0x1a, 0xb4, 0x33, + 0x34, 0xdf, 0x58, 0xff, 0xf7, 0x2a, 0x6c, 0x97, 0x47, 0x15, 0x2b, 0xfc, 0x7f, 0x2c, 0xff, 0x3d, + 0xbc, 0xf2, 0xc4, 0x70, 0xf4, 0x11, 0x98, 0xb1, 0xe0, 0x53, 0x3e, 0x27, 0xc1, 0x15, 0xe5, 0xf3, + 0x9c, 0x61, 0x2b, 0xc3, 0x86, 0x0a, 0x42, 0x9f, 0x02, 0x52, 0x35, 0x6a, 0x18, 0x49, 0xf9, 0x8c, + 0xc9, 0x94, 0xce, 0x12, 0x7d, 0x77, 0xda, 0xf8, 0x59, 0x11, 0xf1, 0x8a, 0x00, 0xfa, 0x0c, 0x76, + 0xd8, 0x5d, 0xc2, 0x45, 0xb6, 0x9c, 0x65, 0xc1, 0xa6, 0x2e, 0xd8, 0x5e, 0xc6, 0x96, 0x25, 0xcf, + 0xa1, 0x9d, 0x0d, 0xa4, 0x11, 0x09, 0x69, 0x4a, 0xf5, 0xfd, 0x32, 0xb1, 0x59, 0x80, 0x23, 0x9a, + 0x52, 0xb4, 0x0b, 0x75, 0x19, 0x5c, 0xb1, 0x19, 0xb5, 0xb7, 0x34, 0xc7, 0xdc, 0x43, 0x5f, 0xc2, + 0x6e, 0x7e, 0xd0, 0x55, 0x55, 0x1a, 0x3a, 0x6f, 0x27, 0x8b, 0xfa, 0xef, 0x6a, 0x63, 0xc3, 0xd6, + 0x2d, 0x13, 0x52, 0x7d, 0x32, 0x4d, 0x4d, 0xac, 0x70, 0x57, 0x2e, 0x26, 0xac, 0x5c, 0xcc, 0xfe, + 0xcf, 0x15, 0x30, 0x5f, 0x9f, 0x0e, 0x05, 0x0b, 0xd5, 0xbf, 0x87, 0x46, 0xef, 0x45, 0x26, 0x73, + 0x55, 0xa6, 0x43, 0x78, 0x76, 0x15, 0x47, 0x21, 0x13, 0x24, 0xb9, 0x79, 0x13, 0xf1, 0x80, 0x5c, + 0xb3, 0x85, 0xd6, 0xca, 0xc4, 0xdd, 0x2c, 0xf0, 0x52, 0xe3, 0xa7, 0x6c, 0xb1, 0x56, 0x80, 0xda, + 0x7a, 0x01, 0x9e, 0x96, 0x78, 0x73, 0x8d, 0xc4, 0x87, 0x7f, 0x18, 0x60, 0xad, 0x9e, 0x07, 0x21, + 0xe8, 0xf8, 0x1e, 0xb9, 0xbc, 0x98, 0xbc, 0x74, 0x86, 0xee, 0x37, 0xae, 0x33, 0xb2, 0x36, 0x10, + 0x40, 0xdd, 0xf7, 0xc8, 0xe9, 0xab, 0xa1, 0x65, 0x3c, 0xda, 0x27, 0x56, 0xe5, 0xd1, 0xfe, 0xc1, + 0xaa, 0xa2, 0x2e, 0xb4, 0x7c, 0x8f, 0x7c, 0x77, 0x79, 0x3e, 0xb8, 0x70, 0xbd, 0x57, 0x56, 0x2d, + 0x0f, 0x0e, 0xce, 0xcf, 0xac, 0x4d, 0xd4, 0x01, 0x50, 0xf6, 0x68, 0x84, 0x9d, 0xc9, 0xc4, 0xaa, + 0xa3, 0x36, 0x34, 0x7d, 0x8f, 0x0c, 0x2f, 0x27, 0xde, 0xf8, 0xdc, 0xda, 0x42, 0xdb, 0xd0, 0x55, + 0x2e, 0x76, 0x46, 0xae, 0x47, 0x26, 0xc3, 0x31, 0x76, 0xac, 0x06, 0xb2, 0xc0, 0xf4, 0x3d, 0x72, + 0xe2, 0x8e, 0xcf, 0x1d, 0x0f, 0xbb, 0x43, 0xab, 0x79, 0x78, 0x02, 0x66, 0xf9, 0x3f, 0xab, 0xa8, + 0x8e, 0x57, 0xa9, 0x76, 0x00, 0xc6, 0x1e, 0x71, 0x2f, 0x5c, 0xcf, 0x1d, 0x9c, 0x59, 0x46, 0xee, + 0x63, 0xe7, 0xdb, 0xcb, 0xb3, 0x01, 0xb6, 0x2a, 0x27, 0x5f, 0xfd, 0x79, 0xdf, 0x33, 0xde, 0xde, + 0xf7, 0x8c, 0xbf, 0xef, 0x7b, 0xc6, 0x2f, 0x0f, 0xbd, 0x8d, 0xb7, 0x0f, 0xbd, 0x8d, 0xbf, 0x1e, + 0x7a, 0x1b, 0xaf, 0x7b, 0xe5, 0x67, 0xe4, 0xae, 0xfc, 0x90, 0x28, 0x85, 0xe5, 0x9b, 0xba, 0x7e, + 0x48, 0xbe, 0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x80, 0x27, 0x4d, 0xc4, 0x06, 0x00, 0x00, } func (m *OperatorDetails) Marshal() (dAtA []byte, err error) { diff --git a/x/compliance/types/interfaces.go b/x/compliance/types/interfaces.go index e83d4bff..552cc1ff 100644 --- a/x/compliance/types/interfaces.go +++ b/x/compliance/types/interfaces.go @@ -7,7 +7,10 @@ import ( type ComplianceKeeper interface { IterateOperatorDetails(ctx sdk.Context, callback func(address sdk.AccAddress) (continue_ bool)) IterateIssuerDetails(ctx sdk.Context, callback func(address sdk.AccAddress) (continue_ bool)) + IterateAddressDetails(ctx sdk.Context, callback func(address sdk.AccAddress) (continue_ bool)) GetOperatorDetails(ctx sdk.Context, operator sdk.AccAddress) (*OperatorDetails, error) GetIssuerDetails(ctx sdk.Context, issuerAddress sdk.AccAddress) (*IssuerDetails, error) SetIssuerDetails(ctx sdk.Context, issuerAddress sdk.AccAddress, details *IssuerDetails) error + GetAddressDetails(ctx sdk.Context, address sdk.AccAddress) (*AddressDetails, error) + LinkVerificationToHolder(ctx sdk.Context, userAddress sdk.AccAddress, verificationId []byte) error } diff --git a/x/compliance/types/query.pb.go b/x/compliance/types/query.pb.go index dbf8bfb2..e0edb520 100644 --- a/x/compliance/types/query.pb.go +++ b/x/compliance/types/query.pb.go @@ -962,6 +962,7 @@ type QueryVerificationsDetailsResponse_MergedVerificationDetails struct { Schema string `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` IssuerVerificationId string `protobuf:"bytes,9,opt,name=issuer_verification_id,json=issuerVerificationId,proto3" json:"issuer_verification_id,omitempty"` Version uint32 `protobuf:"varint,10,opt,name=version,proto3" json:"version,omitempty"` + IsRevoked bool `protobuf:"varint,11,opt,name=is_revoked,json=isRevoked,proto3" json:"is_revoked,omitempty"` } func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) Reset() { @@ -1071,6 +1072,13 @@ func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) GetVersion return 0 } +func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) GetIsRevoked() bool { + if m != nil { + return m.IsRevoked + } + return false +} + type QueryIssuanceTreeRootRequest struct { } @@ -1679,6 +1687,94 @@ func (m *QueryCredentialHashResponse) GetCredentialHash() []byte { return nil } +type QueryHolderByVerificationIdRequest struct { + VerificationId string `protobuf:"bytes,1,opt,name=verificationId,proto3" json:"verificationId,omitempty"` +} + +func (m *QueryHolderByVerificationIdRequest) Reset() { *m = QueryHolderByVerificationIdRequest{} } +func (m *QueryHolderByVerificationIdRequest) String() string { return proto.CompactTextString(m) } +func (*QueryHolderByVerificationIdRequest) ProtoMessage() {} +func (*QueryHolderByVerificationIdRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f80d6bdaf4aa1245, []int{30} +} +func (m *QueryHolderByVerificationIdRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHolderByVerificationIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHolderByVerificationIdRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryHolderByVerificationIdRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHolderByVerificationIdRequest.Merge(m, src) +} +func (m *QueryHolderByVerificationIdRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryHolderByVerificationIdRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHolderByVerificationIdRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHolderByVerificationIdRequest proto.InternalMessageInfo + +func (m *QueryHolderByVerificationIdRequest) GetVerificationId() string { + if m != nil { + return m.VerificationId + } + return "" +} + +type QueryHolderByVerificationIdResponse struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryHolderByVerificationIdResponse) Reset() { *m = QueryHolderByVerificationIdResponse{} } +func (m *QueryHolderByVerificationIdResponse) String() string { return proto.CompactTextString(m) } +func (*QueryHolderByVerificationIdResponse) ProtoMessage() {} +func (*QueryHolderByVerificationIdResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f80d6bdaf4aa1245, []int{31} +} +func (m *QueryHolderByVerificationIdResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHolderByVerificationIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHolderByVerificationIdResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryHolderByVerificationIdResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHolderByVerificationIdResponse.Merge(m, src) +} +func (m *QueryHolderByVerificationIdResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryHolderByVerificationIdResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHolderByVerificationIdResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHolderByVerificationIdResponse proto.InternalMessageInfo + +func (m *QueryHolderByVerificationIdResponse) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "swisstronik.compliance.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "swisstronik.compliance.QueryParamsResponse") @@ -1713,6 +1809,8 @@ func init() { proto.RegisterType((*QueryIsCredentialInZKSDIResponse)(nil), "swisstronik.compliance.QueryIsCredentialInZKSDIResponse") proto.RegisterType((*QueryCredentialHashRequest)(nil), "swisstronik.compliance.QueryCredentialHashRequest") proto.RegisterType((*QueryCredentialHashResponse)(nil), "swisstronik.compliance.QueryCredentialHashResponse") + proto.RegisterType((*QueryHolderByVerificationIdRequest)(nil), "swisstronik.compliance.QueryHolderByVerificationIdRequest") + proto.RegisterType((*QueryHolderByVerificationIdResponse)(nil), "swisstronik.compliance.QueryHolderByVerificationIdResponse") } func init() { @@ -1720,113 +1818,117 @@ func init() { } var fileDescriptor_f80d6bdaf4aa1245 = []byte{ - // 1682 bytes of a gzipped FileDescriptorProto + // 1747 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xcd, 0x6f, 0xdb, 0x46, - 0x16, 0x37, 0x23, 0xc7, 0x1f, 0xcf, 0x9f, 0x3b, 0xf6, 0x7a, 0x15, 0x6d, 0x22, 0xdb, 0xe3, 0x38, - 0x76, 0x62, 0x44, 0x5c, 0xcb, 0x4e, 0x9c, 0xaf, 0x4d, 0xe2, 0x8f, 0x7c, 0x28, 0xc6, 0x62, 0xbd, - 0x72, 0x10, 0x60, 0x03, 0x14, 0xc6, 0x58, 0x9c, 0xc8, 0x6c, 0x64, 0x52, 0x21, 0x29, 0x37, 0xae, - 0x61, 0x14, 0xe8, 0xad, 0xb7, 0x02, 0x3d, 0xf4, 0x5e, 0xa0, 0x97, 0xa2, 0xe8, 0xb1, 0x2d, 0x8a, - 0x16, 0x05, 0x7a, 0x69, 0xda, 0x43, 0x11, 0x34, 0x97, 0x9e, 0x8a, 0x22, 0xe9, 0x1f, 0x52, 0x70, - 0xf8, 0x28, 0x93, 0x63, 0x92, 0x92, 0x8c, 0xe4, 0x26, 0xce, 0xcc, 0x7b, 0xef, 0xf7, 0x66, 0x7e, - 0x6f, 0xde, 0x6f, 0x20, 0xa0, 0xf6, 0x3b, 0xba, 0x6d, 0x3b, 0x96, 0x69, 0xe8, 0x8f, 0xd5, 0x92, - 0xb9, 0x5d, 0xad, 0xe8, 0xcc, 0x28, 0x71, 0xf5, 0x49, 0x8d, 0x5b, 0xbb, 0xb9, 0xaa, 0x65, 0x3a, - 0x26, 0x19, 0x09, 0xac, 0xc9, 0x1d, 0xac, 0xc9, 0x0c, 0x97, 0xcd, 0xb2, 0x29, 0x96, 0xa8, 0xee, - 0x2f, 0x6f, 0x75, 0xe6, 0x64, 0xd9, 0x34, 0xcb, 0x15, 0xae, 0xb2, 0xaa, 0xae, 0x32, 0xc3, 0x30, - 0x1d, 0xe6, 0xe8, 0xa6, 0x61, 0xe3, 0xec, 0xb9, 0x92, 0x69, 0x6f, 0x9b, 0xb6, 0xba, 0xc9, 0x6c, - 0x0c, 0xa2, 0xee, 0xcc, 0x6e, 0x72, 0x87, 0xcd, 0xaa, 0x55, 0x56, 0xd6, 0x0d, 0xb1, 0x18, 0xd7, - 0x4e, 0xc4, 0x60, 0xab, 0x32, 0x8b, 0x6d, 0xfb, 0x0e, 0x27, 0x63, 0x16, 0x71, 0xc3, 0xd1, 0x1d, - 0x9d, 0xe3, 0x32, 0x3a, 0x0c, 0xe4, 0x7f, 0x6e, 0xb4, 0x35, 0x61, 0x5b, 0xe4, 0x4f, 0x6a, 0xdc, - 0x76, 0xe8, 0x3a, 0x0c, 0x85, 0x46, 0xed, 0xaa, 0x69, 0xd8, 0x9c, 0x5c, 0x83, 0x0e, 0x2f, 0x46, - 0x5a, 0x19, 0x53, 0xa6, 0x7b, 0xf2, 0xd9, 0x5c, 0xf4, 0x0e, 0xe4, 0x3c, 0xbb, 0xa5, 0xf6, 0x67, - 0xbf, 0x8f, 0xb6, 0x15, 0xd1, 0x86, 0xde, 0x81, 0x7f, 0x0a, 0xa7, 0xff, 0xad, 0x72, 0x8b, 0x39, - 0xa6, 0xb5, 0xc2, 0x1d, 0xa6, 0x57, 0xfc, 0x98, 0x64, 0x1a, 0x06, 0x4c, 0x9c, 0x59, 0xd4, 0x34, - 0x8b, 0xdb, 0x5e, 0x94, 0xee, 0xa2, 0x3c, 0x4c, 0x19, 0x9c, 0x8c, 0x76, 0x84, 0x30, 0x17, 0xa1, - 0x53, 0xf3, 0x86, 0x10, 0xe7, 0x54, 0x1c, 0x4e, 0xd9, 0x83, 0x6f, 0x47, 0x2f, 0x42, 0x46, 0x84, - 0xc0, 0x90, 0x12, 0xd4, 0x34, 0x74, 0xb2, 0x10, 0x44, 0xff, 0x93, 0xfe, 0x1f, 0x73, 0x94, 0xed, - 0x10, 0xd9, 0x15, 0x68, 0xd7, 0x98, 0xc3, 0x10, 0xd6, 0x99, 0x38, 0x58, 0x92, 0xb5, 0xb0, 0xa1, - 0x8f, 0x30, 0x6b, 0x9c, 0xe4, 0x32, 0xa8, 0xdb, 0x00, 0x07, 0x4c, 0xa9, 0x47, 0xf0, 0x68, 0x95, - 0x73, 0x69, 0x95, 0xf3, 0xb8, 0x8b, 0xb4, 0xca, 0xad, 0xb1, 0x32, 0x47, 0xdb, 0x62, 0xc0, 0x92, - 0x7e, 0x9c, 0x82, 0x53, 0x31, 0x81, 0x30, 0x0b, 0x03, 0xba, 0x99, 0x3f, 0x97, 0x56, 0xc6, 0x52, - 0xd3, 0x3d, 0xf9, 0x7b, 0x71, 0xa9, 0x24, 0x7a, 0xca, 0xfd, 0x87, 0x5b, 0x65, 0xae, 0x85, 0xd3, - 0x45, 0xd6, 0x1c, 0x84, 0x20, 0x77, 0x42, 0x99, 0x1d, 0xc3, 0x23, 0x6d, 0x94, 0x99, 0x17, 0x22, - 0x98, 0x5a, 0xe6, 0x5b, 0x05, 0x86, 0xa3, 0x42, 0xc6, 0x1f, 0x28, 0x19, 0x85, 0x1e, 0xdd, 0xde, - 0xd8, 0xe1, 0x96, 0xfe, 0x48, 0xe7, 0x9a, 0x08, 0xde, 0x55, 0x04, 0xdd, 0x7e, 0x80, 0x23, 0xe4, - 0x14, 0x80, 0x6e, 0x6f, 0x58, 0x7c, 0xc7, 0x7c, 0xcc, 0xb5, 0x74, 0x4a, 0xcc, 0x77, 0xeb, 0x76, - 0xd1, 0x1b, 0x20, 0xf7, 0xa0, 0xcf, 0x33, 0x2e, 0x79, 0xe5, 0x9e, 0x6e, 0x17, 0xfb, 0x75, 0x3a, - 0x6e, 0xbf, 0x1e, 0x04, 0x16, 0x17, 0xc3, 0xa6, 0x74, 0x11, 0x4e, 0x88, 0xed, 0x2c, 0xd8, 0x76, - 0x8d, 0xcb, 0xe5, 0x73, 0x1a, 0xfa, 0x74, 0x31, 0x1e, 0x2e, 0x9e, 0xf0, 0x20, 0x7d, 0x0b, 0x79, - 0x2d, 0xb9, 0xc0, 0x83, 0xbd, 0x21, 0x17, 0xce, 0x64, 0x1c, 0xcc, 0xb0, 0x7d, 0xbd, 0x6c, 0xb4, - 0x90, 0xfb, 0x37, 0xc5, 0xd0, 0x4f, 0x53, 0x58, 0x65, 0x72, 0x18, 0x4c, 0xa3, 0x0c, 0x9d, 0x5e, - 0xd6, 0x3e, 0x3b, 0xef, 0x24, 0xb2, 0x33, 0xda, 0x0b, 0x72, 0x33, 0x94, 0x28, 0x52, 0xd3, 0xf7, - 0xfe, 0xfa, 0x88, 0xf9, 0x42, 0x81, 0xa1, 0x88, 0x78, 0xcd, 0x1d, 0x2a, 0x21, 0xd0, 0x6e, 0xb0, - 0x6d, 0x2e, 0x00, 0x74, 0x17, 0xc5, 0x6f, 0x32, 0x06, 0x3d, 0x1a, 0xb7, 0x4b, 0x96, 0x5e, 0x15, - 0xd8, 0x52, 0x62, 0x2a, 0x38, 0x44, 0x06, 0x21, 0x55, 0xb3, 0x2a, 0xe9, 0x76, 0x31, 0xe3, 0xfe, - 0x74, 0xfd, 0x54, 0xcc, 0xb2, 0x99, 0x3e, 0xee, 0xf9, 0x71, 0x7f, 0xbb, 0x7e, 0x2a, 0xbc, 0xcc, - 0x2a, 0xb7, 0xdc, 0xb6, 0xb1, 0x9b, 0xee, 0xf0, 0xfc, 0x04, 0x86, 0xdc, 0xda, 0x29, 0x59, 0xdc, - 0xbd, 0x45, 0xd3, 0x9d, 0x5e, 0xed, 0xe0, 0x27, 0x2d, 0xc0, 0xa8, 0xd8, 0xe0, 0x20, 0xa7, 0x25, - 0x4a, 0x9c, 0x81, 0xfe, 0x20, 0xc7, 0x0b, 0x2b, 0x98, 0xa1, 0x34, 0x4a, 0x75, 0x18, 0x8b, 0x77, - 0x85, 0xc7, 0x7e, 0x4b, 0x66, 0xef, 0x4c, 0x33, 0x45, 0x76, 0x88, 0xc3, 0x6f, 0x47, 0x84, 0x7a, - 0x53, 0x4c, 0xfe, 0xe1, 0x38, 0x8c, 0x27, 0x04, 0xc3, 0xc4, 0xde, 0x93, 0xef, 0x10, 0x8f, 0xd5, - 0xeb, 0x89, 0xac, 0x4e, 0xf2, 0x88, 0xdc, 0x8e, 0xd8, 0x06, 0x64, 0x78, 0x38, 0xde, 0xeb, 0xe3, - 0xf9, 0xaf, 0x29, 0x38, 0x11, 0x1b, 0x9b, 0xdc, 0x87, 0xc1, 0x60, 0xdc, 0xfb, 0xbb, 0x55, 0x2e, - 0xf6, 0xb6, 0x3f, 0x3f, 0xdd, 0xcc, 0x49, 0xba, 0xeb, 0x8b, 0x87, 0x3c, 0x44, 0x50, 0xcc, 0x4d, - 0xa0, 0x57, 0xa6, 0x18, 0x99, 0x84, 0x7e, 0xaf, 0xac, 0x36, 0xfc, 0x56, 0x90, 0x8a, 0x2a, 0xb6, - 0x71, 0xe8, 0x35, 0x2d, 0xbd, 0xac, 0x1b, 0x1b, 0xa5, 0x2d, 0xa6, 0x1b, 0x58, 0x3f, 0x3d, 0xde, - 0xd8, 0xb2, 0x3b, 0x44, 0xce, 0x03, 0x71, 0x6d, 0x5c, 0x80, 0x1b, 0x8e, 0xbe, 0xcd, 0x6d, 0x87, - 0x6d, 0x57, 0x45, 0x55, 0xf5, 0x15, 0xff, 0xe6, 0xcf, 0xdc, 0xf7, 0x27, 0xc8, 0x2c, 0x0c, 0xf3, - 0xa7, 0x55, 0xdd, 0x12, 0x40, 0x02, 0x06, 0x1d, 0xc2, 0x60, 0xe8, 0x60, 0xee, 0xc0, 0x64, 0x02, - 0xfa, 0xbc, 0x80, 0xac, 0xb2, 0x21, 0x04, 0x45, 0xa7, 0x48, 0xa9, 0xd7, 0x1f, 0x5c, 0x61, 0x0e, - 0x23, 0x23, 0xd0, 0x61, 0x97, 0xb6, 0xf8, 0x36, 0x4b, 0x77, 0x09, 0x8c, 0xf8, 0x45, 0xe6, 0x61, - 0x04, 0x13, 0x0d, 0xee, 0xc0, 0x86, 0xae, 0xa5, 0xbb, 0xc5, 0xba, 0x61, 0x6f, 0x36, 0xb8, 0xb5, - 0x05, 0xcd, 0x2d, 0xf3, 0x1d, 0x6e, 0xd9, 0x2e, 0x01, 0x40, 0x00, 0xf3, 0x3f, 0x69, 0x16, 0x85, - 0x49, 0xc1, 0xcf, 0xcc, 0xe2, 0xbc, 0x68, 0x9a, 0x8e, 0x2f, 0x26, 0xe7, 0x50, 0x4f, 0x1c, 0x9e, - 0x47, 0x7e, 0x13, 0x68, 0xb7, 0x4c, 0xd3, 0x11, 0x67, 0xdd, 0x5b, 0x14, 0xbf, 0xe9, 0x18, 0x64, - 0x85, 0x91, 0xdb, 0x47, 0xf1, 0x30, 0x25, 0xb7, 0x17, 0xf0, 0x76, 0x89, 0x5a, 0x91, 0xe0, 0x78, - 0x39, 0xd0, 0x44, 0x5d, 0x34, 0x6b, 0x96, 0x69, 0x3e, 0x0a, 0x5c, 0x47, 0x25, 0x8b, 0x6b, 0xae, - 0x46, 0x66, 0x95, 0xbb, 0xcc, 0xde, 0x42, 0x53, 0x69, 0x94, 0xde, 0x0c, 0xf4, 0xb9, 0x80, 0x13, - 0x0c, 0x4b, 0xa1, 0x97, 0x1b, 0x25, 0x53, 0xe3, 0x9a, 0x18, 0x47, 0x1f, 0xa1, 0x31, 0x7a, 0x0b, - 0x5b, 0xd8, 0x01, 0xfa, 0x23, 0x01, 0x59, 0xc2, 0xbd, 0x3f, 0xe4, 0xa6, 0x05, 0x28, 0x37, 0x60, - 0xc2, 0x53, 0x69, 0x8e, 0xc3, 0x4a, 0x5b, 0x5c, 0xbb, 0x6b, 0x56, 0x34, 0x6e, 0xad, 0xd5, 0x36, - 0x2b, 0x7a, 0x69, 0x95, 0xef, 0x36, 0x16, 0xbd, 0xd7, 0xe1, 0x74, 0xb2, 0x03, 0x04, 0x33, 0x02, - 0x1d, 0xd5, 0xda, 0xe6, 0x2a, 0xdf, 0x45, 0x18, 0xf8, 0x45, 0x4b, 0x78, 0x92, 0x05, 0x7b, 0xb9, - 0x9e, 0x5d, 0xc1, 0x78, 0xb8, 0xba, 0xbe, 0x52, 0x68, 0x18, 0xbc, 0xd9, 0xf2, 0xa6, 0xd7, 0xf1, - 0x5a, 0x8f, 0x0c, 0x82, 0x00, 0x33, 0xd0, 0xa5, 0x1b, 0xa5, 0x4a, 0x4d, 0xe3, 0x9a, 0x08, 0xd3, - 0x55, 0xac, 0x7f, 0xd3, 0x15, 0x3c, 0xf2, 0xe5, 0xd0, 0x01, 0xc4, 0xf5, 0x31, 0xcd, 0x3f, 0xaf, - 0xf0, 0x68, 0xfd, 0xd8, 0x65, 0x2f, 0x08, 0xa0, 0xc9, 0x63, 0xcf, 0xff, 0xfc, 0x77, 0x38, 0x2e, - 0xfc, 0x90, 0x0f, 0x14, 0xe8, 0xf0, 0x5e, 0x5b, 0xe4, 0x5c, 0x62, 0x3f, 0x08, 0x3d, 0xf0, 0x32, - 0x33, 0x4d, 0xad, 0xf5, 0x50, 0xd1, 0x33, 0xef, 0xbf, 0xf8, 0xf3, 0xa3, 0x63, 0x63, 0x24, 0xab, - 0x26, 0x3e, 0x3c, 0xc9, 0xd7, 0x0a, 0x0c, 0x48, 0x2f, 0x2a, 0x32, 0x97, 0x18, 0x28, 0xfa, 0x29, - 0x98, 0x99, 0x6f, 0xcd, 0x08, 0x61, 0x5e, 0x11, 0x30, 0xe7, 0x49, 0x3e, 0x0e, 0xa6, 0xff, 0x8e, - 0x54, 0xf7, 0xa4, 0x17, 0xe5, 0x3e, 0xf9, 0x5c, 0x81, 0x7e, 0xe9, 0x4d, 0x90, 0x6f, 0xe6, 0x49, - 0x23, 0x01, 0x9f, 0x6b, 0xc9, 0x06, 0x71, 0xcf, 0x0a, 0xdc, 0x33, 0xe4, 0x6c, 0x1c, 0x6e, 0xa4, - 0xba, 0xba, 0xc7, 0x7c, 0xb8, 0x9f, 0x29, 0x30, 0x28, 0x3f, 0xaa, 0xc8, 0x7c, 0x8b, 0x6f, 0x30, - 0x0f, 0xf2, 0x85, 0x23, 0xbd, 0xdc, 0xe8, 0x59, 0x01, 0x7a, 0x82, 0x8c, 0x37, 0x00, 0xcd, 0x6d, - 0xf2, 0x85, 0x02, 0x7d, 0x61, 0x59, 0x3b, 0xdb, 0x84, 0x1e, 0x97, 0x60, 0xe6, 0x5b, 0x31, 0x41, - 0x8c, 0x17, 0x05, 0xc6, 0x7f, 0x91, 0x5c, 0x1c, 0x46, 0xaf, 0xd1, 0xa9, 0x7b, 0xa1, 0x0e, 0xbf, - 0x4f, 0x3e, 0x51, 0xa0, 0x3f, 0xfc, 0x28, 0x20, 0xf9, 0x96, 0x5e, 0x10, 0xcd, 0x90, 0x21, 0xfa, - 0xd5, 0x41, 0xa7, 0x04, 0xe6, 0x71, 0x32, 0x9a, 0x8c, 0xd9, 0x26, 0x3f, 0x2a, 0x30, 0x14, 0x25, - 0xa2, 0x16, 0x9a, 0x56, 0x85, 0x12, 0xdc, 0x4b, 0xad, 0x1b, 0x22, 0xe6, 0x7f, 0x0b, 0xcc, 0x0b, - 0xe4, 0x42, 0x1c, 0xe6, 0xe0, 0x25, 0xa8, 0xee, 0x85, 0x2f, 0xe6, 0x7d, 0xf2, 0x8d, 0x02, 0xc3, - 0x51, 0x6a, 0x95, 0x5c, 0x3a, 0x82, 0xc0, 0xf5, 0x72, 0xb9, 0x7c, 0x64, 0x69, 0x4c, 0xcf, 0x8b, - 0x64, 0xa6, 0xc8, 0x64, 0x33, 0xc9, 0x08, 0x72, 0x0f, 0xca, 0xc2, 0xa6, 0x41, 0x25, 0xc6, 0xe8, - 0xa4, 0x06, 0x95, 0x18, 0xa7, 0x9e, 0x1a, 0x03, 0xf6, 0x15, 0xa7, 0xea, 0xea, 0x1f, 0xf2, 0x15, - 0x56, 0x63, 0x5d, 0xb6, 0x34, 0x51, 0x8d, 0xb2, 0x4e, 0x6a, 0xa2, 0x1a, 0x0f, 0xa9, 0x22, 0x7a, - 0x43, 0xe0, 0xbc, 0x4c, 0x16, 0x1a, 0xe2, 0xac, 0xba, 0x76, 0xea, 0x5e, 0xb8, 0xe7, 0xed, 0x93, - 0x2f, 0x15, 0x20, 0x87, 0xc5, 0x1e, 0xb9, 0x98, 0x88, 0x25, 0x56, 0x3f, 0x66, 0x16, 0x5a, 0xb6, - 0xc3, 0x44, 0x54, 0x91, 0xc8, 0x59, 0x32, 0x15, 0x97, 0x88, 0x55, 0xb7, 0xf5, 0xb6, 0xfc, 0x7b, - 0x05, 0x06, 0x24, 0x81, 0xd6, 0xa0, 0x2f, 0x46, 0xab, 0xc2, 0x06, 0x7d, 0x31, 0x46, 0x03, 0xd2, - 0x45, 0x81, 0xf7, 0x2a, 0xb9, 0xdc, 0x04, 0xde, 0x98, 0xad, 0xff, 0x49, 0x81, 0x7f, 0xc4, 0xa8, - 0x3b, 0x72, 0x35, 0xb9, 0x81, 0x24, 0x8a, 0xca, 0xcc, 0xb5, 0xa3, 0x19, 0x63, 0x66, 0x73, 0x22, - 0xb3, 0xf3, 0x64, 0x26, 0x56, 0x98, 0xf8, 0x26, 0x81, 0xde, 0xf9, 0x8b, 0x02, 0x03, 0x05, 0x7b, - 0xbd, 0xa6, 0x3b, 0x6c, 0xb3, 0xc2, 0x6f, 0x9b, 0xd6, 0xc3, 0xd5, 0x06, 0x97, 0x66, 0xbc, 0x2e, - 0x6d, 0x70, 0x69, 0x26, 0x68, 0x4d, 0x7a, 0x57, 0x60, 0x5f, 0x22, 0x37, 0xe3, 0xb0, 0xbf, 0xfb, - 0x58, 0xd5, 0xeb, 0x30, 0x0f, 0xf0, 0x1f, 0xbe, 0x3f, 0xbf, 0x53, 0xa0, 0x3f, 0xac, 0x27, 0x1b, - 0xb4, 0xab, 0x48, 0x09, 0xdb, 0xa0, 0x5d, 0x45, 0x0b, 0x56, 0xba, 0x24, 0xb2, 0xb8, 0x46, 0xae, - 0x24, 0x64, 0x11, 0x26, 0x93, 0x84, 0x5f, 0xdb, 0x5f, 0xba, 0xf4, 0xec, 0x65, 0x56, 0x79, 0xfe, - 0x32, 0xab, 0xfc, 0xf1, 0x32, 0xab, 0x7c, 0xf8, 0x2a, 0xdb, 0xf6, 0xfc, 0x55, 0xb6, 0xed, 0xb7, - 0x57, 0xd9, 0xb6, 0x87, 0xd9, 0xa0, 0xd3, 0xa7, 0x41, 0xb7, 0xce, 0x6e, 0x95, 0xdb, 0x9b, 0x1d, - 0xe2, 0x3f, 0x8c, 0xb9, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x41, 0x0e, 0xc0, 0xad, 0x19, - 0x00, 0x00, + 0x16, 0x37, 0x23, 0xc7, 0x1f, 0xcf, 0x9f, 0x3b, 0x36, 0x1c, 0x45, 0x9b, 0xc8, 0xf6, 0x38, 0x8e, + 0x9d, 0x18, 0x11, 0xd7, 0xb2, 0x13, 0x27, 0x4e, 0x36, 0x89, 0x3f, 0xf2, 0xa1, 0x78, 0x17, 0xeb, + 0x95, 0x83, 0x00, 0x1b, 0x60, 0x61, 0x8c, 0xc5, 0x89, 0xcc, 0x46, 0x16, 0x15, 0x92, 0x72, 0xe3, + 0x1a, 0x46, 0x81, 0xde, 0x7a, 0x2b, 0x90, 0x43, 0xef, 0x05, 0x7a, 0x29, 0x8a, 0x1e, 0xdb, 0xa2, + 0x68, 0xd1, 0x5b, 0x9b, 0x5e, 0x8a, 0x00, 0xb9, 0xf4, 0x54, 0xb4, 0x49, 0xff, 0x81, 0xfe, 0x07, + 0x05, 0x87, 0x8f, 0x32, 0x39, 0x22, 0x29, 0xc9, 0x48, 0x6e, 0xe2, 0xcc, 0xbc, 0xf7, 0x7e, 0x6f, + 0xe6, 0xf7, 0xe6, 0xfd, 0x06, 0x02, 0x6a, 0xbd, 0xab, 0x5b, 0x96, 0x6d, 0x1a, 0x65, 0xfd, 0xb1, + 0x5a, 0x30, 0x76, 0x2a, 0x25, 0x9d, 0x95, 0x0b, 0x5c, 0x7d, 0x52, 0xe5, 0xe6, 0x5e, 0xa6, 0x62, + 0x1a, 0xb6, 0x41, 0x46, 0x7c, 0x6b, 0x32, 0x87, 0x6b, 0x52, 0xc3, 0x45, 0xa3, 0x68, 0x88, 0x25, + 0xaa, 0xf3, 0xcb, 0x5d, 0x9d, 0x3a, 0x55, 0x34, 0x8c, 0x62, 0x89, 0xab, 0xac, 0xa2, 0xab, 0xac, + 0x5c, 0x36, 0x6c, 0x66, 0xeb, 0x46, 0xd9, 0xc2, 0xd9, 0xf3, 0x05, 0xc3, 0xda, 0x31, 0x2c, 0x75, + 0x8b, 0x59, 0x18, 0x44, 0xdd, 0x9d, 0xdd, 0xe2, 0x36, 0x9b, 0x55, 0x2b, 0xac, 0xa8, 0x97, 0xc5, + 0x62, 0x5c, 0x3b, 0x11, 0x81, 0xad, 0xc2, 0x4c, 0xb6, 0xe3, 0x39, 0x9c, 0x8c, 0x58, 0xc4, 0xcb, + 0xb6, 0x6e, 0xeb, 0x1c, 0x97, 0xd1, 0x61, 0x20, 0xff, 0x75, 0xa2, 0xad, 0x0b, 0xdb, 0x3c, 0x7f, + 0x52, 0xe5, 0x96, 0x4d, 0x37, 0x60, 0x28, 0x30, 0x6a, 0x55, 0x8c, 0xb2, 0xc5, 0xc9, 0x35, 0xe8, + 0x70, 0x63, 0x24, 0x95, 0x31, 0x65, 0xba, 0x27, 0x9b, 0xce, 0x84, 0xef, 0x40, 0xc6, 0xb5, 0x5b, + 0x6e, 0x7f, 0xfe, 0xeb, 0x68, 0x5b, 0x1e, 0x6d, 0xe8, 0x1d, 0xf8, 0xbb, 0x70, 0xfa, 0x9f, 0x0a, + 0x37, 0x99, 0x6d, 0x98, 0xab, 0xdc, 0x66, 0x7a, 0xc9, 0x8b, 0x49, 0xa6, 0x61, 0xc0, 0xc0, 0x99, + 0x25, 0x4d, 0x33, 0xb9, 0xe5, 0x46, 0xe9, 0xce, 0xcb, 0xc3, 0x94, 0xc1, 0xa9, 0x70, 0x47, 0x08, + 0x73, 0x09, 0x3a, 0x35, 0x77, 0x08, 0x71, 0x4e, 0x45, 0xe1, 0x94, 0x3d, 0x78, 0x76, 0xf4, 0x12, + 0xa4, 0x44, 0x08, 0x0c, 0x29, 0x41, 0x4d, 0x42, 0x27, 0x0b, 0x40, 0xf4, 0x3e, 0xe9, 0xff, 0x30, + 0x47, 0xd9, 0x0e, 0x91, 0x2d, 0x42, 0xbb, 0xc6, 0x6c, 0x86, 0xb0, 0xce, 0x46, 0xc1, 0x92, 0xac, + 0x85, 0x0d, 0x7d, 0x84, 0x59, 0xe3, 0x24, 0x97, 0x41, 0xdd, 0x06, 0x38, 0x64, 0x4a, 0x2d, 0x82, + 0x4b, 0xab, 0x8c, 0x43, 0xab, 0x8c, 0xcb, 0x5d, 0xa4, 0x55, 0x66, 0x9d, 0x15, 0x39, 0xda, 0xe6, + 0x7d, 0x96, 0xf4, 0xe3, 0x04, 0x9c, 0x8e, 0x08, 0x84, 0x59, 0x94, 0xa1, 0x9b, 0x79, 0x73, 0x49, + 0x65, 0x2c, 0x31, 0xdd, 0x93, 0xbd, 0x17, 0x95, 0x4a, 0xac, 0xa7, 0xcc, 0xbf, 0xb9, 0x59, 0xe4, + 0x5a, 0x30, 0x5d, 0x64, 0xcd, 0x61, 0x08, 0x72, 0x27, 0x90, 0xd9, 0x31, 0x3c, 0xd2, 0x46, 0x99, + 0xb9, 0x21, 0xfc, 0xa9, 0xa5, 0xbe, 0x55, 0x60, 0x38, 0x2c, 0x64, 0xf4, 0x81, 0x92, 0x51, 0xe8, + 0xd1, 0xad, 0xcd, 0x5d, 0x6e, 0xea, 0x8f, 0x74, 0xae, 0x89, 0xe0, 0x5d, 0x79, 0xd0, 0xad, 0x07, + 0x38, 0x42, 0x4e, 0x03, 0xe8, 0xd6, 0xa6, 0xc9, 0x77, 0x8d, 0xc7, 0x5c, 0x4b, 0x26, 0xc4, 0x7c, + 0xb7, 0x6e, 0xe5, 0xdd, 0x01, 0x72, 0x0f, 0xfa, 0x5c, 0xe3, 0x82, 0x5b, 0xee, 0xc9, 0x76, 0xb1, + 0x5f, 0x67, 0xa2, 0xf6, 0xeb, 0x81, 0x6f, 0x71, 0x3e, 0x68, 0x4a, 0x97, 0xe0, 0xa4, 0xd8, 0xce, + 0x9c, 0x65, 0x55, 0xb9, 0x5c, 0x3e, 0x67, 0xa0, 0x4f, 0x17, 0xe3, 0xc1, 0xe2, 0x09, 0x0e, 0xd2, + 0xff, 0x23, 0xaf, 0x25, 0x17, 0x78, 0xb0, 0x37, 0xe4, 0xc2, 0x99, 0x8c, 0x82, 0x19, 0xb4, 0xaf, + 0x95, 0x8d, 0x16, 0x70, 0xff, 0xb6, 0x18, 0xfa, 0x69, 0x02, 0xab, 0x4c, 0x0e, 0x83, 0x69, 0x14, + 0xa1, 0xd3, 0xcd, 0xda, 0x63, 0xe7, 0x9d, 0x58, 0x76, 0x86, 0x7b, 0x41, 0x6e, 0x06, 0x12, 0x45, + 0x6a, 0x7a, 0xde, 0xdf, 0x1c, 0x31, 0x5f, 0x2a, 0x30, 0x14, 0x12, 0xaf, 0xb9, 0x43, 0x25, 0x04, + 0xda, 0xcb, 0x6c, 0x87, 0x0b, 0x00, 0xdd, 0x79, 0xf1, 0x9b, 0x8c, 0x41, 0x8f, 0xc6, 0xad, 0x82, + 0xa9, 0x57, 0x04, 0xb6, 0x84, 0x98, 0xf2, 0x0f, 0x91, 0x41, 0x48, 0x54, 0xcd, 0x52, 0xb2, 0x5d, + 0xcc, 0x38, 0x3f, 0x1d, 0x3f, 0x25, 0xa3, 0x68, 0x24, 0x8f, 0xbb, 0x7e, 0x9c, 0xdf, 0x8e, 0x9f, + 0x12, 0x2f, 0xb2, 0xd2, 0x2d, 0xa7, 0x6d, 0xec, 0x25, 0x3b, 0x5c, 0x3f, 0xbe, 0x21, 0xa7, 0x76, + 0x0a, 0x26, 0x77, 0x6e, 0xd1, 0x64, 0xa7, 0x5b, 0x3b, 0xf8, 0x49, 0x73, 0x30, 0x2a, 0x36, 0xd8, + 0xcf, 0x69, 0x89, 0x12, 0x67, 0xa1, 0xdf, 0xcf, 0xf1, 0xdc, 0x2a, 0x66, 0x28, 0x8d, 0x52, 0x1d, + 0xc6, 0xa2, 0x5d, 0xe1, 0xb1, 0xdf, 0x92, 0xd9, 0x3b, 0xd3, 0x4c, 0x91, 0xd5, 0x71, 0xf8, 0x9d, + 0x90, 0x50, 0x6f, 0x8b, 0xc9, 0xbf, 0x1f, 0x87, 0xf1, 0x98, 0x60, 0x98, 0xd8, 0xfb, 0xf2, 0x1d, + 0xe2, 0xb2, 0x7a, 0x23, 0x96, 0xd5, 0x71, 0x1e, 0x91, 0xdb, 0x21, 0xdb, 0x80, 0x0c, 0x0f, 0xc6, + 0x7b, 0x73, 0x3c, 0xff, 0x33, 0x01, 0x27, 0x23, 0x63, 0x93, 0xfb, 0x30, 0xe8, 0x8f, 0x7b, 0x7f, + 0xaf, 0xc2, 0xc5, 0xde, 0xf6, 0x67, 0xa7, 0x9b, 0x39, 0x49, 0x67, 0x7d, 0xbe, 0xce, 0x43, 0x08, + 0xc5, 0x9c, 0x04, 0x7a, 0x65, 0x8a, 0x91, 0x49, 0xe8, 0x77, 0xcb, 0x6a, 0xd3, 0x6b, 0x05, 0x89, + 0xb0, 0x62, 0x1b, 0x87, 0x5e, 0xc3, 0xd4, 0x8b, 0x7a, 0x79, 0xb3, 0xb0, 0xcd, 0xf4, 0x32, 0xd6, + 0x4f, 0x8f, 0x3b, 0xb6, 0xe2, 0x0c, 0x91, 0x0b, 0x40, 0x1c, 0x1b, 0x07, 0xe0, 0xa6, 0xad, 0xef, + 0x70, 0xcb, 0x66, 0x3b, 0x15, 0x51, 0x55, 0x7d, 0xf9, 0xbf, 0x79, 0x33, 0xf7, 0xbd, 0x09, 0x32, + 0x0b, 0xc3, 0xfc, 0x69, 0x45, 0x37, 0x05, 0x10, 0x9f, 0x41, 0x87, 0x30, 0x18, 0x3a, 0x9c, 0x3b, + 0x34, 0x99, 0x80, 0x3e, 0x37, 0x20, 0x2b, 0x6d, 0x0a, 0x41, 0xd1, 0x29, 0x52, 0xea, 0xf5, 0x06, + 0x57, 0x99, 0xcd, 0xc8, 0x08, 0x74, 0x58, 0x85, 0x6d, 0xbe, 0xc3, 0x92, 0x5d, 0x02, 0x23, 0x7e, + 0x91, 0x79, 0x18, 0xc1, 0x44, 0xfd, 0x3b, 0xb0, 0xa9, 0x6b, 0xc9, 0x6e, 0xb1, 0x6e, 0xd8, 0x9d, + 0xf5, 0x6f, 0x6d, 0x4e, 0x73, 0xca, 0x7c, 0x97, 0x9b, 0x96, 0x43, 0x00, 0x10, 0xc0, 0xbc, 0x4f, + 0xa9, 0x03, 0xf6, 0x48, 0x1d, 0x90, 0xa6, 0x51, 0xb7, 0xe4, 0xbc, 0xc4, 0x4d, 0xce, 0xf3, 0x86, + 0x61, 0x7b, 0x5a, 0x73, 0x0e, 0xe5, 0x46, 0xfd, 0x3c, 0xd2, 0x9f, 0x40, 0xbb, 0x69, 0x18, 0xb6, + 0xa0, 0x42, 0x6f, 0x5e, 0xfc, 0xa6, 0x63, 0x90, 0x16, 0x46, 0x4e, 0x10, 0x3c, 0x6b, 0xc9, 0xed, + 0x45, 0xbc, 0x7c, 0xc2, 0x56, 0xc4, 0x38, 0x5e, 0xf1, 0xf5, 0x58, 0x07, 0xcd, 0xba, 0x69, 0x18, + 0x8f, 0x7c, 0xb7, 0x55, 0xc1, 0xe4, 0x9a, 0x23, 0xa1, 0x59, 0xe9, 0x2e, 0xb3, 0xb6, 0xd1, 0x54, + 0x1a, 0xa5, 0x37, 0x7d, 0x6d, 0xd0, 0xe7, 0x04, 0xc3, 0x52, 0xe8, 0xe5, 0xe5, 0x82, 0xa1, 0x71, + 0x4d, 0x8c, 0xa3, 0x8f, 0xc0, 0x18, 0xbd, 0x85, 0x1d, 0xee, 0x10, 0xfd, 0x91, 0x80, 0x2c, 0xe3, + 0xde, 0xd7, 0xb9, 0x69, 0x01, 0xca, 0x0d, 0x98, 0x70, 0x45, 0x9c, 0x6d, 0xb3, 0xc2, 0x36, 0xd7, + 0xee, 0x1a, 0x25, 0x8d, 0x9b, 0xeb, 0xd5, 0xad, 0x92, 0x5e, 0x58, 0xe3, 0x7b, 0x8d, 0x35, 0xf1, + 0x75, 0x38, 0x13, 0xef, 0x00, 0xc1, 0x8c, 0x40, 0x47, 0xa5, 0xba, 0xb5, 0xc6, 0xf7, 0x10, 0x06, + 0x7e, 0xd1, 0x02, 0x9e, 0x64, 0xce, 0x5a, 0xa9, 0x65, 0x97, 0x2b, 0x3f, 0x5c, 0xdb, 0x58, 0xcd, + 0x35, 0x0c, 0xde, 0x6c, 0xf5, 0xd3, 0xeb, 0x78, 0xeb, 0x87, 0x06, 0x41, 0x80, 0x29, 0xe8, 0xd2, + 0xcb, 0x85, 0x52, 0x55, 0xe3, 0x9a, 0x08, 0xd3, 0x95, 0xaf, 0x7d, 0xd3, 0x55, 0x3c, 0xf2, 0x95, + 0xc0, 0x01, 0x44, 0xb5, 0x39, 0xcd, 0x3b, 0xaf, 0xe0, 0x68, 0xed, 0xd8, 0x65, 0x2f, 0x08, 0xa0, + 0xd9, 0x63, 0xff, 0x17, 0x50, 0xe1, 0xc6, 0xdd, 0xe9, 0xe5, 0xbd, 0x60, 0x29, 0xc7, 0x83, 0xea, + 0xae, 0x03, 0xe5, 0x11, 0x20, 0xca, 0x1b, 0x82, 0x8b, 0x3c, 0x83, 0xec, 0xb3, 0x13, 0x70, 0x5c, + 0x78, 0x20, 0x1f, 0x2a, 0xd0, 0xe1, 0xbe, 0x0d, 0xc9, 0xf9, 0xd8, 0xee, 0x15, 0x78, 0x8e, 0xa6, + 0x66, 0x9a, 0x5a, 0xeb, 0xe2, 0xa0, 0x67, 0x3f, 0x78, 0xf9, 0xc7, 0xb3, 0x63, 0x63, 0x24, 0xad, + 0xc6, 0x3e, 0x93, 0xc9, 0xd7, 0x0a, 0x0c, 0x48, 0xef, 0x3f, 0x32, 0x17, 0x1b, 0x28, 0xfc, 0xe1, + 0x9a, 0x9a, 0x6f, 0xcd, 0x08, 0x61, 0x2e, 0x0a, 0x98, 0xf3, 0x24, 0x1b, 0x05, 0xd3, 0x7b, 0xf5, + 0xaa, 0xfb, 0xd2, 0xfb, 0xf7, 0x80, 0x7c, 0xae, 0x40, 0xbf, 0xf4, 0x82, 0xc9, 0x36, 0xf3, 0x00, + 0x93, 0x80, 0xcf, 0xb5, 0x64, 0x83, 0xb8, 0x67, 0x05, 0xee, 0x19, 0x72, 0x2e, 0x0a, 0x37, 0x9e, + 0xba, 0xba, 0xcf, 0x3c, 0xb8, 0x9f, 0x29, 0x30, 0x28, 0x3f, 0x01, 0xc9, 0x7c, 0x8b, 0x2f, 0x46, + 0x17, 0xf2, 0xc5, 0x23, 0xbd, 0x33, 0xe9, 0x39, 0x01, 0x7a, 0x82, 0x8c, 0x37, 0x00, 0xcd, 0x2d, + 0xf2, 0x85, 0x02, 0x7d, 0x41, 0x11, 0x3e, 0xdb, 0xc4, 0xeb, 0x41, 0x82, 0x99, 0x6d, 0xc5, 0x04, + 0x31, 0x5e, 0x12, 0x18, 0xff, 0x41, 0x32, 0x51, 0x18, 0xdd, 0xb6, 0xac, 0xee, 0x07, 0xf4, 0xc8, + 0x01, 0xf9, 0x44, 0x81, 0xfe, 0xe0, 0x13, 0x86, 0x64, 0x5b, 0x7a, 0xef, 0x34, 0x43, 0x86, 0xf0, + 0x37, 0x12, 0x9d, 0x12, 0x98, 0xc7, 0xc9, 0x68, 0x3c, 0x66, 0x8b, 0xfc, 0xa8, 0xc0, 0x50, 0x98, + 0xe4, 0x5b, 0x68, 0x5a, 0xc3, 0x4a, 0x70, 0x2f, 0xb7, 0x6e, 0x88, 0x98, 0xff, 0x29, 0x30, 0x2f, + 0x90, 0x8b, 0x51, 0x98, 0xfd, 0xd7, 0x9f, 0xba, 0x1f, 0xec, 0x13, 0x07, 0xe4, 0x1b, 0x05, 0x86, + 0xc3, 0xb4, 0x35, 0xb9, 0x7c, 0x04, 0x39, 0xee, 0xe6, 0x72, 0xe5, 0xc8, 0x42, 0x9e, 0x5e, 0x10, + 0xc9, 0x4c, 0x91, 0xc9, 0x66, 0x92, 0x11, 0xe4, 0x1e, 0x94, 0x75, 0x56, 0x83, 0x4a, 0x8c, 0x90, + 0x6d, 0x0d, 0x2a, 0x31, 0x4a, 0xcc, 0x35, 0x06, 0xec, 0xe9, 0x63, 0xd5, 0x91, 0x63, 0xe4, 0x2b, + 0xac, 0xc6, 0x9a, 0x8a, 0x6a, 0xa2, 0x1a, 0x65, 0xd9, 0xd6, 0x44, 0x35, 0xd6, 0x89, 0x34, 0x7a, + 0x43, 0xe0, 0xbc, 0x42, 0x16, 0x1a, 0xe2, 0xac, 0x38, 0x76, 0xea, 0x7e, 0xb0, 0x05, 0x1f, 0x90, + 0x2f, 0x15, 0x20, 0xf5, 0xda, 0x93, 0x5c, 0x8a, 0xc5, 0x12, 0x29, 0x67, 0x53, 0x0b, 0x2d, 0xdb, + 0x61, 0x22, 0xaa, 0x48, 0xe4, 0x1c, 0x99, 0x8a, 0x4a, 0xc4, 0xac, 0xd9, 0xba, 0x5b, 0xfe, 0xbd, + 0x02, 0x03, 0x92, 0x5e, 0x6c, 0xd0, 0x17, 0xc3, 0x45, 0x6a, 0x83, 0xbe, 0x18, 0x21, 0x49, 0xe9, + 0x92, 0xc0, 0x7b, 0x95, 0x5c, 0x69, 0x02, 0x6f, 0xc4, 0xd6, 0xff, 0xa4, 0xc0, 0x89, 0x08, 0xb1, + 0x49, 0xae, 0xc6, 0x37, 0x90, 0x58, 0x8d, 0x9b, 0xba, 0x76, 0x34, 0x63, 0xcc, 0x6c, 0x4e, 0x64, + 0x76, 0x81, 0xcc, 0x44, 0x0a, 0x13, 0xcf, 0xc4, 0xd7, 0x3b, 0x7f, 0x56, 0x60, 0x20, 0x67, 0x6d, + 0x54, 0x75, 0x9b, 0x6d, 0x95, 0xf8, 0x6d, 0xc3, 0x7c, 0xb8, 0xd6, 0xe0, 0xd2, 0x8c, 0x96, 0xc9, + 0x0d, 0x2e, 0xcd, 0x18, 0xe9, 0x4b, 0xef, 0x0a, 0xec, 0xcb, 0xe4, 0x66, 0x14, 0xf6, 0xf7, 0x1e, + 0xab, 0x7a, 0x0d, 0xe6, 0x21, 0xfe, 0xfa, 0xfb, 0xf3, 0x3b, 0x05, 0xfa, 0x83, 0xf2, 0xb6, 0x41, + 0xbb, 0x0a, 0x55, 0xd4, 0x0d, 0xda, 0x55, 0xb8, 0x7e, 0xa6, 0xcb, 0x22, 0x8b, 0x6b, 0x64, 0x31, + 0x26, 0x8b, 0x20, 0x99, 0x24, 0xfc, 0xda, 0x01, 0xf9, 0x41, 0x01, 0xe2, 0xbf, 0x92, 0xdd, 0xd3, + 0x26, 0x8b, 0xb1, 0x78, 0x62, 0x85, 0x78, 0xea, 0xea, 0x91, 0x6c, 0x31, 0xa7, 0x05, 0x91, 0xd3, + 0x2c, 0x51, 0xa3, 0x72, 0xda, 0x16, 0xf6, 0x75, 0x89, 0x2c, 0x5f, 0x7e, 0xfe, 0x2a, 0xad, 0xbc, + 0x78, 0x95, 0x56, 0x7e, 0x7b, 0x95, 0x56, 0x3e, 0x7a, 0x9d, 0x6e, 0x7b, 0xf1, 0x3a, 0xdd, 0xf6, + 0xcb, 0xeb, 0x74, 0xdb, 0xc3, 0xb4, 0xdf, 0xd3, 0x53, 0xbf, 0x2f, 0x7b, 0xaf, 0xc2, 0xad, 0xad, + 0x0e, 0xf1, 0xd7, 0xd1, 0xdc, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x72, 0x0b, 0x8a, 0x24, + 0x1b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1857,6 +1959,7 @@ type QueryClient interface { AttachedHolderPublicKey(ctx context.Context, in *QueryAttachedHolderPublicKeyRequest, opts ...grpc.CallOption) (*QueryAttachedHolderPublicKeyResponse, error) IsSuitableForZK(ctx context.Context, in *QueryIsCredentialInZKSDIRequest, opts ...grpc.CallOption) (*QueryIsCredentialInZKSDIResponse, error) CredentialHash(ctx context.Context, in *QueryCredentialHashRequest, opts ...grpc.CallOption) (*QueryCredentialHashResponse, error) + VerificationHolder(ctx context.Context, in *QueryHolderByVerificationIdRequest, opts ...grpc.CallOption) (*QueryHolderByVerificationIdResponse, error) } type queryClient struct { @@ -2002,6 +2105,15 @@ func (c *queryClient) CredentialHash(ctx context.Context, in *QueryCredentialHas return out, nil } +func (c *queryClient) VerificationHolder(ctx context.Context, in *QueryHolderByVerificationIdRequest, opts ...grpc.CallOption) (*QueryHolderByVerificationIdResponse, error) { + out := new(QueryHolderByVerificationIdResponse) + err := c.cc.Invoke(ctx, "/swisstronik.compliance.Query/VerificationHolder", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Parameters queries the parameters of the module. @@ -2020,6 +2132,7 @@ type QueryServer interface { AttachedHolderPublicKey(context.Context, *QueryAttachedHolderPublicKeyRequest) (*QueryAttachedHolderPublicKeyResponse, error) IsSuitableForZK(context.Context, *QueryIsCredentialInZKSDIRequest) (*QueryIsCredentialInZKSDIResponse, error) CredentialHash(context.Context, *QueryCredentialHashRequest) (*QueryCredentialHashResponse, error) + VerificationHolder(context.Context, *QueryHolderByVerificationIdRequest) (*QueryHolderByVerificationIdResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -2071,6 +2184,9 @@ func (*UnimplementedQueryServer) IsSuitableForZK(ctx context.Context, req *Query func (*UnimplementedQueryServer) CredentialHash(ctx context.Context, req *QueryCredentialHashRequest) (*QueryCredentialHashResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CredentialHash not implemented") } +func (*UnimplementedQueryServer) VerificationHolder(ctx context.Context, req *QueryHolderByVerificationIdRequest) (*QueryHolderByVerificationIdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method VerificationHolder not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -2346,6 +2462,24 @@ func _Query_CredentialHash_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _Query_VerificationHolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryHolderByVerificationIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).VerificationHolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/swisstronik.compliance.Query/VerificationHolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).VerificationHolder(ctx, req.(*QueryHolderByVerificationIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "swisstronik.compliance.Query", HandlerType: (*QueryServer)(nil), @@ -2410,6 +2544,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "CredentialHash", Handler: _Query_CredentialHash_Handler, }, + { + MethodName: "VerificationHolder", + Handler: _Query_VerificationHolder_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "swisstronik/compliance/query.proto", @@ -3139,6 +3277,16 @@ func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) MarshalToS _ = i var l int _ = l + if m.IsRevoked { + i-- + if m.IsRevoked { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + } if m.Version != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.Version)) i-- @@ -3620,6 +3768,66 @@ func (m *QueryCredentialHashResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } +func (m *QueryHolderByVerificationIdRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryHolderByVerificationIdRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHolderByVerificationIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.VerificationId) > 0 { + i -= len(m.VerificationId) + copy(dAtA[i:], m.VerificationId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.VerificationId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryHolderByVerificationIdResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryHolderByVerificationIdResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHolderByVerificationIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { offset -= sovQuery(v) base := offset @@ -3955,6 +4163,9 @@ func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) Size() (n if m.Version != 0 { n += 1 + sovQuery(uint64(m.Version)) } + if m.IsRevoked { + n += 2 + } return n } @@ -4135,6 +4346,32 @@ func (m *QueryCredentialHashResponse) Size() (n int) { return n } +func (m *QueryHolderByVerificationIdRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.VerificationId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryHolderByVerificationIdResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func sovQuery(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -6295,6 +6532,26 @@ func (m *QueryVerificationsDetailsResponse_MergedVerificationDetails) Unmarshal( break } } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsRevoked", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsRevoked = bool(v != 0) default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -7440,6 +7697,170 @@ func (m *QueryCredentialHashResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryHolderByVerificationIdRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryHolderByVerificationIdRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHolderByVerificationIdRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VerificationId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VerificationId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryHolderByVerificationIdResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryHolderByVerificationIdResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHolderByVerificationIdResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipQuery(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/compliance/types/query.pb.gw.go b/x/compliance/types/query.pb.gw.go index d51c9264..d85e567a 100644 --- a/x/compliance/types/query.pb.gw.go +++ b/x/compliance/types/query.pb.gw.go @@ -703,6 +703,60 @@ func local_request_Query_CredentialHash_0(ctx context.Context, marshaler runtime } +func request_Query_VerificationHolder_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHolderByVerificationIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["verificationId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "verificationId") + } + + protoReq.VerificationId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "verificationId", err) + } + + msg, err := client.VerificationHolder(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_VerificationHolder_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryHolderByVerificationIdRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["verificationId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "verificationId") + } + + protoReq.VerificationId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "verificationId", err) + } + + msg, err := server.VerificationHolder(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1054,6 +1108,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_VerificationHolder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_VerificationHolder_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_VerificationHolder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1395,6 +1472,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_VerificationHolder_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_VerificationHolder_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_VerificationHolder_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1428,6 +1525,8 @@ var ( pattern_Query_IsSuitableForZK_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"swisstronik", "compliance", "zk", "isSuitable", "address", "verificationID"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_CredentialHash_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"swisstronik", "compliance", "zk", "credentialHash", "verificationId"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_VerificationHolder_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"swisstronik", "compliance", "holder", "verificationId"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -1460,4 +1559,6 @@ var ( forward_Query_IsSuitableForZK_0 = runtime.ForwardResponseMessage forward_Query_CredentialHash_0 = runtime.ForwardResponseMessage + + forward_Query_VerificationHolder_0 = runtime.ForwardResponseMessage ) diff --git a/x/evm/keeper/sgxvm_connector.go b/x/evm/keeper/sgxvm_connector.go index 0733410d..e716ec55 100644 --- a/x/evm/keeper/sgxvm_connector.go +++ b/x/evm/keeper/sgxvm_connector.go @@ -76,6 +76,10 @@ func (q Connector) Query(req []byte) ([]byte, error) { return q.GetRevocationTreeRoot() case *librustgo.CosmosRequest_AddVerificationDetailsV2: return q.AddVerificationDetailsV2(request) + case *librustgo.CosmosRequest_RevokeVerification: + return q.RevokeVerification(request) + case *librustgo.CosmosRequest_ConvertCredential: + return q.ConvertCredential(request) } return nil, errors.New("wrong query received") @@ -318,24 +322,33 @@ func (q Connector) GetVerificationData(req *librustgo.CosmosRequest_GetVerificat var resData []*librustgo.VerificationDetails for i, v := range verifications { - issuerAccount, err := sdk.AccAddressFromBech32(v.IssuerAddress) + details := verificationsDetails[i] + + isVerificationRevoked, err := q.EVMKeeper.ComplianceKeeper.IsVerificationRevoked(q.Context, verifications[i].VerificationId) if err != nil { return nil, err } - details := verificationsDetails[i] - // Addresses from Query requests are Ethereum Addresses - resData = append(resData, &librustgo.VerificationDetails{ - VerificationType: uint32(v.Type), - VerificationID: v.VerificationId, - IssuerAddress: common.Address(issuerAccount.Bytes()).Bytes(), - OriginChain: details.OriginChain, - IssuanceTimestamp: details.IssuanceTimestamp, - ExpirationTimestamp: details.ExpirationTimestamp, - OriginalData: details.OriginalData, - Schema: details.Schema, - IssuerVerificationId: details.IssuerVerificationId, - Version: details.Version, - }) + + if !isVerificationRevoked { + issuerAccount, err := sdk.AccAddressFromBech32(v.IssuerAddress) + if err != nil { + return nil, err + } + + // Addresses from Query requests are Ethereum Addresses + resData = append(resData, &librustgo.VerificationDetails{ + VerificationType: uint32(v.Type), + VerificationID: v.VerificationId, + IssuerAddress: common.Address(issuerAccount.Bytes()).Bytes(), + OriginChain: details.OriginChain, + IssuanceTimestamp: details.IssuanceTimestamp, + ExpirationTimestamp: details.ExpirationTimestamp, + OriginalData: details.OriginalData, + Schema: details.Schema, + IssuerVerificationId: details.IssuerVerificationId, + Version: details.Version, + }) + } } return proto.Marshal(&librustgo.QueryGetVerificationDataResponse{ Data: resData, @@ -371,3 +384,38 @@ func (q Connector) GetRevocationTreeRoot() ([]byte, error) { Root: root.Bytes(), }) } + +func (q Connector) RevokeVerification(req *librustgo.CosmosRequest_RevokeVerification) ([]byte, error) { + issuerAddress := sdk.AccAddress(req.RevokeVerification.Issuer) + + err := q.EVMKeeper.ComplianceKeeper.RevokeVerification(q.Context, req.RevokeVerification.VerificationId, issuerAddress) + if err != nil { + return nil, err + } + + return proto.Marshal(&librustgo.QueryRevokeVerificationResponse{}) +} + +func (q Connector) ConvertCredential(req *librustgo.CosmosRequest_ConvertCredential) ([]byte, error) { + caller := sdk.AccAddress(req.ConvertCredential.Caller) + + if req.ConvertCredential.VerificationId == nil { + return nil, errors.New("invalid verification id") + } + + if req.ConvertCredential.HolderPublicKey == nil { + return nil, errors.New("invalid holder public key") + } + + err := q.EVMKeeper.ComplianceKeeper.ConvertCredential( + q.Context, + req.ConvertCredential.VerificationId, + req.ConvertCredential.HolderPublicKey, + caller, + ) + if err != nil { + return nil, err + } + + return proto.Marshal(&librustgo.QueryConvertCredentialResponse{}) +} diff --git a/x/evm/types/interfaces.go b/x/evm/types/interfaces.go index f7f63655..1527ecfc 100644 --- a/x/evm/types/interfaces.go +++ b/x/evm/types/interfaces.go @@ -74,6 +74,9 @@ type ComplianceKeeper interface { GetIssuanceTreeRoot(ctx sdk.Context) (*big.Int, error) GetRevocationTreeRoot(ctx sdk.Context) (*big.Int, error) SetTreeRoot(context sdk.Context, treeKey []byte, root *merkletree.Hash) error + IsVerificationRevoked(ctx sdk.Context, verificationId []byte) (bool, error) + RevokeVerification(ctx sdk.Context, verificationDetailsId []byte, issuerAddress sdk.AccAddress) error + ConvertCredential(ctx sdk.Context, verificationId []byte, publicKeyToSet []byte, caller sdk.AccAddress) error } // Event Hooks