From 7a111e040e5b3d70d552cbc48798f8a668bb9711 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Mon, 16 Jan 2023 17:38:36 +0300 Subject: [PATCH 1/9] fix: Fix for converting old time to timestamp (#511) Fix for converting old time to timestamp --- app/migrations/helpers/constant.go | 5 +++++ app/migrations/helpers/protobuf.go | 8 ++++++++ app/migrations/helpers/protobuf_test.go | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 app/migrations/helpers/constant.go diff --git a/app/migrations/helpers/constant.go b/app/migrations/helpers/constant.go new file mode 100644 index 000000000..dd193b4a9 --- /dev/null +++ b/app/migrations/helpers/constant.go @@ -0,0 +1,5 @@ +package helpers + +const ( + OldTimeFormat = "2006-01-02 15:04:05.999999999 -0700 MST" +) diff --git a/app/migrations/helpers/protobuf.go b/app/migrations/helpers/protobuf.go index dcdc833c6..8c299c028 100644 --- a/app/migrations/helpers/protobuf.go +++ b/app/migrations/helpers/protobuf.go @@ -27,6 +27,14 @@ func MustParseFromStringTimeToGoTime(timeString string) time.Time { } t, err := time.Parse(time.RFC3339, timeString) + if err == nil { + return t + } + t, err = time.Parse(time.RFC3339Nano, timeString) + if err == nil { + return t + } + t, err = time.Parse(OldTimeFormat, timeString) if err != nil { panic(err) } diff --git a/app/migrations/helpers/protobuf_test.go b/app/migrations/helpers/protobuf_test.go index 9309f7c01..0f002bf99 100644 --- a/app/migrations/helpers/protobuf_test.go +++ b/app/migrations/helpers/protobuf_test.go @@ -1,10 +1,18 @@ package helpers import ( + "time" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) +var ( + expecteRFC3339, _ = time.Parse(time.RFC3339, "2022-09-06T16:19:39Z") + expecteRFC3339Nano, _ = time.Parse(time.RFC3339Nano, "2022-09-06T16:19:39.464251406Z") + expectedOldTimeFormat, _ = time.Parse(OldTimeFormat, "2022-02-22 13:32:19.464251406 +0000 UTC") +) + var _ = DescribeTable( "Test GenerateEd25519VerificationKey2020VerificationMaterial", func(v1PubKey string, v2PubKey string) { @@ -17,3 +25,15 @@ var _ = DescribeTable( // Mainnet case Entry("Valid: Real case", "zF7rhDBfUt9d1gJPjx7s1JXfUY7oVWkYsWCo7fztHtepn", "z6Mkta7joRuvDh7UnoESdgpr9dDUMh5LvdoECDi3WGrJoscA"), ) + +var _ = DescribeTable( + "Test MustParseFromStringTimeToGoTime", + func(inputS string, outputTT time.Time) { + timeTime := MustParseFromStringTimeToGoTime(inputS) + Expect(timeTime).To(Equal(outputTT)) + }, + + Entry("Valid: General conversion RFC3339", "2022-09-06T16:19:39Z", expecteRFC3339), + Entry("Valid: General conversion RFC3339Nano", "2022-09-06T16:19:39.464251406Z", expecteRFC3339Nano), + Entry("Valid: General conversion OldTimeFormat", "2022-02-22 13:32:19.464251406 +0000 UTC", expectedOldTimeFormat), +) From 5d876fb47e558dc40a254bf8be15eb3d82ef9f02 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 16:55:26 +0000 Subject: [PATCH 2/9] feat: Get resource protobufs inline with DID protobufs [DEV-2148] (#516) * Update package-lock.json * Update diddoc.proto * Update .openapirc.yml * Update JSON tags for DIDDocs * proto-gen after resource proto changes * proto-gen after resource query update * proto-gen for resource tx * swagger gen * Update statik.go * Update fee to gas auto * Update .openapirc.yml * Remove Swagger gitignorex * Switch back to config.yaml * Update protoc-swagger-gen.sh * playing with buf options * Swagger combine update * Initialise all * Update buf.gen.swagger.yaml * Swagger tag replace * Revert gitignore * Added did & resource CLI payload spec-compliant changes & protobuf based resource payload & various textual fixes * Fixed stylecheck namings * Makes all the fields in unit tests in camelCase * Make fields in camelCase for integration tests also * Added consistent uuid as flag & pricing flags * make swagger * Bump buf * Update .goreleaser.yml * Added default flag behavior * Update .openapirc.yml * Update config.yaml * Exclude via super-linter paths * Update logging statements * Aligned integration cli * Fixed namings * Added consistent queries * Add fees param for upgrade integration tests * Makes linter happy * Fix upgrade tests (resources are left) * Makes linter happy * Change Marshaller for cheqd-noded CLI * Fix upgrade integration tests * Update fee.go * Added module flag overrides per transaction * Removed redundant def * Added as pairs * fix(resource): Fix resource version persistence (#517) * Fix problem with save version field in Resource * Add integration tests for testing last commit changes * Last version of mainnet should be 0.6.10 Co-authored-by: abdulla-ashurov * Fixed field construction * Add fixes for CLI and upgrade tests * Added resource version integration tests * Remove duplicates * Add versions to the resources * Polishes * Fixed structure * Removed redundant * Cleanup * Add gas price * Add example payload file to create DID command * Clarified fee flag for create and deactivate * Update tx_update_diddoc.go - Added example payload file - Clarified fees * Revert "Add gas price" This reverts commit 149d22d5a2108f0c8d6bb045f92820de002279ea. * Update tx.go * Update tx.go * Add signInputs to DID create and update * Update tx_create_resource.go * Correct typos in flag description * make swagger * Set default tx gas to default persistent * Update payload examples * Set Gas adjustment back to 1.8 * Remove resource ID flag * Update resource proto comment for collections * Rename resource-metadata subcommand * Rename collection-resources and resource subcommands * make proto-all * Update help text for tx commands * Aligned resource id traces * Typo fix, triggering fresh run * Removed redundant arg * Switched to match command naming * Fix linter exclude [skip ci] Co-authored-by: Tasos Derisiotis <50984242+Eengineer1@users.noreply.github.com> Co-authored-by: Andrew Nikitin Co-authored-by: abdulla-ashurov --- .github/linters/.openapirc.yml | 11 - .github/workflows/lint.yml | 1 + .github/workflows/test.yml | 2 +- .gitignore | 2 +- .goreleaser.yml | 2 +- api/cheqd/did/v2/diddoc.pulsar.go | 116 +- api/cheqd/resource/v2/query.pulsar.go | 415 ++- api/cheqd/resource/v2/query_grpc.pb.go | 6 + api/cheqd/resource/v2/resource.pulsar.go | 2812 +++++++++-------- api/cheqd/resource/v2/tx.pulsar.go | 166 +- api/docs/config.json | 44 - api/docs/config.yaml | 40 + api/docs/statik/statik.go | 8 +- api/docs/swagger.yaml | 241 +- app/app.go | 8 +- app/migrations/migration_did_simple.go | 2 +- docker/localnet/mainnet-latest.env | 2 +- package-lock.json | 93 +- proto/buf.gen.swagger.yaml | 2 + proto/buf.lock | 2 +- proto/cheqd/did/v2/diddoc.proto | 4 +- proto/cheqd/resource/v2/query.proto | 18 +- proto/cheqd/resource/v2/resource.proto | 35 +- proto/cheqd/resource/v2/tx.proto | 23 +- scripts/protoc-swagger-gen.sh | 2 +- tests/integration/cli/config.go | 2 +- tests/integration/cli/query.go | 6 +- tests/integration/cli/tx.go | 34 +- tests/integration/cli_diddoc_negative_test.go | 231 +- .../cli_diddoc_pricing_negative_test.go | 214 +- tests/integration/cli_diddoc_pricing_test.go | 310 +- tests/integration/cli_diddoc_test.go | 233 +- .../integration/cli_resource_negative_test.go | 257 +- .../cli_resource_pricing_negative_test.go | 318 +- .../integration/cli_resource_pricing_test.go | 377 +-- tests/integration/cli_resource_test.go | 176 +- tests/integration/helpers/deep_copy.go | 21 +- tests/integration/helpers/fee.go | 3 +- tests/integration/testdata/accounts.go | 2 +- tests/upgrade/integration/cli/config.go | 15 +- tests/upgrade/integration/cli/query.go | 8 +- tests/upgrade/integration/cli/query_did.go | 4 +- .../upgrade/integration/cli/query_resource.go | 4 +- tests/upgrade/integration/cli/tx.go | 16 +- tests/upgrade/integration/cli/tx_did.go | 48 +- tests/upgrade/integration/cli/tx_resource.go | 38 +- .../create - resource/resource_post_indy.json | 8 +- .../create - resource/resource_post_uuid.json | 8 +- .../post/query - diddoc/diddoc_indy_16.json | 20 +- .../post/query - diddoc/diddoc_indy_32.json | 20 +- .../query - diddoc/diddoc_uuid_lowcase.json | 16 +- .../query - diddoc/diddoc_uuid_mixed.json | 22 +- .../query - diddoc/diddoc_uuid_uppercase.json | 18 +- .../query - resource/resource_indy_16.json | 12 +- .../query - resource/resource_post_indy.json | 14 +- .../query - resource/resource_post_uuid.json | 14 +- .../resource_uuid_lower_1.json | 10 +- .../resource_uuid_lower_2.json | 10 +- .../resource_uuid_mixed_1.json | 10 +- .../resource_uuid_mixed_2.json | 10 +- .../resource_uuid_mixed_3.json | 10 +- .../post/update - diddoc/diddoc_indy_16.json | 30 +- .../update - diddoc/diddoc_uuid_lowcase.json | 28 +- .../diddoc_uuid_uppercase.json | 30 +- .../integration/param_change_proposal_test.go | 18 +- tests/upgrade/integration/post_test.go | 36 +- tests/upgrade/integration/pre_test.go | 24 +- .../payload/checksum/existing/v2/diddoc.json | 22 +- .../checksum/existing/v2/resource.json | 10 +- .../payload/checksum/expected/v2/diddoc.json | 22 +- .../checksum/expected/v2/resource.json | 24 +- .../indy_style/existing/v2/diddoc.json | 30 +- .../indy_style/existing/v2/diddoc_2.json | 30 +- .../indy_style/existing/v2/resource.json | 10 +- .../indy_style/existing/v2/resource_2.json | 10 +- .../indy_style/expected/v2/diddoc.json | 30 +- .../indy_style/expected/v2/diddoc_2.json | 30 +- .../indy_style/expected/v2/resource.json | 10 +- .../indy_style/expected/v2/resource_2.json | 10 +- .../payload/protobuf/expected/v2/diddoc.json | 30 +- .../protobuf/expected/v2/diddoc_2.json | 30 +- .../protobuf/expected/v2/resource.json | 22 +- .../existing/v2/resource_type_1.json | 12 +- .../existing/v2/resource_type_2.json | 12 +- .../existing/v2/resource_type_3.json | 12 +- .../expected/v2/resource_type_1.json | 12 +- .../expected/v2/resource_type_2.json | 12 +- .../expected/v2/resource_type_3.json | 12 +- .../uuid/existing/v2/diddoc_lowcase.json | 30 +- .../uuid/existing/v2/diddoc_mixed.json | 30 +- .../uuid/existing/v2/diddoc_upper.json | 30 +- .../uuid/existing/v2/resource_lowcase.json | 12 +- .../uuid/existing/v2/resource_mixed.json | 12 +- .../uuid/existing/v2/resource_upper.json | 12 +- .../uuid/expected/v2/diddoc_lowcase.json | 30 +- .../uuid/expected/v2/diddoc_mixed.json | 30 +- .../uuid/expected/v2/diddoc_upper.json | 30 +- .../uuid/expected/v2/resource_lowcase.json | 12 +- .../uuid/expected/v2/resource_mixed.json | 12 +- .../uuid/expected/v2/resource_upper.json | 12 +- .../version_id/existing/v2/diddoc_hash.json | 30 +- .../version_id/expected/v2/diddoc_hash.json | 30 +- tests/upgrade/unit/setup/loader.go | 2 +- x/did/client/cli/tx.go | 128 + x/did/client/cli/tx_create_diddoc.go | 118 +- x/did/client/cli/tx_deactivate_diddoc.go | 61 +- x/did/client/cli/tx_update_diddoc.go | 118 +- x/did/tests/setup/utils.go | 10 + x/did/types/diddoc.pb.go | 95 +- x/did/utils/proto.go | 8 - x/did/utils/proto_test.go | 19 - x/did/utils/str_test.go | 8 +- .../client/cli/query_collection_resources.go | 10 +- x/resource/client/cli/query_resource.go | 13 +- .../client/cli/query_resource_metadata.go | 13 +- x/resource/client/cli/tx.go | 33 + x/resource/client/cli/tx_create_resource.go | 88 +- x/resource/types/query.pb.go | 238 +- x/resource/types/query.pb.gw.go | 18 + x/resource/types/resource.pb.go | 584 ++-- x/resource/types/tx.pb.go | 128 +- .../types/tx_msg_create_resource_payload.go | 1 + .../tx_msg_create_resource_payload_test.go | 2 +- 123 files changed, 4886 insertions(+), 4255 deletions(-) delete mode 100644 .github/linters/.openapirc.yml delete mode 100644 api/docs/config.json create mode 100644 api/docs/config.yaml delete mode 100644 x/did/utils/proto.go delete mode 100644 x/did/utils/proto_test.go diff --git a/.github/linters/.openapirc.yml b/.github/linters/.openapirc.yml deleted file mode 100644 index 7cf6bacbf..000000000 --- a/.github/linters/.openapirc.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- - -########################## -########################## -## OpenAPI Linter rules ## -########################## -########################## - -extends: spectral:oas -rules: - oas2-schema: warn \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1c1ed1b35..6b653d2ab 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -90,6 +90,7 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LOG_LEVEL: WARN + FILTER_REGEX_EXCLUDE: ".*api/docs/config.*" VALIDATE_ALL_CODEBASE: false MULTI_STATUS: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8338f0cba..e16abf4b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -112,7 +112,7 @@ jobs: working-directory: ./.. run: go install github.com/onsi/ginkgo/v2/ginkgo@latest - - name: Run Gingko integration tests + - name: Run Ginkgo integration tests working-directory: ./tests/integration run: | ginkgo -r --tags integration --race --randomize-suites --keep-going --trace --junit-report ../../report-integration.xml diff --git a/.gitignore b/.gitignore index 8027ac56b..08a3f7ab3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ dist/ **/network-config # Ignored files -api/docs/config.yaml + # Allowed files !api/docs/swagger-ui/**/swagger-initializer.js diff --git a/.goreleaser.yml b/.goreleaser.yml index d698093a1..1f4c673bc 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -95,7 +95,7 @@ release: name: cheqd-node draft: false - prerelease: true + prerelease: "true" mode: append header: | # Release Notes for {{.ProjectName}} v{{.Version}} diff --git a/api/cheqd/did/v2/diddoc.pulsar.go b/api/cheqd/did/v2/diddoc.pulsar.go index d130062ee..93fa9f8fa 100644 --- a/api/cheqd/did/v2/diddoc.pulsar.go +++ b/api/cheqd/did/v2/diddoc.pulsar.go @@ -4653,65 +4653,67 @@ var file_cheqd_did_v2_diddoc_proto_rawDesc = []byte{ 0x63, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, - 0xb3, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0xc7, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x18, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, - 0x12, 0x33, 0x0a, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x67, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xa1, - 0x01, 0x0a, 0x12, 0x44, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x07, 0x64, 0x69, 0x64, 0x5f, 0x64, 0x6f, 0x63, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, - 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x42, 0x0f, 0xea, 0xde, - 0x1f, 0x0b, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x64, - 0x69, 0x64, 0x44, 0x6f, 0x63, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, - 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, - 0x17, 0xea, 0xde, 0x1f, 0x13, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xaf, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, - 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x3e, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, - 0x1f, 0x01, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, - 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, - 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, - 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x42, 0xa5, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, - 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x42, 0x0b, 0x44, 0x69, 0x64, 0x64, 0x6f, - 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, - 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x69, 0x64, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, - 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x44, 0x69, 0x64, 0x2e, 0x56, - 0x32, 0xca, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, - 0xe2, 0x02, 0x18, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x43, 0x68, - 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x44, 0x69, 0x64, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xea, 0xde, 0x1f, 0x0e, 0x74, 0x79, + 0x70, 0x65, 0x2c, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x16, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x7b, 0x0a, 0x07, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xea, 0xde, 0x1f, 0x0e, + 0x74, 0x79, 0x70, 0x65, 0x2c, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x64, 0x44, 0x6f, + 0x63, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, + 0x07, 0x64, 0x69, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x64, 0x44, 0x6f, 0x63, 0x42, 0x0f, 0xea, 0xde, 0x1f, 0x0b, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x12, 0x4b, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0xea, 0xde, 0x1f, 0x13, 0x64, 0x69, 0x64, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xaf, 0x02, 0x0a, 0x08, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x01, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0xa5, 0x01, 0x0a, + 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, + 0x32, 0x42, 0x0b, 0x44, 0x69, 0x64, 0x64, 0x6f, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x3b, 0x64, + 0x69, 0x64, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x2e, 0x44, 0x69, 0x64, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, + 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x43, 0x68, 0x65, 0x71, 0x64, + 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x44, 0x69, 0x64, + 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/cheqd/resource/v2/query.pulsar.go b/api/cheqd/resource/v2/query.pulsar.go index ef911c495..6b20d56fc 100644 --- a/api/cheqd/resource/v2/query.pulsar.go +++ b/api/cheqd/resource/v2/query.pulsar.go @@ -4,6 +4,8 @@ package resourcev2 import ( fmt "fmt" runtime "github.com/cosmos/cosmos-proto/runtime" + v1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/base/query/v1beta1" + _ "github.com/cosmos/gogoproto/gogoproto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" @@ -1854,12 +1856,14 @@ func (x *fastReflection_QueryResourceMetadataResponse) ProtoMethods() *protoifac var ( md_QueryCollectionResourcesRequest protoreflect.MessageDescriptor fd_QueryCollectionResourcesRequest_collection_id protoreflect.FieldDescriptor + fd_QueryCollectionResourcesRequest_pagination protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_query_proto_init() md_QueryCollectionResourcesRequest = File_cheqd_resource_v2_query_proto.Messages().ByName("QueryCollectionResourcesRequest") fd_QueryCollectionResourcesRequest_collection_id = md_QueryCollectionResourcesRequest.Fields().ByName("collection_id") + fd_QueryCollectionResourcesRequest_pagination = md_QueryCollectionResourcesRequest.Fields().ByName("pagination") } var _ protoreflect.Message = (*fastReflection_QueryCollectionResourcesRequest)(nil) @@ -1933,6 +1937,12 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Range(f func(protorefle return } } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryCollectionResourcesRequest_pagination, value) { + return + } + } } // Has reports whether a field is populated. @@ -1950,6 +1960,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Has(fd protoreflect.Fie switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": return x.CollectionId != "" + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + return x.Pagination != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -1968,6 +1980,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Clear(fd protoreflect.F switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": x.CollectionId = "" + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + x.Pagination = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -1987,6 +2001,9 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Get(descriptor protoref case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": value := x.CollectionId return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2009,6 +2026,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Set(fd protoreflect.Fie switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": x.CollectionId = value.Interface().(string) + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2029,6 +2048,11 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Set(fd protoreflect.Fie // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_QueryCollectionResourcesRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.QueryCollectionResourcesRequest is not mutable")) default: @@ -2046,6 +2070,9 @@ func (x *fastReflection_QueryCollectionResourcesRequest) NewField(fd protoreflec switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": return protoreflect.ValueOfString("") + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2119,6 +2146,10 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2148,6 +2179,20 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } if len(x.CollectionId) > 0 { i -= len(x.CollectionId) copy(dAtA[i:], x.CollectionId) @@ -2236,6 +2281,42 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif } x.CollectionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -2323,14 +2404,16 @@ func (x *_QueryCollectionResourcesResponse_1_list) IsValid() bool { } var ( - md_QueryCollectionResourcesResponse protoreflect.MessageDescriptor - fd_QueryCollectionResourcesResponse_resources protoreflect.FieldDescriptor + md_QueryCollectionResourcesResponse protoreflect.MessageDescriptor + fd_QueryCollectionResourcesResponse_resources protoreflect.FieldDescriptor + fd_QueryCollectionResourcesResponse_pagination protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_query_proto_init() md_QueryCollectionResourcesResponse = File_cheqd_resource_v2_query_proto.Messages().ByName("QueryCollectionResourcesResponse") fd_QueryCollectionResourcesResponse_resources = md_QueryCollectionResourcesResponse.Fields().ByName("resources") + fd_QueryCollectionResourcesResponse_pagination = md_QueryCollectionResourcesResponse.Fields().ByName("pagination") } var _ protoreflect.Message = (*fastReflection_QueryCollectionResourcesResponse)(nil) @@ -2404,6 +2487,12 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Range(f func(protorefl return } } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryCollectionResourcesResponse_pagination, value) { + return + } + } } // Has reports whether a field is populated. @@ -2421,6 +2510,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Has(fd protoreflect.Fi switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": return len(x.Resources) != 0 + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + return x.Pagination != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2439,6 +2530,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Clear(fd protoreflect. switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": x.Resources = nil + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + x.Pagination = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2461,6 +2554,9 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Get(descriptor protore } listValue := &_QueryCollectionResourcesResponse_1_list{list: &x.Resources} return protoreflect.ValueOfList(listValue) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2485,6 +2581,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Set(fd protoreflect.Fi lv := value.List() clv := lv.(*_QueryCollectionResourcesResponse_1_list) x.Resources = *clv.list + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2511,6 +2609,11 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Mutable(fd protoreflec } value := &_QueryCollectionResourcesResponse_1_list{list: &x.Resources} return protoreflect.ValueOfList(value) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2527,6 +2630,9 @@ func (x *fastReflection_QueryCollectionResourcesResponse) NewField(fd protorefle case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": list := []*Metadata{} return protoreflect.ValueOfList(&_QueryCollectionResourcesResponse_1_list{list: &list}) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2602,6 +2708,10 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi n += 1 + l + runtime.Sov(uint64(l)) } } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2631,6 +2741,20 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } if len(x.Resources) > 0 { for iNdEx := len(x.Resources) - 1; iNdEx >= 0; iNdEx-- { encoded, err := options.Marshal(x.Resources[iNdEx]) @@ -2730,6 +2854,42 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -2778,14 +2938,21 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// QueryResourceRequest is the request type for the Query/Resource RPC method type QueryResourceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -2823,11 +2990,15 @@ func (x *QueryResourceRequest) GetId() string { return "" } +// QueryResourceResponse is the response type for the Query/Resource RPC method type QueryResourceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Successful resolution of the resource returns the following: + // - resource is the requested resource + // - metadata is the resource metadata associated with the requested resource Resource *ResourceWithMetadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2858,14 +3029,21 @@ func (x *QueryResourceResponse) GetResource() *ResourceWithMetadata { return nil } +// QueryResourceMetadataRequest is the request type for the Query/ResourceMetadata RPC method type QueryResourceMetadataRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -2903,11 +3081,13 @@ func (x *QueryResourceMetadataRequest) GetId() string { return "" } +// QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method type QueryResourceMetadataResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // resource is the requested resource metadata Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2938,13 +3118,21 @@ func (x *QueryResourceMetadataResponse) GetResource() *Metadata { return nil } +// QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method type QueryCollectionResourcesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *QueryCollectionResourcesRequest) Reset() { @@ -2974,12 +3162,23 @@ func (x *QueryCollectionResourcesRequest) GetCollectionId() string { return "" } +func (x *QueryCollectionResourcesRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method type QueryCollectionResourcesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // resources is the requested collection of resource metadata Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *QueryCollectionResourcesResponse) Reset() { @@ -3009,6 +3208,13 @@ func (x *QueryCollectionResourcesResponse) GetResources() []*Metadata { return nil } +func (x *QueryCollectionResourcesResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + var File_cheqd_resource_v2_query_proto protoreflect.FileDescriptor var file_cheqd_resource_v2_query_proto_rawDesc = []byte{ @@ -3017,87 +3223,104 @@ var file_cheqd_resource_v2_query_proto_rawDesc = []byte{ 0x11, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x1a, 0x20, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x5c, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x65, - 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x53, 0x0a, - 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x58, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x1f, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, + 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x5c, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x53, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, - 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x32, 0x94, 0x04, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, 0x01, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x65, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x74, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x1f, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc2, 0x01, 0x0a, 0x20, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x55, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x32, 0x94, 0x04, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, 0x01, 0x0a, 0x08, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x33, 0x12, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb9, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x68, + 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb9, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x2e, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, - 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, - 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xc7, 0x01, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, - 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, - 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, - 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, - 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xc7, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, + 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, + 0x32, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, + 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, + 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, + 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, + 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3122,22 +3345,26 @@ var file_cheqd_resource_v2_query_proto_goTypes = []interface{}{ (*QueryCollectionResourcesResponse)(nil), // 5: cheqd.resource.v2.QueryCollectionResourcesResponse (*ResourceWithMetadata)(nil), // 6: cheqd.resource.v2.ResourceWithMetadata (*Metadata)(nil), // 7: cheqd.resource.v2.Metadata + (*v1beta1.PageRequest)(nil), // 8: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 9: cosmos.base.query.v1beta1.PageResponse } var file_cheqd_resource_v2_query_proto_depIdxs = []int32{ 6, // 0: cheqd.resource.v2.QueryResourceResponse.resource:type_name -> cheqd.resource.v2.ResourceWithMetadata 7, // 1: cheqd.resource.v2.QueryResourceMetadataResponse.resource:type_name -> cheqd.resource.v2.Metadata - 7, // 2: cheqd.resource.v2.QueryCollectionResourcesResponse.resources:type_name -> cheqd.resource.v2.Metadata - 0, // 3: cheqd.resource.v2.Query.Resource:input_type -> cheqd.resource.v2.QueryResourceRequest - 2, // 4: cheqd.resource.v2.Query.ResourceMetadata:input_type -> cheqd.resource.v2.QueryResourceMetadataRequest - 4, // 5: cheqd.resource.v2.Query.CollectionResources:input_type -> cheqd.resource.v2.QueryCollectionResourcesRequest - 1, // 6: cheqd.resource.v2.Query.Resource:output_type -> cheqd.resource.v2.QueryResourceResponse - 3, // 7: cheqd.resource.v2.Query.ResourceMetadata:output_type -> cheqd.resource.v2.QueryResourceMetadataResponse - 5, // 8: cheqd.resource.v2.Query.CollectionResources:output_type -> cheqd.resource.v2.QueryCollectionResourcesResponse - 6, // [6:9] is the sub-list for method output_type - 3, // [3:6] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 8, // 2: cheqd.resource.v2.QueryCollectionResourcesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 7, // 3: cheqd.resource.v2.QueryCollectionResourcesResponse.resources:type_name -> cheqd.resource.v2.Metadata + 9, // 4: cheqd.resource.v2.QueryCollectionResourcesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 5: cheqd.resource.v2.Query.Resource:input_type -> cheqd.resource.v2.QueryResourceRequest + 2, // 6: cheqd.resource.v2.Query.ResourceMetadata:input_type -> cheqd.resource.v2.QueryResourceMetadataRequest + 4, // 7: cheqd.resource.v2.Query.CollectionResources:input_type -> cheqd.resource.v2.QueryCollectionResourcesRequest + 1, // 8: cheqd.resource.v2.Query.Resource:output_type -> cheqd.resource.v2.QueryResourceResponse + 3, // 9: cheqd.resource.v2.Query.ResourceMetadata:output_type -> cheqd.resource.v2.QueryResourceMetadataResponse + 5, // 10: cheqd.resource.v2.Query.CollectionResources:output_type -> cheqd.resource.v2.QueryCollectionResourcesResponse + 8, // [8:11] is the sub-list for method output_type + 5, // [5:8] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_cheqd_resource_v2_query_proto_init() } diff --git a/api/cheqd/resource/v2/query_grpc.pb.go b/api/cheqd/resource/v2/query_grpc.pb.go index b7372b28b..21d82620f 100644 --- a/api/cheqd/resource/v2/query_grpc.pb.go +++ b/api/cheqd/resource/v2/query_grpc.pb.go @@ -22,8 +22,11 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type QueryClient interface { + // Fetch data/payload for a specific resource (without metadata) Resource(ctx context.Context, in *QueryResourceRequest, opts ...grpc.CallOption) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(ctx context.Context, in *QueryResourceMetadataRequest, opts ...grpc.CallOption) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(ctx context.Context, in *QueryCollectionResourcesRequest, opts ...grpc.CallOption) (*QueryCollectionResourcesResponse, error) } @@ -66,8 +69,11 @@ func (c *queryClient) CollectionResources(ctx context.Context, in *QueryCollecti // All implementations must embed UnimplementedQueryServer // for forward compatibility type QueryServer interface { + // Fetch data/payload for a specific resource (without metadata) Resource(context.Context, *QueryResourceRequest) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(context.Context, *QueryResourceMetadataRequest) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(context.Context, *QueryCollectionResourcesRequest) (*QueryCollectionResourcesResponse, error) mustEmbedUnimplementedQueryServer() } diff --git a/api/cheqd/resource/v2/resource.pulsar.go b/api/cheqd/resource/v2/resource.pulsar.go index 771880c6e..f49d8e339 100644 --- a/api/cheqd/resource/v2/resource.pulsar.go +++ b/api/cheqd/resource/v2/resource.pulsar.go @@ -15,27 +15,25 @@ import ( ) var ( - md_ResourceWithMetadata protoreflect.MessageDescriptor - fd_ResourceWithMetadata_resource protoreflect.FieldDescriptor - fd_ResourceWithMetadata_metadata protoreflect.FieldDescriptor + md_Resource protoreflect.MessageDescriptor + fd_Resource_data protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_ResourceWithMetadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("ResourceWithMetadata") - fd_ResourceWithMetadata_resource = md_ResourceWithMetadata.Fields().ByName("resource") - fd_ResourceWithMetadata_metadata = md_ResourceWithMetadata.Fields().ByName("metadata") + md_Resource = File_cheqd_resource_v2_resource_proto.Messages().ByName("Resource") + fd_Resource_data = md_Resource.Fields().ByName("data") } -var _ protoreflect.Message = (*fastReflection_ResourceWithMetadata)(nil) +var _ protoreflect.Message = (*fastReflection_Resource)(nil) -type fastReflection_ResourceWithMetadata ResourceWithMetadata +type fastReflection_Resource Resource -func (x *ResourceWithMetadata) ProtoReflect() protoreflect.Message { - return (*fastReflection_ResourceWithMetadata)(x) +func (x *Resource) ProtoReflect() protoreflect.Message { + return (*fastReflection_Resource)(x) } -func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { +func (x *Resource) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -47,43 +45,43 @@ func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_ResourceWithMetadata_messageType fastReflection_ResourceWithMetadata_messageType -var _ protoreflect.MessageType = fastReflection_ResourceWithMetadata_messageType{} +var _fastReflection_Resource_messageType fastReflection_Resource_messageType +var _ protoreflect.MessageType = fastReflection_Resource_messageType{} -type fastReflection_ResourceWithMetadata_messageType struct{} +type fastReflection_Resource_messageType struct{} -func (x fastReflection_ResourceWithMetadata_messageType) Zero() protoreflect.Message { - return (*fastReflection_ResourceWithMetadata)(nil) +func (x fastReflection_Resource_messageType) Zero() protoreflect.Message { + return (*fastReflection_Resource)(nil) } -func (x fastReflection_ResourceWithMetadata_messageType) New() protoreflect.Message { - return new(fastReflection_ResourceWithMetadata) +func (x fastReflection_Resource_messageType) New() protoreflect.Message { + return new(fastReflection_Resource) } -func (x fastReflection_ResourceWithMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_ResourceWithMetadata +func (x fastReflection_Resource_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Resource } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_ResourceWithMetadata) Descriptor() protoreflect.MessageDescriptor { - return md_ResourceWithMetadata +func (x *fastReflection_Resource) Descriptor() protoreflect.MessageDescriptor { + return md_Resource } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_ResourceWithMetadata) Type() protoreflect.MessageType { - return _fastReflection_ResourceWithMetadata_messageType +func (x *fastReflection_Resource) Type() protoreflect.MessageType { + return _fastReflection_Resource_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_ResourceWithMetadata) New() protoreflect.Message { - return new(fastReflection_ResourceWithMetadata) +func (x *fastReflection_Resource) New() protoreflect.Message { + return new(fastReflection_Resource) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMessage { - return (*ResourceWithMetadata)(x) +func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { + return (*Resource)(x) } // Range iterates over every populated field in an undefined order, @@ -91,16 +89,10 @@ func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMess // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Resource != nil { - value := protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) - if !f(fd_ResourceWithMetadata_resource, value) { - return - } - } - if x.Metadata != nil { - value := protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) - if !f(fd_ResourceWithMetadata_metadata, value) { +func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Data) != 0 { + value := protoreflect.ValueOfBytes(x.Data) + if !f(fd_Resource_data, value) { return } } @@ -117,17 +109,15 @@ func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDes // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - return x.Resource != nil - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - return x.Metadata != nil + case "cheqd.resource.v2.Resource.data": + return len(x.Data) != 0 default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -137,17 +127,15 @@ func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescripto // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_Resource) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - x.Resource = nil - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - x.Metadata = nil + case "cheqd.resource.v2.Resource.data": + x.Data = nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -157,19 +145,16 @@ func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescrip // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - value := x.Resource - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - value := x.Metadata - return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + value := x.Data + return protoreflect.ValueOfBytes(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", descriptor.FullName())) } } @@ -183,17 +168,15 @@ func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldD // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - x.Resource = value.Message().Interface().(*Resource) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - x.Metadata = value.Message().Interface().(*Metadata) + case "cheqd.resource.v2.Resource.data": + x.Data = value.Bytes() default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -207,52 +190,40 @@ func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescripto // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - if x.Resource == nil { - x.Resource = new(Resource) - } - return protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - if x.Metadata == nil { - x.Metadata = new(Metadata) - } - return protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + panic(fmt.Errorf("field data of message cheqd.resource.v2.Resource is not mutable")) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_ResourceWithMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - m := new(Resource) - return protoreflect.ValueOfMessage(m.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - m := new(Metadata) - return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + return protoreflect.ValueOfBytes(nil) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.ResourceWithMetadata", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Resource", d.FullName())) } panic("unreachable") } @@ -260,7 +231,7 @@ func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDes // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -271,7 +242,7 @@ func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawField // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -283,7 +254,7 @@ func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.Raw // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_ResourceWithMetadata) IsValid() bool { +func (x *fastReflection_Resource) IsValid() bool { return x != nil } @@ -293,9 +264,9 @@ func (x *fastReflection_ResourceWithMetadata) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -307,12 +278,8 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods var n int var l int _ = l - if x.Resource != nil { - l = options.Size(x.Resource) - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.Metadata != nil { - l = options.Size(x.Metadata) + l = len(x.Data) + if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } if x.unknownFields != nil { @@ -325,7 +292,7 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -344,31 +311,10 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.Metadata != nil { - encoded, err := options.Marshal(x.Metadata) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x12 - } - if x.Resource != nil { - encoded, err := options.Marshal(x.Resource) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + if len(x.Data) > 0 { + i -= len(x.Data) + copy(dAtA[i:], x.Data) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Data))) i-- dAtA[i] = 0xa } @@ -383,7 +329,7 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -415,17 +361,17 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -435,71 +381,33 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if x.Resource == nil { - x.Resource = &Resource{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Resource); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + x.Data = append(x.Data[:0], dAtA[iNdEx:postIndex]...) + if x.Data == nil { + x.Data = []byte{} } iNdEx = postIndex - case 2: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if x.Metadata == nil { - x.Metadata = &Metadata{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Metadata); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := runtime.Skip(dAtA[iNdEx:]) - if err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if (iNdEx + skippy) > l { @@ -528,26 +436,97 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } } +var _ protoreflect.List = (*_Metadata_6_list)(nil) + +type _Metadata_6_list struct { + list *[]*AlternativeUri +} + +func (x *_Metadata_6_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Metadata_6_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Metadata_6_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AlternativeUri) + (*x.list)[i] = concreteValue +} + +func (x *_Metadata_6_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AlternativeUri) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Metadata_6_list) AppendMutable() protoreflect.Value { + v := new(AlternativeUri) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Metadata_6_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Metadata_6_list) NewElement() protoreflect.Value { + v := new(AlternativeUri) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Metadata_6_list) IsValid() bool { + return x.list != nil +} + var ( - md_Resource protoreflect.MessageDescriptor - fd_Resource_data protoreflect.FieldDescriptor + md_Metadata protoreflect.MessageDescriptor + fd_Metadata_collection_id protoreflect.FieldDescriptor + fd_Metadata_id protoreflect.FieldDescriptor + fd_Metadata_name protoreflect.FieldDescriptor + fd_Metadata_version protoreflect.FieldDescriptor + fd_Metadata_resource_type protoreflect.FieldDescriptor + fd_Metadata_also_known_as protoreflect.FieldDescriptor + fd_Metadata_media_type protoreflect.FieldDescriptor + fd_Metadata_created protoreflect.FieldDescriptor + fd_Metadata_checksum protoreflect.FieldDescriptor + fd_Metadata_previous_version_id protoreflect.FieldDescriptor + fd_Metadata_next_version_id protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_Resource = File_cheqd_resource_v2_resource_proto.Messages().ByName("Resource") - fd_Resource_data = md_Resource.Fields().ByName("data") + md_Metadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("Metadata") + fd_Metadata_collection_id = md_Metadata.Fields().ByName("collection_id") + fd_Metadata_id = md_Metadata.Fields().ByName("id") + fd_Metadata_name = md_Metadata.Fields().ByName("name") + fd_Metadata_version = md_Metadata.Fields().ByName("version") + fd_Metadata_resource_type = md_Metadata.Fields().ByName("resource_type") + fd_Metadata_also_known_as = md_Metadata.Fields().ByName("also_known_as") + fd_Metadata_media_type = md_Metadata.Fields().ByName("media_type") + fd_Metadata_created = md_Metadata.Fields().ByName("created") + fd_Metadata_checksum = md_Metadata.Fields().ByName("checksum") + fd_Metadata_previous_version_id = md_Metadata.Fields().ByName("previous_version_id") + fd_Metadata_next_version_id = md_Metadata.Fields().ByName("next_version_id") } -var _ protoreflect.Message = (*fastReflection_Resource)(nil) +var _ protoreflect.Message = (*fastReflection_Metadata)(nil) -type fastReflection_Resource Resource +type fastReflection_Metadata Metadata -func (x *Resource) ProtoReflect() protoreflect.Message { - return (*fastReflection_Resource)(x) +func (x *Metadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_Metadata)(x) } -func (x *Resource) slowProtoReflect() protoreflect.Message { +func (x *Metadata) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -559,43 +538,43 @@ func (x *Resource) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_Resource_messageType fastReflection_Resource_messageType -var _ protoreflect.MessageType = fastReflection_Resource_messageType{} +var _fastReflection_Metadata_messageType fastReflection_Metadata_messageType +var _ protoreflect.MessageType = fastReflection_Metadata_messageType{} -type fastReflection_Resource_messageType struct{} +type fastReflection_Metadata_messageType struct{} -func (x fastReflection_Resource_messageType) Zero() protoreflect.Message { - return (*fastReflection_Resource)(nil) +func (x fastReflection_Metadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_Metadata)(nil) } -func (x fastReflection_Resource_messageType) New() protoreflect.Message { - return new(fastReflection_Resource) +func (x fastReflection_Metadata_messageType) New() protoreflect.Message { + return new(fastReflection_Metadata) } -func (x fastReflection_Resource_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_Resource +func (x fastReflection_Metadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Metadata } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_Resource) Descriptor() protoreflect.MessageDescriptor { - return md_Resource +func (x *fastReflection_Metadata) Descriptor() protoreflect.MessageDescriptor { + return md_Metadata } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_Resource) Type() protoreflect.MessageType { - return _fastReflection_Resource_messageType +func (x *fastReflection_Metadata) Type() protoreflect.MessageType { + return _fastReflection_Metadata_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_Resource) New() protoreflect.Message { - return new(fastReflection_Resource) +func (x *fastReflection_Metadata) New() protoreflect.Message { + return new(fastReflection_Metadata) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { - return (*Resource)(x) +func (x *fastReflection_Metadata) Interface() protoreflect.ProtoMessage { + return (*Metadata)(x) } // Range iterates over every populated field in an undefined order, @@ -603,10 +582,70 @@ func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if len(x.Data) != 0 { - value := protoreflect.ValueOfBytes(x.Data) - if !f(fd_Resource_data, value) { +func (x *fastReflection_Metadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CollectionId != "" { + value := protoreflect.ValueOfString(x.CollectionId) + if !f(fd_Metadata_collection_id, value) { + return + } + } + if x.Id != "" { + value := protoreflect.ValueOfString(x.Id) + if !f(fd_Metadata_id, value) { + return + } + } + if x.Name != "" { + value := protoreflect.ValueOfString(x.Name) + if !f(fd_Metadata_name, value) { + return + } + } + if x.Version != "" { + value := protoreflect.ValueOfString(x.Version) + if !f(fd_Metadata_version, value) { + return + } + } + if x.ResourceType != "" { + value := protoreflect.ValueOfString(x.ResourceType) + if !f(fd_Metadata_resource_type, value) { + return + } + } + if len(x.AlsoKnownAs) != 0 { + value := protoreflect.ValueOfList(&_Metadata_6_list{list: &x.AlsoKnownAs}) + if !f(fd_Metadata_also_known_as, value) { + return + } + } + if x.MediaType != "" { + value := protoreflect.ValueOfString(x.MediaType) + if !f(fd_Metadata_media_type, value) { + return + } + } + if x.Created != nil { + value := protoreflect.ValueOfMessage(x.Created.ProtoReflect()) + if !f(fd_Metadata_created, value) { + return + } + } + if x.Checksum != "" { + value := protoreflect.ValueOfString(x.Checksum) + if !f(fd_Metadata_checksum, value) { + return + } + } + if x.PreviousVersionId != "" { + value := protoreflect.ValueOfString(x.PreviousVersionId) + if !f(fd_Metadata_previous_version_id, value) { + return + } + } + if x.NextVersionId != "" { + value := protoreflect.ValueOfString(x.NextVersionId) + if !f(fd_Metadata_next_version_id, value) { return } } @@ -623,15 +662,35 @@ func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, pro // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_Metadata) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - return len(x.Data) != 0 + case "cheqd.resource.v2.Metadata.collection_id": + return x.CollectionId != "" + case "cheqd.resource.v2.Metadata.id": + return x.Id != "" + case "cheqd.resource.v2.Metadata.name": + return x.Name != "" + case "cheqd.resource.v2.Metadata.version": + return x.Version != "" + case "cheqd.resource.v2.Metadata.resource_type": + return x.ResourceType != "" + case "cheqd.resource.v2.Metadata.also_known_as": + return len(x.AlsoKnownAs) != 0 + case "cheqd.resource.v2.Metadata.media_type": + return x.MediaType != "" + case "cheqd.resource.v2.Metadata.created": + return x.Created != nil + case "cheqd.resource.v2.Metadata.checksum": + return x.Checksum != "" + case "cheqd.resource.v2.Metadata.previous_version_id": + return x.PreviousVersionId != "" + case "cheqd.resource.v2.Metadata.next_version_id": + return x.NextVersionId != "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } @@ -641,34 +700,87 @@ func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_Metadata) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - x.Data = nil - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) - } -} - -// Get retrieves the value for a field. -// -// For unpopulated scalars, it returns the default value, where + case "cheqd.resource.v2.Metadata.collection_id": + x.CollectionId = "" + case "cheqd.resource.v2.Metadata.id": + x.Id = "" + case "cheqd.resource.v2.Metadata.name": + x.Name = "" + case "cheqd.resource.v2.Metadata.version": + x.Version = "" + case "cheqd.resource.v2.Metadata.resource_type": + x.ResourceType = "" + case "cheqd.resource.v2.Metadata.also_known_as": + x.AlsoKnownAs = nil + case "cheqd.resource.v2.Metadata.media_type": + x.MediaType = "" + case "cheqd.resource.v2.Metadata.created": + x.Created = nil + case "cheqd.resource.v2.Metadata.checksum": + x.Checksum = "" + case "cheqd.resource.v2.Metadata.previous_version_id": + x.PreviousVersionId = "" + case "cheqd.resource.v2.Metadata.next_version_id": + x.NextVersionId = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) + } + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.Resource.data": - value := x.Data - return protoreflect.ValueOfBytes(value) + case "cheqd.resource.v2.Metadata.collection_id": + value := x.CollectionId + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.id": + value := x.Id + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.name": + value := x.Name + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.version": + value := x.Version + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.resource_type": + value := x.ResourceType + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.also_known_as": + if len(x.AlsoKnownAs) == 0 { + return protoreflect.ValueOfList(&_Metadata_6_list{}) + } + listValue := &_Metadata_6_list{list: &x.AlsoKnownAs} + return protoreflect.ValueOfList(listValue) + case "cheqd.resource.v2.Metadata.media_type": + value := x.MediaType + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.created": + value := x.Created + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.Metadata.checksum": + value := x.Checksum + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.previous_version_id": + value := x.PreviousVersionId + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.next_version_id": + value := x.NextVersionId + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", descriptor.FullName())) } } @@ -682,15 +794,37 @@ func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) p // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_Metadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - x.Data = value.Bytes() + case "cheqd.resource.v2.Metadata.collection_id": + x.CollectionId = value.Interface().(string) + case "cheqd.resource.v2.Metadata.id": + x.Id = value.Interface().(string) + case "cheqd.resource.v2.Metadata.name": + x.Name = value.Interface().(string) + case "cheqd.resource.v2.Metadata.version": + x.Version = value.Interface().(string) + case "cheqd.resource.v2.Metadata.resource_type": + x.ResourceType = value.Interface().(string) + case "cheqd.resource.v2.Metadata.also_known_as": + lv := value.List() + clv := lv.(*_Metadata_6_list) + x.AlsoKnownAs = *clv.list + case "cheqd.resource.v2.Metadata.media_type": + x.MediaType = value.Interface().(string) + case "cheqd.resource.v2.Metadata.created": + x.Created = value.Message().Interface().(*timestamppb.Timestamp) + case "cheqd.resource.v2.Metadata.checksum": + x.Checksum = value.Interface().(string) + case "cheqd.resource.v2.Metadata.previous_version_id": + x.PreviousVersionId = value.Interface().(string) + case "cheqd.resource.v2.Metadata.next_version_id": + x.NextVersionId = value.Interface().(string) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } @@ -704,40 +838,89 @@ func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value pro // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - panic(fmt.Errorf("field data of message cheqd.resource.v2.Resource is not mutable")) + case "cheqd.resource.v2.Metadata.also_known_as": + if x.AlsoKnownAs == nil { + x.AlsoKnownAs = []*AlternativeUri{} + } + value := &_Metadata_6_list{list: &x.AlsoKnownAs} + return protoreflect.ValueOfList(value) + case "cheqd.resource.v2.Metadata.created": + if x.Created == nil { + x.Created = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.Created.ProtoReflect()) + case "cheqd.resource.v2.Metadata.collection_id": + panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.id": + panic(fmt.Errorf("field id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.name": + panic(fmt.Errorf("field name of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.version": + panic(fmt.Errorf("field version of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.resource_type": + panic(fmt.Errorf("field resource_type of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.media_type": + panic(fmt.Errorf("field media_type of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.checksum": + panic(fmt.Errorf("field checksum of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.previous_version_id": + panic(fmt.Errorf("field previous_version_id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.next_version_id": + panic(fmt.Errorf("field next_version_id of message cheqd.resource.v2.Metadata is not mutable")) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_Resource) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - return protoreflect.ValueOfBytes(nil) + case "cheqd.resource.v2.Metadata.collection_id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.name": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.version": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.resource_type": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.also_known_as": + list := []*AlternativeUri{} + return protoreflect.ValueOfList(&_Metadata_6_list{list: &list}) + case "cheqd.resource.v2.Metadata.media_type": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.created": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.Metadata.checksum": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.previous_version_id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.next_version_id": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_Metadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Resource", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Metadata", d.FullName())) } panic("unreachable") } @@ -745,7 +928,7 @@ func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) pro // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_Metadata) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -756,7 +939,7 @@ func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_Metadata) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -768,7 +951,7 @@ func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_Resource) IsValid() bool { +func (x *fastReflection_Metadata) IsValid() bool { return x != nil } @@ -778,9 +961,9 @@ func (x *fastReflection_Resource) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -792,7 +975,49 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { var n int var l int _ = l - l = len(x.Data) + l = len(x.CollectionId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Id) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Name) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Version) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ResourceType) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.AlsoKnownAs) > 0 { + for _, e := range x.AlsoKnownAs { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.MediaType) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Created != nil { + l = options.Size(x.Created) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Checksum) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PreviousVersionId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NextVersionId) if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } @@ -806,7 +1031,7 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -825,25 +1050,111 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.Data) > 0 { - i -= len(x.Data) - copy(dAtA[i:], x.Data) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Data))) + if len(x.NextVersionId) > 0 { + i -= len(x.NextVersionId) + copy(dAtA[i:], x.NextVersionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NextVersionId))) i-- - dAtA[i] = 0xa - } - if input.Buf != nil { - input.Buf = append(input.Buf, dAtA...) - } else { - input.Buf = dAtA + dAtA[i] = 0x5a } - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, + if len(x.PreviousVersionId) > 0 { + i -= len(x.PreviousVersionId) + copy(dAtA[i:], x.PreviousVersionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousVersionId))) + i-- + dAtA[i] = 0x52 + } + if len(x.Checksum) > 0 { + i -= len(x.Checksum) + copy(dAtA[i:], x.Checksum) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Checksum))) + i-- + dAtA[i] = 0x4a + } + if x.Created != nil { + encoded, err := options.Marshal(x.Created) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + if len(x.MediaType) > 0 { + i -= len(x.MediaType) + copy(dAtA[i:], x.MediaType) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MediaType))) + i-- + dAtA[i] = 0x3a + } + if len(x.AlsoKnownAs) > 0 { + for iNdEx := len(x.AlsoKnownAs) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AlsoKnownAs[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + } + if len(x.ResourceType) > 0 { + i -= len(x.ResourceType) + copy(dAtA[i:], x.ResourceType) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ResourceType))) + i-- + dAtA[i] = 0x2a + } + if len(x.Version) > 0 { + i -= len(x.Version) + copy(dAtA[i:], x.Version) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Version))) + i-- + dAtA[i] = 0x22 + } + if len(x.Name) > 0 { + i -= len(x.Name) + copy(dAtA[i:], x.Name) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) + i-- + dAtA[i] = 0x1a + } + if len(x.Id) > 0 { + i -= len(x.Id) + copy(dAtA[i:], x.Id) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id))) + i-- + dAtA[i] = 0x12 + } + if len(x.CollectionId) > 0 { + i -= len(x.CollectionId) + copy(dAtA[i:], x.CollectionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CollectionId))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, Buf: input.Buf, }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -875,17 +1186,17 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CollectionId", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -895,820 +1206,91 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Data = append(x.Data[:0], dAtA[iNdEx:postIndex]...) - if x.Data == nil { - x.Data = []byte{} + x.CollectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } + x.Id = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := runtime.Skip(dAtA[iNdEx:]) - if err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if !options.DiscardUnknown { - x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - } - iNdEx += skippy - } - } - - if iNdEx > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil - } - return &protoiface.Methods{ - NoUnkeyedLiterals: struct{}{}, - Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, - Size: size, - Marshal: marshal, - Unmarshal: unmarshal, - Merge: nil, - CheckInitialized: nil, - } -} - -var _ protoreflect.List = (*_Metadata_6_list)(nil) - -type _Metadata_6_list struct { - list *[]*AlternativeUri -} - -func (x *_Metadata_6_list) Len() int { - if x.list == nil { - return 0 - } - return len(*x.list) -} - -func (x *_Metadata_6_list) Get(i int) protoreflect.Value { - return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) -} - -func (x *_Metadata_6_list) Set(i int, value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*AlternativeUri) - (*x.list)[i] = concreteValue -} - -func (x *_Metadata_6_list) Append(value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*AlternativeUri) - *x.list = append(*x.list, concreteValue) -} - -func (x *_Metadata_6_list) AppendMutable() protoreflect.Value { - v := new(AlternativeUri) - *x.list = append(*x.list, v) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Metadata_6_list) Truncate(n int) { - for i := n; i < len(*x.list); i++ { - (*x.list)[i] = nil - } - *x.list = (*x.list)[:n] -} - -func (x *_Metadata_6_list) NewElement() protoreflect.Value { - v := new(AlternativeUri) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Metadata_6_list) IsValid() bool { - return x.list != nil -} - -var ( - md_Metadata protoreflect.MessageDescriptor - fd_Metadata_collection_id protoreflect.FieldDescriptor - fd_Metadata_id protoreflect.FieldDescriptor - fd_Metadata_name protoreflect.FieldDescriptor - fd_Metadata_version protoreflect.FieldDescriptor - fd_Metadata_resource_type protoreflect.FieldDescriptor - fd_Metadata_also_known_as protoreflect.FieldDescriptor - fd_Metadata_media_type protoreflect.FieldDescriptor - fd_Metadata_created protoreflect.FieldDescriptor - fd_Metadata_checksum protoreflect.FieldDescriptor - fd_Metadata_previous_version_id protoreflect.FieldDescriptor - fd_Metadata_next_version_id protoreflect.FieldDescriptor -) - -func init() { - file_cheqd_resource_v2_resource_proto_init() - md_Metadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("Metadata") - fd_Metadata_collection_id = md_Metadata.Fields().ByName("collection_id") - fd_Metadata_id = md_Metadata.Fields().ByName("id") - fd_Metadata_name = md_Metadata.Fields().ByName("name") - fd_Metadata_version = md_Metadata.Fields().ByName("version") - fd_Metadata_resource_type = md_Metadata.Fields().ByName("resource_type") - fd_Metadata_also_known_as = md_Metadata.Fields().ByName("also_known_as") - fd_Metadata_media_type = md_Metadata.Fields().ByName("media_type") - fd_Metadata_created = md_Metadata.Fields().ByName("created") - fd_Metadata_checksum = md_Metadata.Fields().ByName("checksum") - fd_Metadata_previous_version_id = md_Metadata.Fields().ByName("previous_version_id") - fd_Metadata_next_version_id = md_Metadata.Fields().ByName("next_version_id") -} - -var _ protoreflect.Message = (*fastReflection_Metadata)(nil) - -type fastReflection_Metadata Metadata - -func (x *Metadata) ProtoReflect() protoreflect.Message { - return (*fastReflection_Metadata)(x) -} - -func (x *Metadata) slowProtoReflect() protoreflect.Message { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] - 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) -} - -var _fastReflection_Metadata_messageType fastReflection_Metadata_messageType -var _ protoreflect.MessageType = fastReflection_Metadata_messageType{} - -type fastReflection_Metadata_messageType struct{} - -func (x fastReflection_Metadata_messageType) Zero() protoreflect.Message { - return (*fastReflection_Metadata)(nil) -} -func (x fastReflection_Metadata_messageType) New() protoreflect.Message { - return new(fastReflection_Metadata) -} -func (x fastReflection_Metadata_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_Metadata -} - -// Descriptor returns message descriptor, which contains only the protobuf -// type information for the message. -func (x *fastReflection_Metadata) Descriptor() protoreflect.MessageDescriptor { - return md_Metadata -} - -// Type returns the message type, which encapsulates both Go and protobuf -// type information. If the Go type information is not needed, -// it is recommended that the message descriptor be used instead. -func (x *fastReflection_Metadata) Type() protoreflect.MessageType { - return _fastReflection_Metadata_messageType -} - -// New returns a newly allocated and mutable empty message. -func (x *fastReflection_Metadata) New() protoreflect.Message { - return new(fastReflection_Metadata) -} - -// Interface unwraps the message reflection interface and -// returns the underlying ProtoMessage interface. -func (x *fastReflection_Metadata) Interface() protoreflect.ProtoMessage { - return (*Metadata)(x) -} - -// Range iterates over every populated field in an undefined order, -// calling f for each field descriptor and value encountered. -// Range returns immediately if f returns false. -// While iterating, mutating operations may only be performed -// on the current field descriptor. -func (x *fastReflection_Metadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.CollectionId != "" { - value := protoreflect.ValueOfString(x.CollectionId) - if !f(fd_Metadata_collection_id, value) { - return - } - } - if x.Id != "" { - value := protoreflect.ValueOfString(x.Id) - if !f(fd_Metadata_id, value) { - return - } - } - if x.Name != "" { - value := protoreflect.ValueOfString(x.Name) - if !f(fd_Metadata_name, value) { - return - } - } - if x.Version != "" { - value := protoreflect.ValueOfString(x.Version) - if !f(fd_Metadata_version, value) { - return - } - } - if x.ResourceType != "" { - value := protoreflect.ValueOfString(x.ResourceType) - if !f(fd_Metadata_resource_type, value) { - return - } - } - if len(x.AlsoKnownAs) != 0 { - value := protoreflect.ValueOfList(&_Metadata_6_list{list: &x.AlsoKnownAs}) - if !f(fd_Metadata_also_known_as, value) { - return - } - } - if x.MediaType != "" { - value := protoreflect.ValueOfString(x.MediaType) - if !f(fd_Metadata_media_type, value) { - return - } - } - if x.Created != nil { - value := protoreflect.ValueOfMessage(x.Created.ProtoReflect()) - if !f(fd_Metadata_created, value) { - return - } - } - if x.Checksum != "" { - value := protoreflect.ValueOfString(x.Checksum) - if !f(fd_Metadata_checksum, value) { - return - } - } - if x.PreviousVersionId != "" { - value := protoreflect.ValueOfString(x.PreviousVersionId) - if !f(fd_Metadata_previous_version_id, value) { - return - } - } - if x.NextVersionId != "" { - value := protoreflect.ValueOfString(x.NextVersionId) - if !f(fd_Metadata_next_version_id, value) { - return - } - } -} - -// Has reports whether a field is populated. -// -// Some fields have the property of nullability where it is possible to -// distinguish between the default value of a field and whether the field -// was explicitly populated with the default value. Singular message fields, -// member fields of a oneof, and proto2 scalar fields are nullable. Such -// fields are populated only if explicitly set. -// -// In other cases (aside from the nullable cases above), -// a proto3 scalar field is populated if it contains a non-zero value, and -// a repeated field is populated if it is non-empty. -func (x *fastReflection_Metadata) Has(fd protoreflect.FieldDescriptor) bool { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - return x.CollectionId != "" - case "cheqd.resource.v2.Metadata.id": - return x.Id != "" - case "cheqd.resource.v2.Metadata.name": - return x.Name != "" - case "cheqd.resource.v2.Metadata.version": - return x.Version != "" - case "cheqd.resource.v2.Metadata.resource_type": - return x.ResourceType != "" - case "cheqd.resource.v2.Metadata.also_known_as": - return len(x.AlsoKnownAs) != 0 - case "cheqd.resource.v2.Metadata.media_type": - return x.MediaType != "" - case "cheqd.resource.v2.Metadata.created": - return x.Created != nil - case "cheqd.resource.v2.Metadata.checksum": - return x.Checksum != "" - case "cheqd.resource.v2.Metadata.previous_version_id": - return x.PreviousVersionId != "" - case "cheqd.resource.v2.Metadata.next_version_id": - return x.NextVersionId != "" - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Clear clears the field such that a subsequent Has call reports false. -// -// Clearing an extension field clears both the extension type and value -// associated with the given field number. -// -// Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Clear(fd protoreflect.FieldDescriptor) { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - x.CollectionId = "" - case "cheqd.resource.v2.Metadata.id": - x.Id = "" - case "cheqd.resource.v2.Metadata.name": - x.Name = "" - case "cheqd.resource.v2.Metadata.version": - x.Version = "" - case "cheqd.resource.v2.Metadata.resource_type": - x.ResourceType = "" - case "cheqd.resource.v2.Metadata.also_known_as": - x.AlsoKnownAs = nil - case "cheqd.resource.v2.Metadata.media_type": - x.MediaType = "" - case "cheqd.resource.v2.Metadata.created": - x.Created = nil - case "cheqd.resource.v2.Metadata.checksum": - x.Checksum = "" - case "cheqd.resource.v2.Metadata.previous_version_id": - x.PreviousVersionId = "" - case "cheqd.resource.v2.Metadata.next_version_id": - x.NextVersionId = "" - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Get retrieves the value for a field. -// -// For unpopulated scalars, it returns the default value, where -// the default value of a bytes scalar is guaranteed to be a copy. -// For unpopulated composite types, it returns an empty, read-only view -// of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_Metadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { - switch descriptor.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - value := x.CollectionId - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.id": - value := x.Id - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.name": - value := x.Name - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.version": - value := x.Version - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.resource_type": - value := x.ResourceType - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.also_known_as": - if len(x.AlsoKnownAs) == 0 { - return protoreflect.ValueOfList(&_Metadata_6_list{}) - } - listValue := &_Metadata_6_list{list: &x.AlsoKnownAs} - return protoreflect.ValueOfList(listValue) - case "cheqd.resource.v2.Metadata.media_type": - value := x.MediaType - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.created": - value := x.Created - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cheqd.resource.v2.Metadata.checksum": - value := x.Checksum - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.previous_version_id": - value := x.PreviousVersionId - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.next_version_id": - value := x.NextVersionId - return protoreflect.ValueOfString(value) - default: - if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", descriptor.FullName())) - } -} - -// Set stores the value for a field. -// -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType. -// When setting a composite type, it is unspecified whether the stored value -// aliases the source's memory in any way. If the composite value is an -// empty, read-only value, then it panics. -// -// Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - x.CollectionId = value.Interface().(string) - case "cheqd.resource.v2.Metadata.id": - x.Id = value.Interface().(string) - case "cheqd.resource.v2.Metadata.name": - x.Name = value.Interface().(string) - case "cheqd.resource.v2.Metadata.version": - x.Version = value.Interface().(string) - case "cheqd.resource.v2.Metadata.resource_type": - x.ResourceType = value.Interface().(string) - case "cheqd.resource.v2.Metadata.also_known_as": - lv := value.List() - clv := lv.(*_Metadata_6_list) - x.AlsoKnownAs = *clv.list - case "cheqd.resource.v2.Metadata.media_type": - x.MediaType = value.Interface().(string) - case "cheqd.resource.v2.Metadata.created": - x.Created = value.Message().Interface().(*timestamppb.Timestamp) - case "cheqd.resource.v2.Metadata.checksum": - x.Checksum = value.Interface().(string) - case "cheqd.resource.v2.Metadata.previous_version_id": - x.PreviousVersionId = value.Interface().(string) - case "cheqd.resource.v2.Metadata.next_version_id": - x.NextVersionId = value.Interface().(string) - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Mutable returns a mutable reference to a composite type. -// -// If the field is unpopulated, it may allocate a composite value. -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType -// if not already stored. -// It panics if the field does not contain a composite type. -// -// Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.also_known_as": - if x.AlsoKnownAs == nil { - x.AlsoKnownAs = []*AlternativeUri{} - } - value := &_Metadata_6_list{list: &x.AlsoKnownAs} - return protoreflect.ValueOfList(value) - case "cheqd.resource.v2.Metadata.created": - if x.Created == nil { - x.Created = new(timestamppb.Timestamp) - } - return protoreflect.ValueOfMessage(x.Created.ProtoReflect()) - case "cheqd.resource.v2.Metadata.collection_id": - panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.id": - panic(fmt.Errorf("field id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.name": - panic(fmt.Errorf("field name of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.version": - panic(fmt.Errorf("field version of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.resource_type": - panic(fmt.Errorf("field resource_type of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.media_type": - panic(fmt.Errorf("field media_type of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.checksum": - panic(fmt.Errorf("field checksum of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.previous_version_id": - panic(fmt.Errorf("field previous_version_id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.next_version_id": - panic(fmt.Errorf("field next_version_id of message cheqd.resource.v2.Metadata is not mutable")) - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// NewField returns a new value that is assignable to the field -// for the given descriptor. For scalars, this returns the default value. -// For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_Metadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.name": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.version": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.resource_type": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.also_known_as": - list := []*AlternativeUri{} - return protoreflect.ValueOfList(&_Metadata_6_list{list: &list}) - case "cheqd.resource.v2.Metadata.media_type": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.created": - m := new(timestamppb.Timestamp) - return protoreflect.ValueOfMessage(m.ProtoReflect()) - case "cheqd.resource.v2.Metadata.checksum": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.previous_version_id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.next_version_id": - return protoreflect.ValueOfString("") - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// WhichOneof reports which field within the oneof is populated, -// returning nil if none are populated. -// It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_Metadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { - switch d.FullName() { - default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Metadata", d.FullName())) - } - panic("unreachable") -} - -// GetUnknown retrieves the entire list of unknown fields. -// The caller may only mutate the contents of the RawFields -// if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_Metadata) GetUnknown() protoreflect.RawFields { - return x.unknownFields -} - -// SetUnknown stores an entire list of unknown fields. -// The raw fields must be syntactically valid according to the wire format. -// An implementation may panic if this is not the case. -// Once stored, the caller must not mutate the content of the RawFields. -// An empty RawFields may be passed to clear the fields. -// -// SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) SetUnknown(fields protoreflect.RawFields) { - x.unknownFields = fields -} - -// IsValid reports whether the message is valid. -// -// An invalid message is an empty, read-only value. -// -// An invalid message often corresponds to a nil pointer of the concrete -// message type, but the details are implementation dependent. -// Validity is not part of the protobuf data model, and may not -// be preserved in marshaling or other operations. -func (x *fastReflection_Metadata) IsValid() bool { - return x != nil -} - -// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. -// This method may return nil. -// -// The returned methods type is identical to -// "google.golang.org/protobuf/runtime/protoiface".Methods. -// Consult the protoiface package documentation for details. -func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { - size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: 0, - } - } - options := runtime.SizeInputToOptions(input) - _ = options - var n int - var l int - _ = l - l = len(x.CollectionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Id) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Name) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Version) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.ResourceType) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if len(x.AlsoKnownAs) > 0 { - for _, e := range x.AlsoKnownAs { - l = options.Size(e) - n += 1 + l + runtime.Sov(uint64(l)) - } - } - l = len(x.MediaType) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.Created != nil { - l = options.Size(x.Created) - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Checksum) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.PreviousVersionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.NextVersionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.unknownFields != nil { - n += len(x.unknownFields) - } - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: n, - } - } - - marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - options := runtime.MarshalInputToOptions(input) - _ = options - size := options.Size(x) - dAtA := make([]byte, size) - i := len(dAtA) - _ = i - var l int - _ = l - if x.unknownFields != nil { - i -= len(x.unknownFields) - copy(dAtA[i:], x.unknownFields) - } - if len(x.NextVersionId) > 0 { - i -= len(x.NextVersionId) - copy(dAtA[i:], x.NextVersionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NextVersionId))) - i-- - dAtA[i] = 0x5a - } - if len(x.PreviousVersionId) > 0 { - i -= len(x.PreviousVersionId) - copy(dAtA[i:], x.PreviousVersionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousVersionId))) - i-- - dAtA[i] = 0x52 - } - if len(x.Checksum) > 0 { - i -= len(x.Checksum) - copy(dAtA[i:], x.Checksum) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Checksum))) - i-- - dAtA[i] = 0x4a - } - if x.Created != nil { - encoded, err := options.Marshal(x.Created) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x42 - } - if len(x.MediaType) > 0 { - i -= len(x.MediaType) - copy(dAtA[i:], x.MediaType) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MediaType))) - i-- - dAtA[i] = 0x3a - } - if len(x.AlsoKnownAs) > 0 { - for iNdEx := len(x.AlsoKnownAs) - 1; iNdEx >= 0; iNdEx-- { - encoded, err := options.Marshal(x.AlsoKnownAs[iNdEx]) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x32 - } - } - if len(x.ResourceType) > 0 { - i -= len(x.ResourceType) - copy(dAtA[i:], x.ResourceType) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ResourceType))) - i-- - dAtA[i] = 0x2a - } - if len(x.Version) > 0 { - i -= len(x.Version) - copy(dAtA[i:], x.Version) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Version))) - i-- - dAtA[i] = 0x22 - } - if len(x.Name) > 0 { - i -= len(x.Name) - copy(dAtA[i:], x.Name) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) - i-- - dAtA[i] = 0x1a - } - if len(x.Id) > 0 { - i -= len(x.Id) - copy(dAtA[i:], x.Id) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id))) - i-- - dAtA[i] = 0x12 - } - if len(x.CollectionId) > 0 { - i -= len(x.CollectionId) - copy(dAtA[i:], x.CollectionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CollectionId))) - i-- - dAtA[i] = 0xa - } - if input.Buf != nil { - input.Buf = append(input.Buf, dAtA...) - } else { - input.Buf = dAtA - } - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.UnmarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Flags: input.Flags, - }, nil - } - options := runtime.UnmarshalInputToOptions(input) - _ = options - dAtA := input.Buf - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, 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 protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CollectionId", wireType) + x.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1736,11 +1318,11 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.CollectionId = string(dAtA[iNdEx:postIndex]) + x.Version = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1768,13 +1350,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Id = string(dAtA[iNdEx:postIndex]) + x.ResourceType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AlsoKnownAs", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1784,27 +1366,29 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Name = string(dAtA[iNdEx:postIndex]) + x.AlsoKnownAs = append(x.AlsoKnownAs, &AlternativeUri{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AlsoKnownAs[len(x.AlsoKnownAs)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex - case 4: + case 7: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1832,13 +1416,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Version = string(dAtA[iNdEx:postIndex]) + x.MediaType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 8: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1848,29 +1432,33 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.ResourceType = string(dAtA[iNdEx:postIndex]) + if x.Created == nil { + x.Created = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Created); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex - case 6: + case 9: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AlsoKnownAs", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1880,29 +1468,27 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.AlsoKnownAs = append(x.AlsoKnownAs, &AlternativeUri{}) - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AlsoKnownAs[len(x.AlsoKnownAs)-1]); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } + x.Checksum = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 10: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousVersionId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1930,13 +1516,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.MediaType = string(dAtA[iNdEx:postIndex]) + x.PreviousVersionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 8: + case 11: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextVersionId", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1946,63 +1532,447 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - if postIndex > l { + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NextVersionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_AlternativeUri protoreflect.MessageDescriptor + fd_AlternativeUri_uri protoreflect.FieldDescriptor + fd_AlternativeUri_description protoreflect.FieldDescriptor +) + +func init() { + file_cheqd_resource_v2_resource_proto_init() + md_AlternativeUri = File_cheqd_resource_v2_resource_proto.Messages().ByName("AlternativeUri") + fd_AlternativeUri_uri = md_AlternativeUri.Fields().ByName("uri") + fd_AlternativeUri_description = md_AlternativeUri.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_AlternativeUri)(nil) + +type fastReflection_AlternativeUri AlternativeUri + +func (x *AlternativeUri) ProtoReflect() protoreflect.Message { + return (*fastReflection_AlternativeUri)(x) +} + +func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] + 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) +} + +var _fastReflection_AlternativeUri_messageType fastReflection_AlternativeUri_messageType +var _ protoreflect.MessageType = fastReflection_AlternativeUri_messageType{} + +type fastReflection_AlternativeUri_messageType struct{} + +func (x fastReflection_AlternativeUri_messageType) Zero() protoreflect.Message { + return (*fastReflection_AlternativeUri)(nil) +} +func (x fastReflection_AlternativeUri_messageType) New() protoreflect.Message { + return new(fastReflection_AlternativeUri) +} +func (x fastReflection_AlternativeUri_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AlternativeUri +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AlternativeUri) Descriptor() protoreflect.MessageDescriptor { + return md_AlternativeUri +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AlternativeUri) Type() protoreflect.MessageType { + return _fastReflection_AlternativeUri_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AlternativeUri) New() protoreflect.Message { + return new(fastReflection_AlternativeUri) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { + return (*AlternativeUri)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Uri != "" { + value := protoreflect.ValueOfString(x.Uri) + if !f(fd_AlternativeUri_uri, value) { + return + } + } + if x.Description != "" { + value := protoreflect.ValueOfString(x.Description) + if !f(fd_AlternativeUri_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + return x.Uri != "" + case "cheqd.resource.v2.AlternativeUri.description": + return x.Description != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + x.Uri = "" + case "cheqd.resource.v2.AlternativeUri.description": + x.Description = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + value := x.Uri + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.AlternativeUri.description": + value := x.Description + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + x.Uri = value.Interface().(string) + case "cheqd.resource.v2.AlternativeUri.description": + x.Description = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + panic(fmt.Errorf("field uri of message cheqd.resource.v2.AlternativeUri is not mutable")) + case "cheqd.resource.v2.AlternativeUri.description": + panic(fmt.Errorf("field description of message cheqd.resource.v2.AlternativeUri is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_AlternativeUri) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.AlternativeUri.description": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.AlternativeUri", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_AlternativeUri) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Uri) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Description) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Description) > 0 { + i -= len(x.Description) + copy(dAtA[i:], x.Description) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Description))) + i-- + dAtA[i] = 0x12 + } + if len(x.Uri) > 0 { + i -= len(x.Uri) + copy(dAtA[i:], x.Uri) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Uri))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if x.Created == nil { - x.Created = ×tamppb.Timestamp{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Created); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - x.Checksum = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousVersionId", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2030,11 +2000,11 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.PreviousVersionId = string(dAtA[iNdEx:postIndex]) + x.Uri = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: + case 2: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextVersionId", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2062,7 +2032,7 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.NextVersionId = string(dAtA[iNdEx:postIndex]) + x.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2100,27 +2070,27 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } var ( - md_AlternativeUri protoreflect.MessageDescriptor - fd_AlternativeUri_uri protoreflect.FieldDescriptor - fd_AlternativeUri_description protoreflect.FieldDescriptor + md_ResourceWithMetadata protoreflect.MessageDescriptor + fd_ResourceWithMetadata_resource protoreflect.FieldDescriptor + fd_ResourceWithMetadata_metadata protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_AlternativeUri = File_cheqd_resource_v2_resource_proto.Messages().ByName("AlternativeUri") - fd_AlternativeUri_uri = md_AlternativeUri.Fields().ByName("uri") - fd_AlternativeUri_description = md_AlternativeUri.Fields().ByName("description") + md_ResourceWithMetadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("ResourceWithMetadata") + fd_ResourceWithMetadata_resource = md_ResourceWithMetadata.Fields().ByName("resource") + fd_ResourceWithMetadata_metadata = md_ResourceWithMetadata.Fields().ByName("metadata") } -var _ protoreflect.Message = (*fastReflection_AlternativeUri)(nil) +var _ protoreflect.Message = (*fastReflection_ResourceWithMetadata)(nil) -type fastReflection_AlternativeUri AlternativeUri +type fastReflection_ResourceWithMetadata ResourceWithMetadata -func (x *AlternativeUri) ProtoReflect() protoreflect.Message { - return (*fastReflection_AlternativeUri)(x) +func (x *ResourceWithMetadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_ResourceWithMetadata)(x) } -func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { +func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2132,43 +2102,43 @@ func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_AlternativeUri_messageType fastReflection_AlternativeUri_messageType -var _ protoreflect.MessageType = fastReflection_AlternativeUri_messageType{} +var _fastReflection_ResourceWithMetadata_messageType fastReflection_ResourceWithMetadata_messageType +var _ protoreflect.MessageType = fastReflection_ResourceWithMetadata_messageType{} -type fastReflection_AlternativeUri_messageType struct{} +type fastReflection_ResourceWithMetadata_messageType struct{} -func (x fastReflection_AlternativeUri_messageType) Zero() protoreflect.Message { - return (*fastReflection_AlternativeUri)(nil) +func (x fastReflection_ResourceWithMetadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_ResourceWithMetadata)(nil) } -func (x fastReflection_AlternativeUri_messageType) New() protoreflect.Message { - return new(fastReflection_AlternativeUri) +func (x fastReflection_ResourceWithMetadata_messageType) New() protoreflect.Message { + return new(fastReflection_ResourceWithMetadata) } -func (x fastReflection_AlternativeUri_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_AlternativeUri +func (x fastReflection_ResourceWithMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ResourceWithMetadata } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_AlternativeUri) Descriptor() protoreflect.MessageDescriptor { - return md_AlternativeUri +func (x *fastReflection_ResourceWithMetadata) Descriptor() protoreflect.MessageDescriptor { + return md_ResourceWithMetadata } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_AlternativeUri) Type() protoreflect.MessageType { - return _fastReflection_AlternativeUri_messageType +func (x *fastReflection_ResourceWithMetadata) Type() protoreflect.MessageType { + return _fastReflection_ResourceWithMetadata_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_AlternativeUri) New() protoreflect.Message { - return new(fastReflection_AlternativeUri) +func (x *fastReflection_ResourceWithMetadata) New() protoreflect.Message { + return new(fastReflection_ResourceWithMetadata) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { - return (*AlternativeUri)(x) +func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMessage { + return (*ResourceWithMetadata)(x) } // Range iterates over every populated field in an undefined order, @@ -2176,16 +2146,16 @@ func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Uri != "" { - value := protoreflect.ValueOfString(x.Uri) - if !f(fd_AlternativeUri_uri, value) { +func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Resource != nil { + value := protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) + if !f(fd_ResourceWithMetadata_resource, value) { return } } - if x.Description != "" { - value := protoreflect.ValueOfString(x.Description) - if !f(fd_AlternativeUri_description, value) { + if x.Metadata != nil { + value := protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) + if !f(fd_ResourceWithMetadata_metadata, value) { return } } @@ -2202,17 +2172,17 @@ func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescripto // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - return x.Uri != "" - case "cheqd.resource.v2.AlternativeUri.description": - return x.Description != "" + case "cheqd.resource.v2.ResourceWithMetadata.resource": + return x.Resource != nil + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + return x.Metadata != nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2222,17 +2192,17 @@ func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) boo // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - x.Uri = "" - case "cheqd.resource.v2.AlternativeUri.description": - x.Description = "" + case "cheqd.resource.v2.ResourceWithMetadata.resource": + x.Resource = nil + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + x.Metadata = nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2242,19 +2212,19 @@ func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - value := x.Uri - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.AlternativeUri.description": - value := x.Description - return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + value := x.Resource + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + value := x.Metadata + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", descriptor.FullName())) } } @@ -2268,17 +2238,17 @@ func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescrip // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - x.Uri = value.Interface().(string) - case "cheqd.resource.v2.AlternativeUri.description": - x.Description = value.Interface().(string) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + x.Resource = value.Message().Interface().(*Resource) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + x.Metadata = value.Message().Interface().(*Metadata) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2292,44 +2262,52 @@ func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, val // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - panic(fmt.Errorf("field uri of message cheqd.resource.v2.AlternativeUri is not mutable")) - case "cheqd.resource.v2.AlternativeUri.description": - panic(fmt.Errorf("field description of message cheqd.resource.v2.AlternativeUri is not mutable")) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + if x.Resource == nil { + x.Resource = new(Resource) + } + return protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + if x.Metadata == nil { + x.Metadata = new(Metadata) + } + return protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_AlternativeUri) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.AlternativeUri.description": - return protoreflect.ValueOfString("") + case "cheqd.resource.v2.ResourceWithMetadata.resource": + m := new(Resource) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + m := new(Metadata) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.AlternativeUri", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.ResourceWithMetadata", d.FullName())) } panic("unreachable") } @@ -2337,7 +2315,7 @@ func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescripto // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -2348,7 +2326,7 @@ func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -2360,7 +2338,7 @@ func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_AlternativeUri) IsValid() bool { +func (x *fastReflection_ResourceWithMetadata) IsValid() bool { return x != nil } @@ -2370,9 +2348,9 @@ func (x *fastReflection_AlternativeUri) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2384,12 +2362,12 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { var n int var l int _ = l - l = len(x.Uri) - if l > 0 { + if x.Resource != nil { + l = options.Size(x.Resource) n += 1 + l + runtime.Sov(uint64(l)) } - l = len(x.Description) - if l > 0 { + if x.Metadata != nil { + l = options.Size(x.Metadata) n += 1 + l + runtime.Sov(uint64(l)) } if x.unknownFields != nil { @@ -2402,7 +2380,7 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2421,17 +2399,31 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.Description) > 0 { - i -= len(x.Description) - copy(dAtA[i:], x.Description) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Description))) + if x.Metadata != nil { + encoded, err := options.Marshal(x.Metadata) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) i-- dAtA[i] = 0x12 } - if len(x.Uri) > 0 { - i -= len(x.Uri) - copy(dAtA[i:], x.Uri) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Uri))) + if x.Resource != nil { + encoded, err := options.Marshal(x.Resource) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) i-- dAtA[i] = 0xa } @@ -2446,7 +2438,7 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2478,17 +2470,17 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -2498,29 +2490,33 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Uri = string(dAtA[iNdEx:postIndex]) + if x.Resource == nil { + x.Resource = &Resource{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Resource); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex case 2: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -2530,23 +2526,27 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Description = string(dAtA[iNdEx:postIndex]) + if x.Metadata == nil { + x.Metadata = &Metadata{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Metadata); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex default: iNdEx = preIndex @@ -2596,50 +2596,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -type ResourceWithMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (x *ResourceWithMetadata) Reset() { - *x = ResourceWithMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResourceWithMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResourceWithMetadata) ProtoMessage() {} - -// Deprecated: Use ResourceWithMetadata.ProtoReflect.Descriptor instead. -func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{0} -} - -func (x *ResourceWithMetadata) GetResource() *Resource { - if x != nil { - return x.Resource - } - return nil -} - -func (x *ResourceWithMetadata) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - // Resource stores the contents of a DID-Linked Resource type Resource struct { state protoimpl.MessageState @@ -2653,7 +2609,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2667,7 +2623,7 @@ func (*Resource) ProtoMessage() {} // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{1} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{0} } func (x *Resource) GetData() []byte { @@ -2685,6 +2641,11 @@ type Metadata struct { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. @@ -2727,7 +2688,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2741,7 +2702,7 @@ func (*Metadata) ProtoMessage() {} // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{2} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{1} } func (x *Metadata) GetCollectionId() string { @@ -2847,7 +2808,7 @@ type AlternativeUri struct { func (x *AlternativeUri) Reset() { *x = AlternativeUri{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2861,7 +2822,7 @@ func (*AlternativeUri) ProtoMessage() {} // Deprecated: Use AlternativeUri.ProtoReflect.Descriptor instead. func (*AlternativeUri) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{3} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{2} } func (x *AlternativeUri) GetUri() string { @@ -2878,6 +2839,50 @@ func (x *AlternativeUri) GetDescription() string { return "" } +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +type ResourceWithMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *ResourceWithMetadata) Reset() { + *x = ResourceWithMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceWithMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceWithMetadata) ProtoMessage() {} + +// Deprecated: Use ResourceWithMetadata.ProtoReflect.Descriptor instead. +func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{3} +} + +func (x *ResourceWithMetadata) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceWithMetadata) GetMetadata() *Metadata { + if x != nil { + return x.Metadata + } + return nil +} + var File_cheqd_resource_v2_resource_proto protoreflect.FileDescriptor var file_cheqd_resource_v2_resource_proto_rawDesc = []byte{ @@ -2887,64 +2892,75 @@ var file_cheqd_resource_v2_resource_proto_rawDesc = []byte{ 0x63, 0x65, 0x2e, 0x76, 0x32, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, - 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbe, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x0d, - 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0b, 0x61, 0x6c, - 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0e, 0x41, 0x6c, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xca, - 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, - 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, - 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, - 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1e, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbf, 0x04, 0x0a, + 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xea, 0xde, 0x1f, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xea, 0xde, 0x1f, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xc8, 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x35, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, + 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, + 0x72, 0x69, 0x42, 0x1e, 0xc8, 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x16, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, + 0x72, 0x69, 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, + 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x44, + 0x0a, 0x0e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x12, 0xea, 0xde, + 0x1f, 0x0e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, + 0xca, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, + 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2961,17 +2977,17 @@ func file_cheqd_resource_v2_resource_proto_rawDescGZIP() []byte { var file_cheqd_resource_v2_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_cheqd_resource_v2_resource_proto_goTypes = []interface{}{ - (*ResourceWithMetadata)(nil), // 0: cheqd.resource.v2.ResourceWithMetadata - (*Resource)(nil), // 1: cheqd.resource.v2.Resource - (*Metadata)(nil), // 2: cheqd.resource.v2.Metadata - (*AlternativeUri)(nil), // 3: cheqd.resource.v2.AlternativeUri + (*Resource)(nil), // 0: cheqd.resource.v2.Resource + (*Metadata)(nil), // 1: cheqd.resource.v2.Metadata + (*AlternativeUri)(nil), // 2: cheqd.resource.v2.AlternativeUri + (*ResourceWithMetadata)(nil), // 3: cheqd.resource.v2.ResourceWithMetadata (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp } var file_cheqd_resource_v2_resource_proto_depIdxs = []int32{ - 1, // 0: cheqd.resource.v2.ResourceWithMetadata.resource:type_name -> cheqd.resource.v2.Resource - 2, // 1: cheqd.resource.v2.ResourceWithMetadata.metadata:type_name -> cheqd.resource.v2.Metadata - 3, // 2: cheqd.resource.v2.Metadata.also_known_as:type_name -> cheqd.resource.v2.AlternativeUri - 4, // 3: cheqd.resource.v2.Metadata.created:type_name -> google.protobuf.Timestamp + 2, // 0: cheqd.resource.v2.Metadata.also_known_as:type_name -> cheqd.resource.v2.AlternativeUri + 4, // 1: cheqd.resource.v2.Metadata.created:type_name -> google.protobuf.Timestamp + 0, // 2: cheqd.resource.v2.ResourceWithMetadata.resource:type_name -> cheqd.resource.v2.Resource + 1, // 3: cheqd.resource.v2.ResourceWithMetadata.metadata:type_name -> cheqd.resource.v2.Metadata 4, // [4:4] is the sub-list for method output_type 4, // [4:4] is the sub-list for method input_type 4, // [4:4] is the sub-list for extension type_name @@ -2986,7 +3002,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } if !protoimpl.UnsafeEnabled { file_cheqd_resource_v2_resource_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceWithMetadata); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -2998,7 +3014,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -3010,7 +3026,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { + switch v := v.(*AlternativeUri); i { case 0: return &v.state case 1: @@ -3022,7 +3038,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlternativeUri); i { + switch v := v.(*ResourceWithMetadata); i { case 0: return &v.state case 1: diff --git a/api/cheqd/resource/v2/tx.pulsar.go b/api/cheqd/resource/v2/tx.pulsar.go index 65736a30e..ab3a72408 100644 --- a/api/cheqd/resource/v2/tx.pulsar.go +++ b/api/cheqd/resource/v2/tx.pulsar.go @@ -5,6 +5,7 @@ import ( fmt "fmt" v2 "github.com/cheqd/cheqd-node/api/cheqd/did/v2" runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -1914,14 +1915,16 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// MsgCreateResource defines the Msg/CreateResource request type. +// It describes the parameters of a request for creating a resource. type MsgCreateResource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Payload of the resource to be created + // Payload containing the resource to be created. Payload *MsgCreateResourcePayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // Signatures of the corresponding DID Document's controller(s) + // Signatures of the corresponding DID Document's controller(s). Signatures []*v2.SignInfo `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` } @@ -1959,24 +1962,53 @@ func (x *MsgCreateResource) GetSignatures() []*v2.SignInfo { return nil } +// MsgCreateResourcePayload defines the structure of the payload for creating a resource. +// +// If a resource with the given id does not exist already, +// it will be created. The resource will be created in the resource collection. +// +// If a resource with the given id, collection_id already exists, an error code 2200 will be returned. +// +// A new version of the resource in an existing collection will be created, +// if a resource in that collection with the same name, resource_type and empty next_version_id exists. +// +// An update operation is not possible, because the resource is immutable by design. type MsgCreateResourcePayload struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // data is a byte-representation of the actual Data the user wants to store + // data is a byte-representation of the actual Data the user wants to store. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // collection_id is an identifier of the DidDocument the resource belongs to + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // id is an UUID of the resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` - // name is a human-readable name of the resource + // name is a human-readable name of the resource. + // Format: + // + // Does not change between different versions. + // Example: PassportSchema, EducationTrustRegistry Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // version is a version of the resource + // version is a version of the resource. + // Format: + // Stored as a string. OPTIONAL. + // + // Example: 1.0.0, v2.1.0 Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` - // resource_type is a type of the resource + // resource_type is a type of the resource. + // Format: + // + // This is NOT the same as the resource's media type. + // Example: AnonCredsSchema, StatusList2021 ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - // also_known_as is a list of URIs that can be used to get the resource + // also_known_as is a list of URIs that can be used to get the resource. AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` } @@ -2054,7 +2086,7 @@ type MsgCreateResourceResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Metadata which was creted after applying to the ledger + // Return the created resource metadata. Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2094,57 +2126,69 @@ var file_cheqd_resource_v2_tx_proto_rawDesc = []byte{ 0x15, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, 0x01, 0x0a, 0x11, 0x4d, 0x73, 0x67, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x45, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, - 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xfd, 0x01, - 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, - 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, 0x54, 0x0a, - 0x19, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x32, 0x6b, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x64, 0x0a, 0x0e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, - 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, - 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, - 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, - 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, + 0x01, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xea, 0xde, 0x1f, + 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0e, 0xea, 0xde, 0x1f, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xc8, 0xde, 0x1f, 0x01, + 0xea, 0xde, 0x1f, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x42, 0x1e, 0xc8, + 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, + 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x52, 0x0b, 0x61, + 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, 0x70, 0x0a, 0x19, 0x4d, 0x73, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x32, 0x6b, 0x0a, 0x03, + 0x4d, 0x73, 0x67, 0x12, 0x64, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x68, + 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, + 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, + 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, + 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, + 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/docs/config.json b/api/docs/config.json deleted file mode 100644 index 849239a9b..000000000 --- a/api/docs/config.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "cheqd Network - REST and gRPC Gateway Documentation", - "description": "Documentation describing REST and gRPC Gateway endpoints for cheqd network.", - "version": "v1.x", - "contact": { - "name": "Cheqd Foundation Limited", - "url": "https://cheqd.io" - }, - "license": { - "name": "Apache 2.0", - "url": "https://github.com/cheqd/cheqd-node/blob/main/LICENSE" - } - }, - "paths": {}, - "apis": [ - { - "url": "./api/docs/cheqd/did/v2/query.swagger.json" - }, - { - "url": "./api/docs/cheqd/resource/v2/query.swagger.json" - } - ], - "basePath": "/swagger/", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json", - "application/json+ld", - "*/*" - ], - "produces": [ - "application/json", - "application/json+ld", - "*/*" - ], - "externalDocs": { - "description": "cheqd Network Documentation", - "url": "https://docs.cheqd.io/node" - } -} \ No newline at end of file diff --git a/api/docs/config.yaml b/api/docs/config.yaml new file mode 100644 index 000000000..8f4c5ff4f --- /dev/null +++ b/api/docs/config.yaml @@ -0,0 +1,40 @@ +# Swagger config + +swagger: '2.0' +info: + title: cheqd Network - REST and gRPC Gateway Documentation + description: Documentation describing REST and gRPC Gateway endpoints for cheqd network + version: v1.x + contact: + name: Cheqd Foundation Limited + url: https://cheqd.io + license: + name: Apache 2.0 + url: https://github.com/cheqd/cheqd-node/blob/main/LICENSE +basePath: /swagger/ +schemes: + - http + - https +consumes: + - application/json + - application/json+ld + - "*/*" +produces: + - application/json + - application/json+ld + - "*/*" +externalDocs: + description: cheqd Network Documentation + url: https://docs.cheqd.io/node + + +apis: + - url: ./api/docs/cheqd/did/v2/query.swagger.json + tags: + rename: + cheqd.did.v2.Query: DID module queries + + - url: ./api/docs/cheqd/resource/v2/query.swagger.json + tags: + rename: + cheqd.resource.v2.Query: Resource module queries diff --git a/api/docs/statik/statik.go b/api/docs/statik/statik.go index 2e2984bb8..0974ccd63 100644 --- a/api/docs/statik/statik.go +++ b/api/docs/statik/statik.go @@ -6,9 +6,7 @@ import ( "github.com/rakyll/statik/fs" ) - func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8|\x91A\xab\xdaP\x10\x85\xf7\xf9\x15\x87t\xf1\xde\x03M\xf6y\xeaB\xbb)\xb8(\x88\xabR\xca5w\x12\x07\xc7\x99ps/A\x8a\xff\xbd\x98\x84V\\t9s\xbesf\xe0\x0c\xac\xde\x86\xc2T\xccy\xac\xd1$\xad#\x9b\xbe\x7f\xe0w\x06\x94\xe5\x8a\x14\xd8[\xbf;o\xc6`\x80l\xd3\xd9\xc9N\xdb\xe9M\xda\xdd\xbb\xfb%\xa0\xa5c\x9b\x8d,\xaa$e\xc7w\xee\xfe\xf7\x0b\x92\xa2,\xd9\x92H\xd9J\x9a\xa2\"\x06\x13\xd7\xa2\x0e\xc9\x87\x87\x87\x87\xe79\x92\xf9\x1a\xcf\xe7\xc0&\xe8\xd5\xb0\xdb\x7fuB\xc2\x19\x9d\x9c $\x88\x08`\x82\xbc\x05|\xf5\xd1\x07\x10k\xca\x1eP\x07\xdd\xbe\xbd\xfb\x84p\xe8\xa3\xf9\xed\xc77\xe8oX\xc0\x1ao\xd05\xf5\xe2%\x84\x02\x0bB\xc3\x13\x84|\xe0\x1e#\x91\xfc\xd7$\x7f1\xb94%\xe1\xbcD\x16\x84~DI(8\x9aQ\x96\xb4\x1f\xea\xf6\xbb'\x08\xad\x80q%v5\xe8>\x9e \xe4\xd1P`O\xc8.#\x14\xe2%L\xd0\x1bu\xcf\xaf4\x0e}\xdd\xe6;\xb2$\x02|U%f\xc1\x04-\x84\x88\xf8\xa4\xd7S\xd2\xbb\x84\x9e \x14\x10\x0fB\x0eY9W\x11\xf6\x16\x80\x86\xdd\xfe\xfe\x9ds\"\x16\xf1\xb4\xeb\xd1\xa5\x16\xa2\xff\xdf \xa9\x0f\xbdi@\xa7\xbd%&a\xef\xdd\xcd\x9b\xb7\x1f\xee\xde\x9eL1\x87\x8fX,&\xa8\x97\xc0\xdd;\xe1\xde\x02\x96\xc0e\x83\x1d%6\xfd\xc0O<\x1a\xf28\xbd\x88\xa3( \x9e\x1aJ\xef\x0bW\x00\xef\x7f\xf9_\x81\xaf\xbe\x7f\xf5\x97\xde_^\x9dD\x8c\xfa\xb1w\x84\x00x\x14\xc0B\x1c\\SO \xc9\xcdh^)v'?\x87\x93O=\xde50\xf7$<'\x11\x16\x0b%3A\xce'~o5\xec\xfdI\xfc\xffh\xf4\xe7\x90L'B<^.1\xdbL\xd0\xaf \xbc\x05\n\xb0\x00.\x8c\x0e :C\x18]\xdf\\\xa7]P*\x83\xd1\x9c\xac \x94\x17\x12)4\x02\xa6zw\xe3O\xd05\xf1\xaf\xa9\x97\\a\xc0#\x1ar\x0d\x94.\xaf\x86\xfd\xfe\xab\xed?w\x86~\x85x\xecy\xc0\xf9,\x0e\xd2\xbb\xbb\x99\xdajZq\xf6~\x84\xc4&\x82 \xa2\xd3/\xe0\x89\xdc\x85\x88\xc9\xae \x92m_\x97\x15\x0eb\xd8\xfd2]\x95\xbft\xf6\xae t\x97\xeb\x18\x0db\x91`$\x16\x90G\x89\x81\x88Y\xc8\xe5\x85\x0293\x1a\x04tM\xc2\xf9\xe4\xa4\xe0j\x07\xf9\xc4\xbf\xf7\xa9\x87\x88\x12P0'\xbb\xed\x15\x8bY\x82\xc0>\x16X\xcaID\xe5:\x99^\xc7\x9cS\x8f`\x01>Z\x13\xb1(\xe9\xb5C7vo)\x9d\x16T95\xb2$\x18\x14]\xdaQ\x18_\xa9\x9b\x1eR\xc10\xbb\x85\x12*{\x86\xac\xbd\x93E\xdaEx\x14e\x97M\x1b\x981\xbc)\xadC\x04,K[@\xa9\x10.\x18 \xe7\xe5-U(\xad)Iw%D\x18\x05\x84\x0b9\x83\x9foo8\x8a9\xf8HPD|\x08\x05\x99m\x14\x84I\xf5\n\x81\x19\x05\xf0S\xac+\xea_\xc3\x0c\xc7\x81\xd8Z\xae\xf5z\xdd]\x8f\xba\x94\xcd{!\xd7FjPr?\xf1m0\xbb!\xf4\x7fU\x08\x11?\xab?\x85\xc3+\xbf\xf9W\xca\x96X(m\x9c(\xab;\xf9Y\xeeq<\xc2\x1e\xfc2\xf99\x0e\xc9\xd7\x18: \xc4\x04\xd8/\x15Z\xc5h\x10\x00\xb3\x8d\xf89\x14+\xb7\xd0\xac\xea\xa5\xfb\x9d\xd7\xb0\xeb\x9bk\x89)\x16\x083@X\x1a>\xa5mvQ\xce\xf0\xaf\x80\x91Y\xb2\xd1\xde/A,\xa8U[\x1a\xc1\xae\xc2z\xe8b\xb7!\xbaTi\xb7.N\x93\x95Tu\xb0\x05\xbal\xf5]k'\xdaj\xa7\xd1\xfe,\xb4Vy\x1a\xfaJ\x1b\xa0K\xb2V\xac\xf5\x9c\xd7\xd2O??\xc0\xa6C\xfc\xb2E\xa5K\x81\x9e\xdc+`m\x88\xd6\x06\xbf\xd2\xcc$57\x11\x18\xf8\xd5\xe7\x02\xc4SDm\xc2\xde>\xe2e$\x1b~\xeb\x0fOO\x07\x97\xff\xc8\x08\xf9\x1d6\xc3\xfe\xb0_)\xc3\xc5\xe8\xe8R\x1f\x0b\x07E\xcc\xdb\x8e\x1d\x03\x9c\xb9\xa8\xbf\xb1\x8a+\x84\xd0zW\xe3JYC\x17\xb1\x00Fp`k\xfcI\xc0/\xec\x89\x99\x87(\x9e\x06\xc4C\x0f\xb0yZ\xf0\xdf\xd0\xe5\x92\x86\xc1F\xfb\"y\x19\xa6Kr\xf4\x16C*\x8b\xee\xf2\xdf\xd7\x0f\xaf\x93\x8f\xbf\xc3\xe6\xaf\x98\xc3\xe9E\xe6\x8b\xf7q \x88<3V\x19y'\x08\xb3K\xed\xbd\x1a.\xf2aFB\x90\x9b`\x01\x18\xaf\x11\xe6\x95\x02\xf5\xdd>\"a\xba\x12\xdeP\x06\x88G\xe0\xa5\xc2,\x90\xe6\x0e\x8c\xd5\x90\x158c\x9fn\xa53\xd6\xf1(\x83\xdeO\xd9!t\xf4\x10\xca\xfb\xef\xee.\xac\xf6a\xcb\xb9\x0d\x05\xc8U\xc1\xa6\x1c\x0c\x0f\x87h\n\xc6\x9d\xadBHI\xdf \x8c|2'\x02\x07\x88\x93y\x88E\xcc\x00Q\x86<\xb6\x89\x04\x9d3\x1c-\x88'7q:+3\xc18\x16\x0b\xb9\xe0=\x0b\xd2\x0dz\x1d\x8dyl\xf9\xbe\xdb\xe1W W\xc8s\x87?\xd32 \xbc\xb5\xf8f\xa5\x19\x03V{]\x92\xfd\xaa\x8b\xf5\xee-\xba\xd3\x8d0\x06(\xc2\x0c/A\x00\xcb\xf4\xb9\x93$z\x13\xbfL\xf7vbIr\x01\x95F1s\xabKP4\x03\xe1-\xf2\xabK\xda\xf1\x0e\x17\x9b\x00\xf4\x19;\xb36oB\x7f\xb3\xbd\xa4\x0e\xde<\x8e\"\xca\xf6\x9d\xbf\xfa\xc9|\xb9\xdb\x93\xcdbg\xee:\x19qKL\xc2\x10\xc4\xc4\xbb\x18\xce\x86\xd3\xfe\xb03\xf5\xf1\xb43\xf6\xfd\xf3\xce\xf4b4\xea\x8c`0\x1e\x9d\x8fO\xfd\xb3\xc1\xb0T\x88\x00.\xa4\x90\xf5\xdf~{\xfb?\xec\xdf\xab\xbf?\xde^\xac\xd6\xa7\x1fG\x9f\xff\xf9\xdb\xe0K\xe66\x12NP\x84\xc5\"\xf3\x15\x83\xaf1a\xe0O\x90`qv\x0b)\x98{\x81\xe7\xb9)U\x86\xa70\xbb\xbc\x97l\xc3\xbd?\x93\x0f\xd6|scx\x9b\xc88\xff\x87\x16qbF\xd8&\x9e\xef\x96\x9a\x89\xe7RI\x80\x0b\x9d\x91sx\xeey\xe1\xa6\xe8\x98t\xee\xd6\x85\xdd\xbb*\xadk\x9bw\xdeX$\xd4\xe6\xd3\xa26\xef\xdc\x811i\xf3\xce\xf7\x8a\xfd\\`J\x9bw\xbe_\xec6D\x97\x97\xcbW\xb7y\xe7\x07\x81\xef@\xcc\x8a6\xef<-m\xdey\x9bw\xde\xe6\x9d'\xe5\xf0\xd0\xd8\xb68\x05\x11u\xb1\x85\x12\xdb\xbc\xf36\xef\xfc\x90\xa4\xc46\xef|\xa7\xb4y\xe7\xa6<7\xf2m\xde\xf9N\xf9v\x13\xd0\xe6\x9d?3\xf4m\xde\xb9\x1d\xec\x1f\xe0\x1c\xdf\xe6\x9d\x1fs&\xaf\x9f\x1d\xdd\xe6\x9d\xb7y\xe7\xdf\xf2\xd4\xd6\xe6\x9d\x17\x16\xeb\x8apZ\x0b\xee\xd8\xb5y\xe7{\xa5\xcd;/*Nz\xd7lFt\x9bw^\\\x9aE\xb9\xcd;o\xf3\xce\xb3\xc5I\x05]@\xa9\x91\xb7\xeb\x88\x87\x93F=}~n\x9bw\xfe<(\xb7y\xe7\xe8Y\x11\xb7\xa1\xd3\xe6\x9d\xb7y\xe7\x9b\\\x02\xa5S\xfay\x91\x94^NL\x9b\x85\xdef\xa1[\xacw\x9b\x85\xdef\xa1\xbbf\xa1o\xa7q\x95\xcb\xf3F\x96\xb9\xfc\xac\xe7\xb1\xd2K\xb5\xcd\xe7\xed6\xab\xda\x98\xec\xea\x8c\xe4\x92\x99\xfc9\x8e\x89_\x0e\x0e\xb6s \xa2~\x18\xc2\x12\xedyVT\x1b\x8e\xf2|[`\x1d\xa2;.\xb1\x1d;j\x8d\xc6u\xeaGu\x1cb:\xf6\xa3\xb1\x83\x9a\xd9\x81\xa8q\x16v\xc2\xc0Ao\xaa\xcf\xbb\xc7\x9fv\x1dc8\x8d\xc0\xd7l\xf4\xc6\xdd\x9b\xc8\x96\xe7\xc2\xb5F\xd4\xa6\x11l\x1b\x8d\xd7\x1c\x19\xady\x1e\x8c\xab1i6JS#\xfe\xe0\x14\xa1i<>S\x05F\xeaZ&\xfaP\xe6v\x8a\xdc\x13\x8c\xc5\xf6\xab\xe4 \xc2\x08\xcfIX2\xde\x9cc\xb9\xad\x98N\x8cl6\xf3u\x12\xf1)r:u\xa9t\xf2\xaa]\xb9\xb6\x12\xb99\xea\xe7MZ\xc1<\xc4`\x82\x03/\x96\xf41 \xbc\x10\x8f9\x07\xf1\x11\x8e\xaf\xed\xb4\xba\xd3\x92\xd9@\xb2/PHu\xc0\x98\xbbRQf\xb2\xd1\x14\x02\x1a\xce\xe5~\xd3E\xd7\xc9!\xd4\x0b\xe4\xf6\xdc\xe1\xc4\xafz\x90\xe8\xd3\x82p4#\x10\xd8\x9fJ\x92Np\xa0\x9e\x94\xa9zl@H\x81\x95\x8f\xd2<1\xbeE\xa0\x9a\xfe\x1c\x87\x0e.\xc0F\xe7\xf5H\xdb\x97\xc4\x04Ke\xedDQ\xd3.\xd9#\xa8 \xff]TE\xd9\xee\xa7DS6\xa0\xc7\xbe\x88\x978\xec0\xc0\xbe\xda \xd5\x05\xf3R\xcd=|\xcb\xb5\xdf \xf7k\n\x1c\x85T o\x81\xc3\xb9\xd4o\xb1\x06\x08\x91Of3`\xd2\xeb4!\xcb\n!ih\xf9#\xe6\\\x1e\xdb\xee\x94\xe5z\x8d\xde\xfa\xb1\x0e\xdd~b1\x17\xb70'\\\xb0\xe2\xc7P\x92f\x9e\x14\xe242_\x802\x87%\x0eE\xe6E\x7f\xc5yd\xdbr\xa8\xa6\xdf \xe9\x85\xc8c/N\xc6\xd3E\x7f|\xfct\xf3\xc7\x87\xabw.\x18\x0f\xba\xfdn\xff5Z\x0d\xbb\x83n1\x17b\x0c~\xe5\x03\x83\x8d\x00\x9akI\xc3\x9aZJ\xf5\x95&-\xcd\"\xe6h]\xf5\x1cmV\xbf\x11\xe1u\x81U&\x84p\xf4\xe1\x8fOJ\x94z\x1a\x08\xa7\xb1<%\xf6\x15GK\xf0 V\xbdsA\xfb*\xa4\xe1\x1b\x06>7*}'\xb0\x88\xf9;\xc2\xc5\xb0?,~-\x9b\xd3\x83YU[\xaf.\x96\x87\xb2,\xdb\xb0.\xb6\xcdX\x97\x98\x91\xaa\xcbN\xca\x92T\xb4\xaa\x8c.1#f\xef\xf8|{S\xc3R\xeb\xb2\x0d\xe3X*\xda\xfa\xb1\x1f\xb2y\xff\xe5_\x8f\x1f\xfe\xf7_\xbf\x9b\xbf\xa9/\xca{\xe3\xb3~\x1f\xf0\xe8\xb4sq98\xeb\x8c\xb17\xeeL\xc7\x83a\xe7\xf4tz1\x1b_\xfa\xfe\xe5\x18\x8e\xed\x90a\xaa\xd4k4W\xc0\xba]\xd5\xbdn\x08\xa27\xe8\xf6{\xdb\x0dQ\xbd\x19\xf0\x99;_\xfc\x94i\xf2\xf9\x0b\xa7\xa1U\x82\xe3\xf0\xe7X\xc0\x1ao\xba$\x9a\xf1.\xa1=\xf9\xb77\xc5\xb3\xcd\x14\xc8\x02\xc4\x97a8\x1f\xf9\xe7\xe3\x87sq~:\xc6b5\xe4\xa7\xfe\xc3\xf9Y\xe4}\x15\xab\xc7\x80\x9f\xf9\xa1\x80\xd9\xe8\x11\x9f1\xfc8<}\xb4\x8f\xccr]\xb6?\xe9\x1d\xd5\x83r\xe1\xd9S\xc1\xf3.\xc3L\xcb\x85\x9bb\xf6\xba\xf5\x99\x03Y>\xdf\xde\xd45\xdb\xba\xb8\xafh\xb9f;1#\xf6\x8aR\x99\xdcj\xca\xe9U5\xcb\xaa\xd8\xf3\xf1M\xb9\n\x040y\xbc_\xc1gF\x92\x97;\xa6_\xe9\x17\x8b\xee\x06\x05+\xc4 \x8a\xb0:$\xba\x1b\xc8\xbfnL\xec\xea5\xc2\x02\x05\x80\xb9H\x8f\x15\xd2\xda\xca\x93\xfa\n\x07\x90\xc6h*\x84e\xf6c\x14\xd1(\x0et\xf2Pq\xe5\x1cJ\xefR\xda{g\xf4\xc6\x95\xbd\xbbz\xff63\xa2\"\x81j\xaf~z7f\xdb\x8c\x1c\xe6\xcd\xd5\x87\xab\x8c\x97Pz\xb2)\x15\x17\x80?\x07f\xd3\xfb\xd4\xc5\xc0Q\x14$\x19\x0e=iC_#\xb2\xc4s\xe8E%#z\xe1i\x93R\xe7\xd6\x0b\xe2-\xf2\xfe\xdc\x1asS\xbb\xfc\xad\x06\xc6r\xb8!xh\xae\x9f\xfc\xefS\xbf?Q\xff\x15\xe7\xfay\x0b\xf0\x1ex\xbc<\x02d\x07\xf0\x92F\xb4\xe9\xbd\xfb\xed\xaa3<=\xdb~\xbb\xc0|\xb1\xef\x19\x95 \xab\x07\x9dA\xa4\xdc\xe0\x0d\xc6\xb8?\xbc\xf0\x86x\x84\x87S\xefr|~6\xe8\x0f\xa7\xd3\xe1\xc5\xc5p4\xf6\xc6\x83S<\x9c\xf6\x07\xb3\x8b\xe1\x05\xe0\xb3!\xf6N\xa7#\x18\x0f\x8bi\xff\x17\x94\x9c\xb5\x8dT\x14$]\x95\n,\x8el\xb8Am\x8e%S\xcc\xc1G4\xcc {\xc5\xf5\xf1\x1e\x87~\xfe\xe4T\xde\x15\x8a|\x10\xc0\x96$\x844 \x94\x88W|{\xe6q\xd8%\\\x02\x1e\xdf>Sq;Y\x8aV\xcc\xc7uJ\x85\xfdX\x13\x95\x80\x9bf\x9cpAY\x92\xe5\x95\x06\xbd\xcdo\x16t\xf4\xebw\xca\x83\x86\x89\xb0\xf4\xd4\xb0M\x851ij\x99\xa0\xa9f\xdf4\x12\xcb\xfc\x03\x109i\xc5i8\x05\x81tk\x02N\xc1\xb4\xeb\x04\x9c\x02a\xe8\xf6\xe3\x9b6\xfd\xa6M\xbfyY\xe97E\xfc\x12\xb2r\xb6;4\x06.\xcc\x7f\xcf\xfc\xdaC6\xe2\x95\x13\x95a/\xf2&gkf\n\x12hr5K\x0ej\x1d\xe4\x940\xb3s\xcfS\xe7\xc7\x1cA3n#'\x7f\x12\xdf\xfa31xk\n\xeb0\x8cj;)&\x1awl\xf4\x8bg\x17\x0b\xecA\xc5\xb6_\xf9\x831)\x94\x99\x1f\x8b\xb1\xfe4\x0c\xcb\x1cT\xf3[V\xba\x12\n\xef[\xee\xbc\x00i\x9f2\xae\xfbC0\x85+\x0f\xd9l]\xb5\xa5+G\x19\xd9\x04#\xabpY\xca\xdf\x1c\x85\xdc\x0c\xa1C\xba6\xda*\x85\xac\xb3\xf5.\xf0\x1a\x19?%\xebs\x15\x8fU\x0bH}\xb0\x8c\xbf\xa3~\x9a%\x14\xdc\xdd\xdf\xb1\xbd5\xab\x01`\x9d\xe8nG\x84\xed\x8et\xa3\xa4w#\xb4\xf7\x81\xc4w\x85<\xf5\xb27\x1b\xf5\xdd\xdcO\xe3T\xa2\xdd$\x05\xde, ~\x08\x0d\xeep\xdc@\x16*\xbcAlk\x12\xe2\x15\x92\xea\xceC#\xa4x3\xb4\xb8\x95\x18o\x10\xf0F\xe9\xf1\xc3 \xf2\x83)\xf2Z$\xb9#M\xde \xbc\xcd\x92\xe5G\xd3\xe5\xcd\x12\xe6GR\xe6\x8e\xa4\xb9\x0bmn%\xce\x1d\xb6u]\xec\x9b\xbb.V\xfa\xdcQ\x89\x92\xaa\x0e\xaa\xa4\xcb\x91$z\x0d\xd2\xcdN\x90~\x03*\xdd\xa5S/\x9aNo\x82P\xaf\x03\xc2s\x93\xea.}{Rb\xbd\x06\xb5\xfeDK\xb4\x1e\xc1n\x15\x97,\xf5\xfa\xa6^\x97:\xeb\xdd\x95f\xafC\xb4;Q\xedu\xc8\xf6\xc6\xe9\xf6\x83\x08\xf7\x86)\xf7\x9a\xa4\xfb\x13\xd0\xee.\xc4\xbb\xe3\x82qY*\x0d\xd3\xef\xae\x04\xfc\x11\x14\xbc\x95\x84wD\xc7\x95\x88w\xc3\xb1a2\xbe.\xa7\\\x83\x90?\x84\x92\xb7\x93\xf2\x8e\xa0;A\xd9$5_\x1fH+=\xdf0A_\x8b\xa2o\x10\xe6\x83\x88\xfa\ny\xa5\x11\x18W\xe0\x1b\xe6\x80\x9bb\x81]\x033n\x94}\x83\x13\xd8(q\x7f8u\xff}O\\c\x14~%\xe1n\xeepb\xd9\x13^\xbd$\xc4\xdaR\xeb\xba\xb4\xd4zK\xad\x9b\xf2\xa3Q\xeb\x07\xbcR\x84\xec\xd2\x1a\xbb\x84o\xb7\x04\xb8\x1d\xcbyd\xcf\x1bK\npx\x149\xa3o\xbb\x89\x02*\xb2z\xf8S\xc9\xc8!w\xe0{y-mE\x0e\xc1\xe1\x94\xb9\x03\xf1j5B6\x17\xa81\xb2\xf5h\xa2\xf5 \x92\xb5\xfc\xe9b\x1b\xc1\xfad\x886G\xa86G\xa6\xd6%R\xad._9\x81z4~5ISK0\xc5\x05\xe7\x06\xc8\xd2\xe3\x89\xd2J\x92\xf4hP\x1b$F\x0f\xd3\xe5\x83\x08Qg2\xd4\x81\x08=\x1a\xc2\x83\xc8O\x07\x1ck\x13\x9f\xcd\x91\x9eG\x10\x9e\x0edg\x95\xcb\x8fl$\xa7\xc5\xf5G\xd6\xcdS\x17\x0b\xb1iU\x8a\xa4\x9aC\x1c\xe1H2\xd3\x91\xd8\xa8\xee\xc13\xf3\x7f\xd5\x9dy\xc1\xc4\xe5\xb1\xa4\xa5\xdb\xc0\x9f\x97\xac\xac\xee\xd3\x13\x92\x94\x8e\x04e\xa3K\xad\x1e)i \xd9\x1d\xfc\xcc\xaf\xeb\x9au#\"]IH+\x01\xe9J>\x1eB]Z\x82\xaf%\xf8Li >U\xbe[\x82\xef\xff\x03\x00\x00\xff\xffPK\x07\x08\xdd\xb1\xdfo\x88\x14\x00\x00\xe6\xd2\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x04\x1b\xae\x9a(\x01\x00\x00\xfc\x01\x00\x00\x16\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81\x00\x00\x00\x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x17\xa0K@,\x01\x00\x00\x10\x02\x00\x00\x1a\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81u\x01\x00\x00swagger-initializer.js.bakUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xdd\xb1\xdfo\x88\x14\x00\x00\xe6\xd2\x00\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81\xf2\x02\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xe1\x00\x00\x00\xbd\x17\x00\x00\x00\x00" - fs.Register(data) - } - \ No newline at end of file + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8|\x91A\xab\xdaP\x10\x85\xf7\xf9\x15\x87t\xf1\xde\x03M\xf6y\xeaB\xbb)\xb8(\x88\xabR\xca5w\x12\x07\xc7\x99ps/A\x8a\xff\xbd\x98\x84V\\t9s\xbesf\xe0\x0c\xac\xde\x86\xc2T\xccy\xac\xd1$\xad#\x9b\xbe\x7f\xe0w\x06\x94\xe5\x8a\xe5\xe3\xa1\x01\xa6\xa9\xbc\x14Fj\x0d(E\xe5\xfa\xf3\x80`\x1a\x81\xd0\xd7\x06\x9b\xd58\x03\x14\x19\x86(\xa3\xa4&\x0c\xf8kp\x00\xf0\xe1\x1cF%\xc5sxC\xf8\\L\xc3\x8e\x98h\xd7Jx\xc3\x9e\xc3\xf5\x82\xf3\xd7\x0b\xde]\x14\xac\xcaZ\x8b\xb7\xc7\xe1\xbd\xaa]\xc0\xbb\xeb\x05\x1f\xae\x17\x1c]/\x18k\xfc_\\0]\xdc\xb5\xa4\x088)\x0b\x1d\xce\xbc\x8f,Z\x1f\xb9J\x95q*\xc6\x83\xe5\x00\xb8\xa5\xf2!\x19\xf7V\x1a\xa7\x8fb\x98\x97\xe1\xd7TO\xdajXVb\xb8\xe1`G\x1b\x1c,Q=i\xdb$\x86*\x0e^\xd4\x80\xda<\xf5\xa4\xdfK\xe8\xfc(%uiC\x8a(-\xd2\x9eD\x95\x02\xedKe&\xe8 L\xa4\"\x13F \x8c\xa5<\x13\x86 \xbcJ\x01\x13\xba \\\x98\xac\xcaZ\x87\x93\xdc\x8a*\x0b\n\xa5X\xd4\x05;\x17\xd0a\xd4\xa2hiR\x0c\xd2\xe2&-B\xde\x0d\x8a>\x91\x8ai\xcd\xf9\x8b\nD\x17\x158\\\xaf\xc0\xeez\x05\xb0\xcdWT)(PLQ\xc1\n\x14\x14\x13E\xac@R\x0c\xd2\xe2&-B\xde\x0d\x8aX\x81\xa4\xe6_[\x01\xea7;R\x11\xfc\x18\xfe\xa2O\x8b\x12^\xb1\x06\x08\xfe\x96E\xca\xd8;U\x01\xa9&4\xe4\x13\x1e\xf2\xdaY\xba%\x0d)K\xee\xaa\xc4#\x12mV\xc8\x9a\xb5\xc0]\x95X(.\xd9\xa4J\x89NZ\\\xbd%\x16x\xde\x0dj^3\xcd\x01\xbd\xf3Pt\x99\x18\xd1;\x07E\x9b\x97\xbbBq\xc1D\xd1\x95w\xc6\x8aa3\x9bu\xc6\x9da\xb0\xe39\xcb+\x0e\x83\xd3\xe1\xe6\xeaaD\xef\x06\xa0\xa3o\xb3\xe9t\xd7\x03\xe1\xd1&R\x9e\xdeuA\xe8\xa0\xf6\xf6\x8aHj\xf3\x8e\xd9\x06\x0dj\xd1;\x15\xce+6\x98\xab2\x8d\n\x14)\x0e7\xa7C\xef\xeaa@\xefZ\xa0\xe3\x1e\xcbx\x00\xa1\x8d\xa6t@\xe8\xa2\xf6G(\xfd9\xae\xbbE\xef^\xe1\xfc\x08\xcf\xbf2\x8d#\xd0(\x0e7\xa7C\xef\xeaa@\xef\x96\x04\x94\xac\x08\x96o\xa3\xe8\x10\xb4\xc0E\xd1#X\xc6\x9a\x89\xaa\xb6\xa7k\"\x15\x95V\x8d\xd1\xb6v\xcb\x1cQR\xc8&\x85\xeaU\xa1B\xe7b\xcc*\xad\x881\xbc\x16\xd2IZX\xa9 \xc1\xbc\"\xa8\xda\x9a\xce\xc5\xe0VZY\xe6q\xb5:\xf3\xb8I\xc1R\x13BV\xb9\x14T\xadB\x845U\xa5\x15\xc1\xf9\x10\xd5\x9c\x04KM\x08Y\xe5RP\xef\xf7\xca\x9c\xefv\x980eq\xc7\xc0$\x94\xad\xb4\x0fb\xd2\xb3X\x12~\x8b\xb0:B2\xc0\xbd\x93\x15\xce\xdfw\xf1\x1a9!\x1e\xe5i\xde\xc2\x9b\xa0\xa7\xc9\xd7z]\xb60\x83\xd5\xd8=;\x93\x98\xfcXX\xed\xa2H4\xd4\x82c\x07~7\xef\xe2V\xe28J\x9c}\x0b\xcf\xbei\\b\xc1S\xbch9\x8b^7\xd7{\x177\x13\xc7A\xe2\xec[x\xed}\xe3\xb0\xe5\xfe\x01\x8d\xa3\xbe\xd6\x02\"\x1f\x81\x07\x1as\x8b\"\x18>hoY\x0c\xc0x\x18\xf2\xc9\x98\xa8G||r <>>9\x90+gi \x1c\x88\x8c\x9eE\x03#`\xa7\x0b\xf6#\x14Y\x1a\xcab\x05\x88\xab\xbb,\x98zHT\x17WzAb\x0dv\x80\x8d \x13\xd7oT\x8e\xbd\x96\x85ip6$\xf2\xa27\xcb\x8a\x94\xaa\xd0\x86\x1bP\x8e\xd8p\x885\xe3\xca\xd0TN:\x93\x9bC\xb8\x0dUMT\xf3\xf3\xbf\x1e\x94\x8e\xd3`\x03\xc7\x07Q\xdf\xb8\x0bx\xb7\xe3\x16\xc7\xf5\xd6R\x1b|@\xac\x12mpH\xb4\xc4!\xb1\xae,'j\x99M\xe8\xf6D\x1b\xa8\xa2\x96\x98\xb7\x96\xd0l\xc2Y\xd4\x96\xdc\x04\xc2uk\x19\xceF \xfd\xc95u^\xa4W\xc5 \xfe\xd1_\x8clvp\xbc\x83\xe3\xb8\xb7\xd5F\xec\x82O\xf5:\xbc\xd9ZNb|\x14\x85\xbe\xb8\xe5p\xab\x0bW\xf3\xc5\xc4\xc8\xa8%t;b4|8\xf2v\x89\x96\xc06\xab*\\\xf3\xfb#\x0f\xd3\xabb\xfa\xfd\xe8o\x00\xa5G\x89\x96+\x8a:\xc6S\xf4wh-\xf5\xff\xb5\xd6\xa2\xf5N#\xc5\xe75\x91!\xfe\xad\x89\xc9|\xe2\xe4D%w\x8a\xdc\x16D\x87\x97P\x86\xa7\x1eH\x12?\xf6\xc6!\xf1k {bd#\xda*n\x93|B\xf1\xe8\xe4$\x93\xbe\xc7Lt\xda.\x81\x04 \xc4KtZ\x1e\xa7\xf9\xb9b\xb4\xf8\x17+\xa6{\xb5u\x1a\x99\xe7\xee\x87\x9ej\x9br<\xf4\xa43\xe5rR8\xddRq\xe9j\xa3\xbdN\x86\x12\x1d\x9ad\xc2\xafw\x1c\xc8\xeb\x82\xb4%:tH\x1f\xea\x04\x17\x84\x9a\xe2\x1a\x05^4\xe2{sT\xbe\x8f\xaf\xeb\xc0\xf50\xecLS\x915q)%OO\xd7mV\x89\xf4y\xc2\xd2`\x91;rJ_\x86\xe3\x8d\xb8\x80\xa3\xc1\xb6)\x86\x0fZ\x83\xb7P\x8d\xd0\x8a\xda8\x0d\x8b\xb8Yp\xa4U\x13K9G4`\xdc\x14\x02\xa1\x8ap\x0e\xc9\x8e\xfb\xa1\xdf\xa6(\x17\x07b2J\xf9\xfcorS6H\xe8w~\xf07\xb9\x89\xfbsz\xe8^\x15-\x8d\x0b\xed\x0d\x8e\xb0\x86\xac\xf2@\xea\x99nHC*\x92\xf9\xd3P\xa2\xc6\xf3\xeb\xc7\x87e~\xa8\xbf^\xf1\xf6Y\xc29F\xbb\xc6@\x96\xf0\xff\xf7\x89Y\x94\x08\xc4\xe6{:\x90\xa8q\xa0O\x9f\x15\xb2I\xe1\xd2\x9db?\xe6\x13\xc7\xc9_\xec\xb5r\xa2\xc5\xf2\xc9\xad\x032\xaf(LuUy\xfa\xacPK\nW\xeb\x7f\xc6{\xd6E\xf7\x16\x13\x06\x1e\x92{\x15d\xbeh0\xd5V\xe3\xe9\xb3B-)\xfc\nsh\xbd\xd9\x90vtA\xee\x1c\"Q\x93h.\x91LeA\x1e\"\x10\xdb[\"\xd5\xe8\x82\xb4\xf0l\xdb\x15\xeb\xf6\"]\x90\xbe\x05\xe0`I$GY\x90\x97\x0d\x88C\x9fH\x96\xb2 O\x16\x91T\x93\x8c\\\xb1\xd1\x90\xa7\x0b2\xc3,\xc6\x92H+eA\x16\x04\xf3X\xc4\xc7b\xe7\x98iE\xe2\x82X\xae5\xc1l\x1b\xc2\xf3\x85<_$\xf2\xf9,\x85j\x11\x15vo\x96Da\x0b~\x8b\xa86\x91\x82\xb4\xe81\xd1\x02\xb1\x19\x17\xc2\xd2t0M\x17\xb6\x0cRb\xc4D\xd4?\x88k\xb3\xa1K2\xc64:l:\xa4D\xa6p\x8cY\x8c\xb8\x14\x96\x05w&,\xe2\x10\x9e)\x05\x04\x00\xb0|+\xd2q \xbf\xc9\xc0\x83\xbe\xa5\xb2\xde\x90\xca\x9a\xdc@\xeee@C\\\xa02)]\x12\xb8\xd4\x92'\xd0\xcf0Y\xd7D\x99J\xd4#\xea\xec\xb3\x82I\x7fF\xb8\x9f\xf1\xb5ALtp\xa9{Ml2b\xe7\x1d2\xfe1\xd1\xf95\xa2G\xc6\xcc\xad\x9f\xae\xc5\x82a\x16K@1=,/\x7f@\\\xfd\x1a\xd1\xa3c\xc6\xac\xa7K\xc2'\xc3\x14L\xaf\x8c\x7fL\\\xfd\x1a\xd1S\x98at\xad\xb0\xc8\xc2'\x93g\x89n\xc8\xf4\xe5\xb3B1\x16\x8c\x17\xbeJ\xffU\xbf\xb8}\x84\xfc\x1f\x87X\xf1\x90\xab\x12\x9fli\x8f\x95\xbc\xa3\xfd\x1f\x13ki\xf13\xf1\xf7\xe7\x7f\x91\x801\xd2\xe3+\x81\xc4\x80,\x13\x9f,T(\xdaR\xfb?&V\xd3bM\xb4\xd2/\xf95\x13\xfe\x14\x17<\xab\xd4~\x9bO\x8e\x0d(:\xdf\xe8\xff\x98XM\x8b\x9f1\xe6\xf3\xbf\xd7\xcc\xa6\xb6\xd68m\x9f\x9c6\x19\x90\xb0\x94S\xd2x\x1b\xe1=\x1c79\x001\x13\xbfXd\x90X\x0e\xc6\xdb0\xea5\xdcJ\\v\xb7\x12\x8b\xa4\xac\xf0\xd4\xc9\xbb\x87\x92\x1b Wq3qi\xfeWh\xa3\xb7q\x18\x9e\\-\xad\x12M\x10%B\n\xfc\x0d.B\xe6|\xe2ws\x11\x08\xa7\xcf\xd2\ni|j\x13\xea\xad\xdf\xe4\x00(\x12:I\xb7\x81u\xd1\x9f\xf1\xefY\xaf\xae.\xfa*\xf9\xbb\xb9\xe87\xeb\xa2\xfd\x92\xbf\xdeE\xcf|\x94\x1e\x1a\"O\x0b\xa4\xa6\x0c%\x9a'\xb7\xca\xeb\x7f\x9bX<\x89\x15\xe5U\xaa\xd1\x02\xc9\xa2X\xffo\x12\x99UUR U\xd2\x03\xabH_ZQ&\xea(N$\x0b\xc4\x11\x8ac\xc9\x04\x11\xab@\xd8\x8a\x87\x89]\x14\x1f\xa5\x1a\x88\x03\x14\x9f$\x0f\x12\x1b(\xce\xcfU\x9d\x15\xb4I\x8b \xabJ\xa4/9\xb4@6h\xf3\x9aU\x810\xb1\x8db\x07\n\xda(#\x14\xc7P\xd0F\x19\xa0\xc8\xc2{&vQ|\xe4y\xe3\xb3\x11$6P\x9c\x9f\xe7=;{V\xd0\x99Ug\x05m\xe0\xac\x8e\xe2\xe4\\4A\xec\xa1\xd8\x97\x02\x10\xa7(\xce\xceU\x9d\x95\xfb~A;\x10M\x822\\\xb5N\xe9>\xab\xd3E\xf23u\x07\xbe5W *\xd4\x14\xee\xc9\xf9\xaf\x11\x0eI\xa1\xac\x14\x88\x06\xc2\xdd\x7f\x91\xa0\xe2\x94\xb5)\xf4\x92\x03w\xbe0QGq\"e\xe1\xec\x08\xc51L,\x9b\x0eQ\xc4\xd9o\xd3.\x8a\x8fR\x19\xc4\x01\x8aO\xd2\nT\x19(\xce\xcfU\x9d\x15\xe4\xa4\xc53\xabvp\x16\xfa\xd7\x83;h\n\xe4\x15\xac\x18\xbdB\xa9\xaf0QF\x1d(\xf3\x15\xca\x18\x8d\xa1\xc4W0g\xf4$U\x99\x00\xa6\x8e\xd0\xd2\xf8\xcc\x86\xe5\x013G\xf3t\x9e\xd4\x99\x94\xea\x94\x05)\xd5\xac\"\xafP\x8f\xd1$-\xb0\xc6{\x85*\x8d\xfa\x92\xc7\xce@\x85F\xb3\xb4\x82T9o\xab\x0e\x98\x80cz\xb4 i})\xbb\xcf\x12\xa6\x94X\n\xad\xdf\xe1\xf5\x8d\x0d\x91\x9eKd\xa3L$Z\x84\xf9\xbaSe\x9a\x07\xd0C\xd0U&R\xa0\xca\xf4\x00\xa0\x83\xa0\xad\x8c\xe1V\xbe\x1d\x80+\x04\x970\x98e\xea\x01h!\xb8P\x1e\xe1v\xbf\x00@\x13\xc1\x1c}\x92\xca\xaaL\xcb\x00f)\x80u:O\x14TC\xf0\x96\x8e\x13&U\x11\xac\xd0\x89\x00\xf5\x12)#X\x82\x0b\xeb\xa2FE\x04\x8f\xb4/\xec\xf4H\x89\xe4\x05\xfa\x9aD\x0f\x88\xee\xd3\xe8\x0e\xd1m\x1a\x8d\x10\x0d\xd3h\x80\xa8\x9fF7\x88\xae\xd3\xa8\x87\xa8\x9bF\x1dD\xed4\xbaBtyBwW5\xec\xaej\xd8\xbd\xa9\xc1Bt\x91FMDs$\x85f \xf6N\x1a\xad!z\x9bF\xab\x88V\xd2h\x19\xd1\x12y\x85\x8bu\x11\x91\xa6\xb2\xba%\"\xc9\x86\x94\xc8\xd3\x82\xb0$\xcf}\xa9\xa6\xca\xb4\x8a\xe0\x0b\x82\xc3\x89\x18+\x0c|Ep4\x96\xf2\xaaL\x8b\x08\x8e\x11\xd4\xe3\x02\x188Ap\xfa(F\x15\x03g\x08\x1aO\xd2\xaa!\xd3,\x82s\x04M2O\x96\xb4 \x08[d\x9c\xb4j\xc9\xe1\x15\x99\x08\x98U\xd2\xe6\xb0C&\xc9\x8a\xb9\x1c\xf6H_2\x1b2\xad\x11\xa9LJd\xcd\xe1\x80\xccD=\xb2\xa4DB\x0eG\xe45 o9\xbcK\xc3{\x0e\x1f\xd2\xf0\x91\xc3\xf94\\\xe0p1\x0d\x978\\N\xc3\x15\x0eW\xd3\xf0-\x87ki\xb8\xce\xe1\xec v\xe8U%\x0c\xbe\xa2\x84\xc1o(\xc9q\xd8\xa4)xAy\xef\xa4\xe1%\x87Wi\xd8\xe6\xb0\x93\x86]\x0e{ix\xcd\xe1\xe04?t\x96x\x12\xa7Ud\xea\x00\xb8FpC;b\x94\xe9%\xe2#\x180\x7f\x87\xd4\xa7\x97H\x88`\xc4\xa8\x0fIR/\x91-\x82;\x9a$\xc9=\x82\x87\x13I\xea%rD0O\xe7 \x9d\x05\x04\x8b\xa9\x94%\x04\xcb':\xd5K@\x99\xac'\xe88Q\xa3[\x04k\xf45aR\x1d\xc1,}Lpl\x0eAF\xdf'p\x81d\xce\x88\x9e\x13\xaf^\"K\x04WJ_\xb4\xa8^\"6\x82\x8e2K\x14\xe4\"\xe8)\x8f ;\xd7\x08n\xe0\xceg\x91\xd2G0P\x92&\x85\x08FJ<\x0dY{\"\xb8c\xe1\xde\xa9\xf8=\xa2\x07V\xfc\xa9A\x11\xcc+\xf3D\xfe\x02\x82x\xd7c\\T \xd1\xaa2\x11J\xd9\x8c\x0f\x1b|\xb26^E\x970x\xcb\xe1]\xa3#Jc\xf0\x9e\xc3\x87\xc6XT\x97\xc1G\x0e\xe7\x1bO\x82\xbb\x18\\\xe0p\xb1\x91b\xaf\x12\x87\xcb\x8d\x98\xbfX\xea\n\x87\xab\x8dyR\xf7-\x87k\xe9\xd4u\x0eg\x1b\xf3\xa4\x819\x0e\x9b\xcdq\xb2\x96\x8b&\x9fg\xcd\xd7\xa4\x81K\x0e\xaf\x9a\x8f)\x16\xe4\xb0\xd3L\x91\xa3\xcba\xaf9I:\x865\x877\xcd\x98\x1c\x19\xecs8h\xce\x92E\x86\x1c\x8e\x9a\x8fI\xbb\xb7\x1c\xde5\xc7\xc9\xd4{\x0e\x1f\xd2\x06\x1e9\x9cg\x964djRlo\x0e\x17\xd9\xbf SJ\x1c/3S\x12\x0d\xce\xe1js\x9e\xd4r\xcb\xe1\x1a\xfb7Qh\x9d\xe3\xd9f<}\x0e\x84\xfa\xed\x02\x91\xd8\xa2\xd0gK\xc92 \xc8\\\xca\x82\x18\x10\x94C\"\xd5\x0009\xb0 R\x15\x00\x8b\x03K\x01\\\xa4H\xe8@\xa0\xcc\x81\x8aP\xba\xa2\x0c\x88\x88M\xa1\xd8:Z\x91%l5\xc8D\xd4\x90e\x1a\x1c\x00L\x0e,\x88\xb4\x02\xc0\xe2\xc0R\x00\x17)\x12:\x10(s\xa0\"\x94\xa2\x15&\xb5\xa9d\xd2\n\xd9R\xb0bG\xe7\xd2\x06D\xd4\xb0\xa3!\x01\xb3\xb6\xd4\xe4\xc0\x025l\xa9\xc5\x81\xa5\x00.R$t P\xe6@E(E+\x0e\xcc\n\x8bV\xc8B\x01+,\xb8s\x95\x89\xa8\xc1RB\x02f-\x14\x93\x03\x0b\xd4\xb0P,\x0e,\x05p\x91\"\xa1\x03\x812\x07*B)Z\xb1Rl\n]tD+\x18C1\xb3\x8f\\C^\xe1\xady\xe4e\xe4Y\x19\x16\x00\x16\x07\x96\x02\xb8H\x91\xd0\x81@\x99\x03\x15\xa1\x14\xad(2+\xf0\xb9]\x93T\xc8Z\xd5\x19\xea\xa8\x13I\xaf\x10\x17\xa5@\x9d\xf3$\x1bR![\xd5\xc3!\xa6\xae\x89\xb4\"\x15\x12r\xe0\xa0\xb2\xc2\x08>uZ!\x05u\x8a\xe8L\xb2X-Q,\xab\x0b\x91\xc8!\x15r\xab\x1a\x88\xce\xa1\xf8\n\x8aYu\x99L\xb4hL\x11\x9dA\xa2\x1cjZ5R\x9a\xdc\x06Z\xb1j\xac $\xb39\xb0i\x84\xc9ta#\xcf\xe1\x02\xa6\xf39phTR\xe67L\x1c,\x8d\x05\xc5\np\xa0\xda\xc0\x16\xa3\xaa4\xad\x10\xbf\x89M\xd4\x9cHF\x85\x84(\x1d\x9a\xe2\xd6YV\xe2\xb1\x89\x86\xe4\x9bk\x82\xaa9Pm\xa2ep\xc7F\x85\xdc6\xa1^\xb5\xe6\x0c\xb2\xd5Q\xb4\xee\x16\"\x11\xb3by\x07-\xb4\xba\x9bC\x1e\x1b\xc5\xcd\xdd2\x99\xc8\xbf\x83\xac\xc1\xdd\x0c;\x08\xc5CZ\xd3\xf1\x8e\x9bu\xc7\xfb\xb1\xc0\x81\xea]\x98Lw{\x87\xedS\xbb+`\xba:\x07,\xad\x924\x7f\xa9a\xfb\xac\xb4\x05\x85\n\xd8\x1c\xd8h6\x95\x0e\xacw50\xb6\xaa\xcda\xdcW4\x1c\xa4U\x8d\x93WE39\xb0`\xe13\x03,\x0e,\x05p\x91\"\xa1\x03\x812\x07*B)\x0e\xf4\x9a\xc6\xa7\x9b\xdfB\x1an\xe1t\xf3[\x9cB[|\xba\xf9-N\xb2->\x99\xfc\x16\xa7\xe1\xd6R\x00\x17)\x12:\x10\xe04\xdc\xaa\x08\xa5\x9c\x86[\x82\x86\xd1\x8al\x8b\xd30\xd7\x90m \x1a\xe6ed[\x82d\xb9\x15\xd9\x96\xa0\xe1\xcb\x14 \x1d\x08p\x1an \x1a\xe6V\x98\xf7\x82\x86\xef\x91\x86\xef9\x0d\xdfs\n\xbd\x174|\xcfI\xf6^\x90\xec=\xa7\xe1{A\xc3\x97)\x12:\x10\xe04|/h\xf8\x9e\xd30\xb3\x82u\xd1\xe2\x01i\xf8a\x0ef/\x1e8\x85>\xf0\xd6\\\xbdBJ\x1dh\x9erg\xc2\x98\xb0\x82R\xad3O\x90B\xbd\x83vd;k\x02\xaas\x1c\xb0\xba)\x92Yv\x91\xd3\xbb\xc8X6\x8a^7f,pN]$\xbb\xee\x1cY\x0e\xc5\xa8\xbbL&\xdab\xd6]\x17\xdd\xce\x1e\xc5|ZS\xa1\x8bV\x14\xbb\xbc\x0fK\x1c\xa8\x9e\xccb\xe9n\xbb\x9c\xfb\xba\x05LW\xe7\x80\xf9XI\x9a\xbfx\xc4\xf6\xb1\x1e\x17\x14\xc9\x90\x03\xde\xa3M\xe3k\xd2\x15Ry\xc4\x01\xf58\x81\x91^y\xe4\xa5>\xaeqPV\x1e\xa7(\xcf`\xd0V\x1e\x910\x1f\xe7\\<;\x9b\xc8\x8d@\x9e\x03\x05\xa1\x0e\xad\xa8\x81Y\x8c\x86z\xe8\xadz\x13)\x02\x91\xbb\xf2\x1e<\xb0\xc4\x00\x1cj\xbd\x19\xf0\x81\xdf\xc3\xf1\xd8\x9bs\xf1\xecl\"7\x02y\x0e\x14\x84:,?\xea1\x97\xc0\x08\x08\xcb\xcf\xf6&\xd2\x0eD>:z\xf0\x84\x14\x03\xd0\xd3\xf7f\x90\xbf\x8e\xe5g{s.\x9e\x9dM\xe4F\x80\x8ffV>\xaa\xc3\xf2\xcd\xfe\x82\"\xf5\xf4\xa1\xfc]\x7f\"\x1d@D\x0d\xbb\xfe\x9a\x80A\xdb>\x0e\x9e\xfe\x0c\xf2o\xfbH\x8f\xfd9\x17\xcf\xce&r#\x90\xe7@A\xa8\xe31\x04+\x1fHg\x00\xe5[\x83 \x06\x9c\x03>\x19\x06\xbc\x05\x17\x03\xf4\xf9\x83\x19\xc6\x8e\x03$\xc6\xc1\x9c\x8bgg\x13\xb9\x11\xe0\x8eyP\x10\xea\xb8K\x1e\xb0\xfa\xc7A^i0dh~\xf0\xcafq\x01\xa5\xea`\xc2\x93\xb0 \xaf\x0e\x0f\x911\xd4F\xa7\x7f\xcb\x01\xf3 \x82\x18A\x86\xcb\xa7\x11\xa2c\x9c\x07(:O3\x9e\x86M\xf9\xf5\x13\xc6\x94O\x13(\xddE1x\x9a'\xd2l1c\xf04\x864!\x8a\x87\x94\x9e\xc2\x13\x9apx\xb21r;r\xa0|\xb2 b\xca\xa7\x1d\x87\xf7\x98\xae\xc2\x81\xecS!i\xfb\xe2\xb9\xc6\xe1:N\xee\xdc\x13\x02\xabgl.\x8c\xf0\n\xcf\xd0>\xc5\xe7Wp\x10(U\x9f'<\x05\x94\xf8\x8c\x86\xd4\x9em\x8c\xf0\xea\x1c0_\xd02\xce\x86\x8b\x17\xa8\x96\xf52F\x0f\x81\xa2\xf32\xe3i\x98\x11\xee\x0b4\x8f\xf72A\x07\x81b\xf02O\xa4 1c\xf42F\x07\x81\xe2!\xa5\xe7\xf8\x82&\xe4_x\x0f\x168P>\xd9\xc4\xd2U^\xb0q\xaa/{\xde\xd3\x1c\xc8\xbe\x14\x92\xb6\xe7^\xb0q\xcca\x1d\x99|1D\xc0\x19.(\x84^\x85!\x98Z\x1cN`\xac\x17\x86\x9cc\x87\x9c\x9e\n\xc3)\xca3\x88\x80\nC\x03\xc59\x17\xcf\xce&r#\x90\xe7@A\xa8\xc3\xc1]\x1e\xf2\xc9\xe5\xbeb\xcb\xbd\xe2\xe4r_Q\x83\xf7\xca'\x97\xfb\x8aN\xe5\x15\xa7\x8f\xfbj\xa08\xe7\xe2\xd9\xd9Dn\x04\xf2\x1c(\x08u<\xbc}\xe5\xe4Z\xc1\xf2\xab\xafH\xae\x15\xae\xa1\xfa\xca\xe9\xa9\x82%T_\x91>+X~\xf5u\xce\xc5\xb3\xb3\x89\xdc\x08pr\x7f-\x08u\x9c\xdc_9\xb9\xfa#\x1c*#$W\x7f\xc4\xe9y\xc4\xe9\xc9\x1f!}\x8f\x90>\xfd\x11\x92\xfbh\xce\xc5\xb3\xb3\x89\xdc\x08pr\x1f\x15\x84:N\xee\xa3\x05\x06\x93u,?;\x9a\x80\xc1u\xae!;\xe2-X\xc7\x12\xb2\xa3\x19\xfa\x02,?;\x9as\xf1\xecl\"7\x02\x9c\xdcY\xf9\xa8\x8e\x93\xfb8&7\x16\xf8\x8ca~\xee\xc6\xaf,\x80\xdb\xa3T\x1cO\x12\xf3\xbe2\xc6\x89P\x1c\xdb\xdc\xf9s\xa06N\xf1HnBp\xcc\x92\xacQ\x8aRZ\xf6:\x1a\x10\xe96\x84e[.\xe7\xf5\xd8 \x96\xac\xa4\xef8\xbc\x87d\x05.W\xf5B\xd2\xee\xba^\xe3p\x1d\xf9\xef\x96\x03\xd6$\xe65\xbdB\x8e\x13\xf4\x02\x93W`9\x94\xca\x93Ib\xceW&\xdc\x0bLl\x9c\xf3\xb7\x1c\xc8NR\x1c\x92\x9b\xa0\x17\x98\"\x1f-\xa6 \xae\xa6\x82\x8f`9>E/0\x9d \xcd\xa1\xb8\x99\xce\x13i|\xcc\x18L\xd1\x9b\x84(\xeeRz\xf6S\xee\x05\xa6\xbc\xf7\x8e\x1c(Nc\x9b\xc0\xc9M\xb9\x17\x98\xee1]\x85\x03\xb5i!i{}\xca\xbd\xc0\xb4\x8e\xfc\x97c\x80Z&\xde\xcc\xa6\xf1}y\x15R\x99\xe1\xec\x9e!\xbbUf|~\xceD\xf05\xc3\xf9;C\xfe\xaa\xccpv\xcf\xe6\\<;\x9b\xc8\x8d\x00\x9f\xdd\xb3\x82P\xc7g\xf7\x8c\xb3\x9bo\xe0\xec6\x90\xdd|\x83\xcfOC\x04_\x06\xce_\x03\xf9\xcb7pv\x1bs.\x9e\x9dM\xe4F\x80\xcfn\xa3 \xd4\xf1\xd9mpv\xabc\xf9Y\x03\xd9\xad\xce5d\x0d\x11|a Y\x03\xf9\xab\x8e\xe5g\x8d9\x17\xcf\xce&r#\xc0g\xb7Q\x10\xea\xf8\xec\x9esv\xdb\xce1t\x9b#\xbbm\xe7<\xf8\x9a\x8b\xe0k\x8e\xc1\xd9\x1c\xf9k;\xc7\xd0m>\xe7\xe2\xd9\xd9Dn\x04x\xe86/\x08u\x93M\"\x02:\x01\x99\xf8\x06\x82SH\xb7 #\x8e\xf3\xa0\x8e\x03\xce\x82\xd9|\n\xeb\x16\xd8 \xce\x82\xf0\xc0\x8e\x03\xc1\x82U\xf6\x14\xda\xf1\xec\x01\xd3\x07\xc1\x1d\x07\x0ei}\x85\x057\xe8\xb0 \"\xc0\x13P9a#\xf0\xd0\x82\xec\xc4 \x11\xe4 (\xbb`\xadv\xaa\xcf\xc2\"5qB\x04z\x0b\x0e9\x16oN\x0c\xf5J\x16\xb6^\xd9\"\x10\xecU\xb8\\\xb3\xe2'\xaf\x80`-nV\xd6\"<\xe0\xcb \xc8ZrK\xc5\xae\xd8\x12+\xbbZ\x12\x0c\xfal\x0exK\xac=\xa7\xa1\xf5\x12\x1bo\xb3$\x18\xf8\xf9\x1c\x88\x96\xd8\x9a<\xdd\x96g\xdf1}\xe0;8\x90O\xeb+,\xb9A\xc5\xa5\xe8\xf1\x92\x80\xaa \x1ba\x03c\xc9\x9b\xae\xb6$<\x08\xac\x0b\xc8\\\xf1\xd6\x14!\xec\x8a7\x9d\xb5\"<\x10\\\n\xc8[\xb1\xd6,\xb2\xa2Vh|y\xc5\xc6\x06\x05\x00\x87yyE8\xe5\x95V8\x15\xca+2\x83\x8d\xb9\xd2\n'KyE\xe6\x02\xb8H\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbeS\x0b\xf6\xb0\xe2\xd76o]\x9bO\xde\xb5\xcd5ml1y\xd76\x96\xb6\xb1\xf9\xd4\\\xdbh\xcf\xc6\xe6\x93\xf7Z\x8a\xa4\x16\x0e\xe5\x05T\x88\x15\xa3=\x81M8\x99\xdfr{j\xcc\x9e\x00\x01\xd4T\xe3\xaf\x07\x01h\xca\x11$\xed[nO\xcd\xe6\xd7n\xae\xa5Hj\xe1P^@\x85X1\xdf\xde\x01{\x18\xb9\x87\x0e\x1fl\x0eAz\x0f\x1d\xae)r\x08\xa7\xc8\xd0\xc1\xd2\"\x87 \x89\x87\x0e\xda\x139d.\x80\x8b\x14I-\x1c\xca\x0b\xa8\x10+F{v\x0e\xb3\x87ua\x8e\xdbc\xbad\x02\xd5\xc8 M\xa6+Z:\xc7K3]2\x83J\xe4\xb8=\xa6K\xe6\x02\xb8H\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbe\x9b\xe3\x9e\xc8\x96\x85[.\xb2\xc1\xc1%\x10\\\x1e\xb9\\vc\xaeeTp\xeb\n\xd2r \x0fQ*\x02\xca\xbai\x1e[x8y\xb3.\xe7\xc6\x9c\xcb\xe9\xc2\x8b\xb9\x91\xcd:\xd7\xc3\xf6Xy\x04\x02M\x9b\xcb\x1b/\xa6Z\x96,\xe4\xea6\x1e\x81`\xd3\xe7\xf2.\xad\xed\xe8qsv\xf0&\x14\xa3B\xf6\x02)z'\x03!\x02\xf48\x0f\x14=\x82AgI 5\xef\xc4\xb3\x10.{\x9c\x06j\x1e\xe1\x81g]@\xab\xf5\x89g\x99\x97Zc\xcb\x15\xd7\x04\x82\xcf\x12\x97\xab\xeb\x98g\xc1E\xad\xb9U\xb55\xe1\x01h]@\xe6&\xcda\x8b\x0dV\xd5\xdap^\\r\xc0\xd9\xc4\xbc\x08Nj\x83-\xe7m\x08\x06\xa2k\x0e\x04\x9b\x98g\xc1I\xf1\xec\xd1\x86{\xc1-\x07\x0ei}\xc7\x0d7(\xbf\x11\xbd]\x10P9a#\xb8\xa8\x0do\xba\xea\x86\xf0\xa0\xf4V@\xd9\xcd\x89g\xc1Emx\xd3\x99>\xe1\x81\xe9\xc2'\x18\x99n|\x12\xef*\xb2\xd0\xf4\xd6\xe7l\xe2\x13\x0cNo}\xc1\x03>\xe1\xe1\xe9\xad\xcf\xb9\xc2'\x18\x82\xde\xf2\xcb\xd15\x9f_\x8f\xbe\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cM|\xc1na\xc0\xd9$\xe0\xec\x16\x06\x82\x07\x82\x98\x07\x02\xce\x15\x01\xe7\xae0\xe0l\x12pv\xbb\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cM\x02\xc1n9n\x8f\x19rv\xcb Mf(\xd8-\xc7K3C\xce]9n\x8f\x19rv\xbb\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cMB\xc2C\xd9}\x88\xf6\x1c\x98=;\x04P\xd3!$<\x9c\xdd\x87X\xda\x81\x95\x16 `p`.\x80\x8b\x14I-\x1c\xca\x0b\xa8\x10+F{\xf2\xa1\xf0\x8e\xcb\x88\xb3K\xc4\xbd\xe32\xe2\x9aV\x91h\xe9e\x84\xa5\xad\"\xee\xfb\x96\x11\xda\xb3\x8a\xb8w\xbc\x96\"\xa9\x85Cy\x01\x15b\xc5\xfc\xdaB\x94\x0em+\x11'\x89\x08C\xdb\x12\x97kQ*\xb4\xcdE\x82$\"\x11\xe8\xd4\x05dm\xd3\xa1\xad\xbd\xe5$\xb1\xe5\x93z\xc9\x01o\x9b\nE\xfd-'\x89-\x0fm\xd7\x1c\x88\xb6\xa9\xd0v\xcf\xb3G[N\xdf[\x0e\xe4\xd3\xfaJ[A\x12[\x11\xda\x16\x04T\xdd\xa6]B}+Hb+B\xdb[\x01\x99\xbbth\xbb\xdc \x92\xd8\x89\xd0v! o\x97\nm+;N\xb1;\x0cmo\xb9\x9c\xdd\xa5B\xdb\xdcN\xf0\xeb^\x84\xb6\x8b=\x87V\xfbthk\xef9\xc3\xeeyh\xebr`\xb3O\x85\xa2\xfe\x9e3\xec\x9e\x87\xb6!\x07v\xfbTh\xbb\xe7\xd9\x0f{N\xe1G\x0e\x14\xd3\xfaJ\xc2\xa0\xf2^\xf4xE@\xb5}\xda-\xd4\xf7\x82_\xf7\"\xb4\xcd \xc8:\xa4C\xdb\xe5Ax\xab\x83\x08mm\x01m\x0e\"\xb4\xad\x1c\xd0\xf8\xea\x81\x87\xb6\x95\x03\x1f\xe6\xd5\x83\xa0\xc9\xca\x01\xa7B\xf5\xc0\x03\xd7\xca\x01'K\xf5\xc0C\xdbk)\x92Z8\x94\x17P!V\xcc\xb7\x05\x0eb\xf2\xfaG\xde\xbaG>y\xfd#\xd7\x14\x1c\xc5\xe4\xf5\x8fXZp\xe4S\xd3?\xf2{\x91\x8e|\xf2^K\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbeMp\x14\xe4_\xe7\xf6d\x8f\x9c\xfc\xebBS\xf6(h\xb2\xceK\xcb\x1e9\xb5\xd7\xb9=\xd9\xa3\xb8-\xe9J\x8a\xa4\x16\x0e\xe5\x05T\x88\x15\xf3m\x83\xbc \xffm\x9e\x0f\xb6<'\xffm\x9ek\xda\xe5\x05Mn\xf3X\xda.\xcf\xa9}\x9bG{vyN\xfe\xd7R$\xb5p(/\xa0B\xac\x98o#\xe4Eh\xbb(\xf0}\x84\x02\x0fm\x17\x05\xb1\x03P\x10-\xbd(\xf0]\x82\x02\x0f\\\x17\x05\xbe\x8fP\xe0\xa1\xed\xb5\x14I-\x1c\xca\x0b\xa8\x10+\xe6\xfb\x08\x85Th[*\xf0m\x84\x02\x86\xb6\x05.W\x0b\xa9\xd0\xb6^\x10\xa4U\x10\xc1\xce\xad\x80\xccb\x9a\xc7\x96E\xbe\x8dP\xe4\xdc\xb8\xe0\x80SL\x05\xa3\xeb\"\xdfF(bh\xebr9(\xa6B\xdb-\xcf\x1d\x141\xb4\x0d\xb9|Hk+\x14\xc5&B\x91\x87\xb6G\x81\x94\x8b\xe9\xd0\xf6\xb6(\xf6\x10\x8a<\xb4\xad\x08$[L\x87\xb6\x8b\x92\xd8B(\x8a\xd06W\x14[\x08\xa5Th[*\xf1EA C\xdb\n\x97k\xa5Th[/\x89\x15AI\x84\xb69\x01Y\xe54\x87-\xcb|MP\xe6\xbchs\xc0+\xa7B\xd1u\x99/\n\xca<\xb4\xf59\x10\x95S\xa1\xed\x96g\xdf\x95\xb9\x17\xdcs \x9f\xd6W(\x8bEAY\xf4vI@\xd5r:\xb4\xbd-\x8bUAY\x84\xb6u\x01\x99\x95th\xbb\xa8\x88-\x84\x8a\x08m\x97\x00\xa9U\xd2\x86\x1bSd\x9a~]\xd1\xe5/>\xec\x8d\xef\x1e\xc3'S\xdf~U\n\xb3\x14\xc0\n\x9d\xf0ow8\xb4NV\xea\x00R*\xafP\x13U\xcaB\xf6\x81D\xb3$T_S\xcf@g\x13\xefjJ>c\xed$\x9e\xb1N>\x1b\xbdJ\xe5~\xf66\xb0\xb3W\x0e\x9c\xbd\x13\xac\x9c\xf8\xdd]\xbc\xcd8}\x96\xce\xe1#)\xaa*Mm\x8a/\x9a^\xd1\x15\x85\xf7fs\xd4\x85;\xa2W4O\xf7,\xa2\xb4\xe9\x91NQ\x9eI\x16M\x89&}\xef\xec\xa7\xf3\x16\xe9\x8c\x9b\xcc\x86\x90E\x98\x15\xbe\xa2\xb2S\x81\xe2\x12\x18m\x1e\xa0!\xa2\x11\xde\xa0\xcc\xe4\x11\xcac\xc9K\x8b\xce\xbbg?\x97W]\xd1\x832K\xb4\xb5 F\xb8j\x93\xa5\xf4Tx\xd9\x11<\xeb3\xb5\xe9\x1a\xd1\x8d\n\xb7\x0e2y\x842\xeaK\x88\xabw\xcf~.\xaf\xba\xa2\x91:;u4v\x9d\xdd\xb0\xa0\xeb\xbc\x06\x9a\x86\xa8\x0f\xb74\xafh\xd4\xe0\xa6\x85\x0d\xacj\x83W\xf5$\xae\xde=\xfb\xb9\xbc\xaaC{3\xf19\x1f\x976z\x12uh\xfbE\xbc\xc8\xd3\xa5\x0f:C\x06s\xfe \x96\xa9K_\x0d\x86\x18K\xb8\xc2\xda\x84W\x07+\xfc\x95\x8c\x86\xac\x9e>\xa6\x81\xdf=\xb9\x17\xdf\xdb\xc07\x0cG\xf0\xc9\xa8\x15\x89\x13b\xa3\xec\x84\xf25m3\xed\x01\xbc\xb3\x85c>\xa3\x1d\x87Ft\xc2\xdf\x837u\xe9\x91\x82]E:\x87\xb7\xe2]\xb3B\x15\x9f\x00\xda\xc0\xd7Z\x0eoX\x91xoo$\xb4\xdf*`EV\xe9\x9f\xaa]W\xc0\nS\x9d@|\x02\x98\xad\x82\x15\x9e:g\x95|\xcb\x8a|\xc2\x8a\xdd{V\xf0\xf7l\x08\xeda\x03\xac\xd85\x12Vl\x1b`\xc5\xa1\x91\xb0\xa2\xd4\x00+\xe0\x91\xa1\x9f\xb4\x82\x96\x9a-\xe0U\x95\x7f\xff\x08o9\xb0@!~\x84\n\x19MP\xe6\xe9\xed W\x12\xaa\x8d\x13U\x9e^\x14r=\xe1!\xc1\x97\xfc\x9d!\xef'\xa49\x02_\xe6j\xaa\xa7\xd7\x02\xdf\x89\xaf\x7f\x15\xcf\x07\xd8\xe6\xdd\x84\x891\xe0}\x9c\x90\xfb\xaf\xf7\x13R\x97\xb6x\xed#\xe1\xa7N\xef.J;\x90\xd3\xcb\x81D#\x9c\xbdG0\x8d\xd35i\xa4\xa0@\x1c\xc7\x05d\x13~$~\xcfn\\\x0c\xfa\xa9\xb37\xa5\xc6\x85];Kg\xe2\xb3h\xf0Y0\x13z\xa2\x06L6<\x018\x8b\xcb\xf0\x06J|\x9d\x19\xe2Hn\"\xe7\x8a\xbfa9\xa5\xcb\xbcc\xad)\x80fC\nT\x19\xbf3\xd7\x16\xba\xf8k\xa4!\x00\xc0\xf7!\xe2{\x95L\xf1\x01\xb2\xa6x[\xa2GN\x14t\x99\x0b\x1d}Y\xc1\xddEv\x8c\xd6l\x08#+\xa4\x0cC~\x163\x06>\x86\xc6_\x8c\x0e\xe1\x08\xb3O|\xf9'\xa2\xf8&\xda^\xfc\x11\xa9;\xfe\xe54\xcc\xd1\x96\xef!\xc6\xb9\xe3\x9f\x92\x82SX\xbe\x8am\xd2nH^\x83)\xacRZ\xb8k\x9c\x06\xd4[\xbfj\xfa}\x8cb_\xef4+\xc5\x9a\x85\x96\xd8\xd8\x83v5\nTe\xce&O\xe1\x03\x18=\xb9\xcdf\x7f\x81\xf6W\x00\x0e\xd7\xf0\x04\xb7\x06m\xa0\xc8\xd2\x14\x7f\xc4\x0c\xf2(\xd7\x01\x17\xff\xf3\xd4\x98H\xa3\x02\x9d\xc3\xf1t\x02\x8af 8d\x0e6\xa0\xf2q\x04\xca\x8d#\xe1\xaft\x9f\"!)\xac\x19\x84n$6\xbd@\x03\xf5\x9e\xa5\xf6\xd5\x07 _\x98\xeaA\x03\xe9\x05j\xc1\xeb5\xe8B}\x95j\x04\xdeS\xb4!r[c=\xd0\xe0\xb6Z\xd0,\x066>\xbc.\xaf\xd9\x82\xf6\xd1\xf0c{\x01\xc4\xc1Y\x12\x03\x06\xcb:\xe0V\xb4\xf8w/|\xaa\xa3\xad\xc2\x04\xd0\xa4\x9e\xacu $\xd1X#\x821{\xc5\xbdc\x95\xd0X%\x1e_\xa4\x80\x95\xcb\x9aa\xafl\xef\x98\xd2\x9dr\xb8\x93%}\xab\xb8w`\xe3\xeen\x06>\x03U\xe0\xdb\x994\xfc\x92 \xba\x18\xfc\xf5D'`B\xb5\xc5\xdb\x00\xbd\x15\xda\xea\x11\xf9^4\x08\x8eE\x873?\x7f\xd7\x16\xe3\x1b\x15\xd8\xef,\xa7C\xe4\xfb\x16\xf8D\xa1}\xf3\x86\xf62\x91{\x1a\x8e\x00\x9d\x7f\xf3\x8d\xcaROn\x83\x92V<\x84\xee\xe1\x939\x9a\xc6\xbfm\xb8\x12\x94\xd3b\xfd\xa9\xf1\x01 \x06\x99\xca\xe6>\xbe\x94Y\xe3\xca\xa7\xf1(9(\xbc\x83\xdb\x1a\xbcaX\xe3\xbda\xaa\xf2H\x93\x8c\xadr\xdb]\x12\xe8\xc5\xaeE$\x9dY2d\x1a\x86l\xf4\x0d\xb8{\xee\xc1\xecg\xe6m\x95-O\xbf{\xbc\x03\x16\x86\x0f\xaf\xb0\xce\xa3|\xec\xb6\xc5&\x8aG\xe5>\xab\xe7=\xb4\x01~\xad\xf3\x9e\x9b\xe5(\xcc \x87ux\xaf\xcfGm\xa4lz\x0dI\xdf+\xeb^\x1fF\x9c\xd5\xeb\xc5C\xaa\xcdf\xdaV9\xf6T\x18\x9a=\xf8\x0c\x1f\xd6L\xebK\xa6\xb2W\x16\xfdV\xac(\xea7\xd8\xd0\x0d\xfb\xa8\xc8\xeb\xf7\xb0\xddz[\xe5\xd8\x07\x0d\xd9\xfe\x0b3y\xa8IF\x89\xae\x1fe\x89\x16\xa9\xf3\xc8j\xbbW\xc2AKz\xd6\xab\x8a&\xd1IN\xc1\xd1o\x0eN\xc3[\xe5\x9f\xa9\x84V^\xc1\xb8[\xd1\x12-uA\x8b\xf9\xd8\x926-\xa6\x99U/\xf7\xd4\xe2\xe39R\xf2O\x1dV\xbd\xe5s\x0b\x06v\xf1Ic\x03\xbb\xf0\xd4\x82\x81\xbdy\xe6\x9d\xb7![\xe5\xf6 \xa6\xd6\xe6\xa9\xc3\xa6\xcc\x03hl\xb7Y\xe1\x06|\xd7F\xe5\x83|#f\x15\xbe~Y=\x8d}\xfc\x04\x11vO\xb3\x05o\xe2g\xfaaM\xbeW\x8e\xc3\xd3<\xb7\x86\x1di\xbaWrC\xaci\x95\xb5 \xab\x13\xb3\xc3\x1d\x82\x1d\xbb\xe1\x0b\xf8.l\xef$-\x0d\xe3\x91\x16(\xf1\xd8\x1e\\\x1d\xdb]>\xb6\xe1\xa5\xf7M\x0d\x83D\xee\x95T\x19\x9et\xd6\x98?\x83\xe7\xcd\xe4\xdc\x10(N\x81\xa9#\xd2\x88\x11\xbcU\x1e\xc0\xae\xde\x0b\xaf\x98G\xb6\xca\x0b@\xfa\x8bTUE\xaa9\xb6\xe2\xeb\x0b\x9b,\xeb\xd7+\x1a\x0f\xb1\xc6\xbb{\x96\xb6\xfd\x04\xaf\xf9G\x8d}\x80\x86\xf0Z\x04\x9ej\x02\xd0\xee\xf5\x89\x0d\xef\xe3+\x8c\xf5\xb4\xc6r\xac\x91\xadh\"\xe5~\x0c\x91/j|\x04\xe8y,ec\x8dc\x80\xca\xafl\xb1\xb9U\xea\xaf\x03)K\"Ey\x82\xf4t\xc0N\xaaO ;[`A7i\xe7\x13@\xa3\xa4\x9d3\x80\x9c\xd1\x13\xa3\x0dwt\xa5\xe6E\xe5D\xfd^\xac\xea\xa1\x0b\xed\xfa\xca\xba\x83\xabz\x01\xc8\x1b\xbd\xb2n\xd9_Su\xea\x16\x05\x1a\\KvK\x07\xa0A\xb2[^\x01\xca\x8f^\xd8\xf8\xbd\x1d]i\xc4j\xacQ\x85\x16\xa0\x13\xf8:\x02j\xbc\x03\xa8=\x91\xcc\x86H\xd5\x07\xa8\x0c\xf7\xa6\xcb\xf6\x18\x1c\x01h\xdc*\xed)\xcc\xf7\xd1\x8b\xf4,\xaf\xc7-\xd4o\xc6\xb6P\x98\x03\xea\x8c\xb70\xcb\xd1\x02\xa8;\x93\x9cX\xff\x13@\xdex\xc6\x1d\x07z\xfd\x8dh\xc2n\x9f\xb9\x856\xec}\xdd\xf1/\xd9\xeal&p>o\xb7 \xa8\xd4\xa4g\x98\xaep8d\xc4\x85\xdf\x1d\x83ii\xf1\x10A\x13t9\x88\xa7\x96\xc7<\xb3!\xc7\xf4V3:\x8c9n\x0d\xee\x99\x0d\x0d\xdd<\xb0\xd2`\xabT\x0ch\xe0\xd5\xbc#\xad\xb8S\xa00\x0b\xefp_\x8e\xab\xdd\x01\xff\xe5 \xf2}\x83\xc5\x91\x0f\"\xc4x\x96\xe1;\xa4Mf\x06\x906\x1a\x8b^\x8d\x8d\x18\xe1\xe1\xe0\xdb\xc0M^gOx\xdb\x16Cq\xba\x8f\xa5\xe0n\xaf\x84\x16I~\xdb\x99\x99]\xb6\x88\x9c\xb0\x9b\xd1\xfb\xd2\"\xe8\x08,\xf2\"e\xef\xf6\xcarI\xe4\xb3l\x9b%\xd1\xe2\xa8\xe6h\x11\xa8j\x8de(\xdf\xed\x95\xc2e\x86Z\x9c\xa1\xb7U\xec%f8,\xc9\x18\x96\x1b,\xca\xd6Z\xdc\xef\x833\xc5\xbe]\x01\xdd\xe1\x12\x90\x93\x14s4\xa9\xc0\x0e\xbf\x06\"x58\xf1/F5\x06\xab|B\xb1\xa9\xee\x95\x9csa\x9f\xe7\n\xfbX\x13\xec\x1d4\xb0\xea\x90\x17\xd8T\x14>\xce\xa2{%\xe7^\xb4\xa2\xe3\x11h \xdf\xc5\xa6;\xb8\xe4E\xda){\xe5\xd6\x85\x92\x1e\xbb\x12U\xb4G\xf08+\x8f\x80\xcbYz\xa4%\x19\x14\xe7z\xd9#\xaf\x92I\xf7\xca\xadw\xa9|Mx\xd8l`(\xb3U\\\x8f\x97\xe3\x91\x17)R \xdbE9k^\xce:QNqM\x1ea\xc1\x04\xd1n<\xc7\xd9\xecy\xe1_r\x9eBdBX\x7f\x1c\xa8l\x12\x08\xc4\x1a2\x0bS|\x9f\xc0\x14\xf7|\xf2\x04Nz\xeb\x13Yz\xd6=\x95y\xe9\xad\x8a.5\xbb!\x10,\xd6\xd9\xbf\xcc\xa9F,\xd5\x8a\xca\x8f\xfc\xcb\xde\xd0\x0f\x1b\xc2\x7f\xe1\xbd\xf6%\xba`\xadJ\x8b4\xeb\x92\x16\x9f\xd3S\xd6\xe2\xb8@\xc0\xf9\xb0\x13\x9f\xbe\x16\x11\xbc\x11\xcf\xce*\xc4\x9fY\xae\x8ee\x8c?\x93\x80\x0b<\x03\x16I/0\x031\x86\xef\xb0\xb96`\xb3\xee\x91i\x1a1\xc3\x1e!\\nr\xf5&\xc1\xaf\x03\xe3.\xc9#;\xec\x88\xb99d\xa7,\"?\xf3\x85L\x0d\x83\xef\x12\xcdm\xb0\"\xa6O\xe0k\xb0-\x11\xffN\xe39\x1f\xc1\xb0\xc6\xf8vt\xa2[\xbaW\xd6[r\n\xa0\xca[\xd2\x10\xc3|\xafT\xb6\x04\x03\xa9\xdd\x96\x9cB\xb2{\x0c\x11r[\x02\x11\x95\xb3#\x0d\xeeH0F:\x10\xb9\xbd \xac\x01\xba\xd0\xcd\x0d\x1e2\xe0\xe2)\"\xb8\xbe\x11\xed\x89\x91\xa3\xe0\xa58N\xad\xd1\xbdr\xdc',\xdb\x1c`\xefe\xaf\xac\x0f\xdc\xa8\xea>a\x94v\x8aZ\xdb`\xc2\x03\x8bA4\xe6b\xb6Jx@S\xcb\x07\xd2\x91\xb2T\xd65\xa9\xdcd\x8b\xad\x1a,\x93\xf9u=\x8c\xda)\xcb9d\x8d>\xc5\x9ex`\x9a\xdb<\xa0}\x96'\xa7\x08\x07\xe4\x91p\xff0\xdf\x9b\xec\xe7@\xe4V\x1f\x06\xfb \xe8\xc2=\x1cH \n\xaf?\xc4p\x07\xb1\x8aaA\x16\x84B\xcc\xef\xd4\xf3\xc8\x06\xab\x02\x01\x0f\xc5\"\xa4\xad\xe2\x16p\x0ez\x05\xf2\"\x19\xf2\xb0%\xd5\x1a\xf2\xa3\x86\x01\xa9\xc1\x97\\\x83\x14kk\xe8rZ}\xb8\xee\x1c\xcb\x9a\xb0Og6DP\xfa\x08\xc7\x86\xca\xa7\xcc3_\x99\xaa\x1a~%|G\xf0\xe3\xd5\x0d\xd1\x00]\xac\xc3=\xeb\xd3\xbd\x92+\x139\xb1\x0c\x0d\x08\xc5\x85\xe7\xaeBf\xac\xeb5\x15\xa7\x8e\xa7\xb0\xe19\x8d\xfb?\"2\x8b\xed\xd9\xdc\x0f\xc0\x8c\xa1\x9c\xf8\xe4U\x8bO\xc6\x91,\xe2\xee\x0dp\xb7\xce\x19\x03,V@\x8b&\xa6\x89q\xe6\xee\xf0rF\x177\x18\xc4^\x08~\xd3\xfd@N\xde\x8b\x8d\xec\x0e\xff\xd8'\x0edS\xf8\xba6\xac\xf2\xa0\xe1\x9ab\x91\x87{P\x84\x16\xb2\xa4\xcfJ\x1bj|[3^\xba\xc1\xb5\xdc\xa3\xd2\x95S\xab\xf3\x832\x97\x93+\n\xeeu\xc8^\x193\xa3!\xa3\xbf\xbc\x13\x1fm\xc5\xae\x8ahI\xe9\xa5\xa7J\xf1l\xaa\x1c8\xb9\xe1\xa7\xe5\xee\x19S\x16\x14\xaaI4\xaf\xb4Z\xe8\xb5\x86\x05\xa5 \x80\xca\x08P\xb1ZW\x9b\x8e\xd65\xb1W\x87~rG\xe4;@\xee{|'gG\xe4G@\x9e{b\xff\x10?\x90\xdb\x97V\xa4\xa4\xec\x89vfj\x99\xa4l\x9d\x16\x94\x05[b\xe4\x95\x0d\x9dI\xbb\x16[$@\x83\xee\x88\xdco1`\xd0fE\xddw\xa4\xea=sH\x18\xfb\xc7-\xd2\xe2\x17S8\x13\xf1/r4e\xa9\xdaQ\x82\xc6\x1b\xb5b\xea\x1b\xdc\xe1P\xdeC\x0e\xdfbC\xcfr\xda\x0e\x13Ib\x92\xef\xb1\x91l\x02\xaf\xc0a\x16\x12\x8f`\xd4\x9fP\x93\xca{$\xbc\x1f\xc9\xa2\xf5Y\x8f\x0f5F\xa3w|x\xb1f\xdcjrj\xd7\xaf\xa88\x9a,\x19%\xc5\x86\xd5PQ\xd9h@\x84\xf7|\xdf\x0c\xd7V\x05\xa5~\x07M{\xd0^8A\x1e\xa0\xe4<\x94\xc1F\xc5\xbe\x05\xa3 j\xb5\xa0\x9cJ\xabu\x163\x16\x95\xa8\xc5b'%l\xb5\xa0\xa4C\x8b9\xb7xc\x17\x88gX\xa7aC\x96h\x8d\x9a\xcd>#\xf6\xb6&\xe9\x05\xa5p\xdfe\xca\x83\xfbG>\xe9\x02V\"\x82\xe5\xfbG>\xffud\xe8\x92\xb2|8\xafd\xf4\x00}\xa1\xc8R\x9e\x94\x14\xff\x01-\xd8=\xa0\xed\xf6C\x1bl\x7fx\xe1[;`K\xa4\xc8\x06\x9e\xf7\xdbP7\xaf\xdd\xe2^\xa6Jp\x83\xf0\x11\xe6\x95\xce\xc6\xea\x0bod\x0c\\Gr\xff\x14\xb5h\xec\xfc\x90\xcf\xa3\x9a\x88\xcb\xb5\xbe\x94\x85\xe3\x83J\xb7\xdd1c\x8b\xb6&>\x9d\xf9\xc0\xb47\xf9\xf73\xdb\xc8\xb1\x82;<\xca\xdcH\x9e\xe0\xbe!$o\xf1(\x99\x7fn\xf3^\x8e7\xc7\xd9\x825G\xabl\xb4fi\x8e&\xc6;r\xfb+_>\xc6;\xa8q\xec\xdbc\xe1Z\x16*:d?#VO\x11@i\x10@\xc5\xd13\xb4W\x11\xd6\xe5zIq\x81,'\xfd\xd4\x12\xa7\xac\xd4h\x8f\xaf&K\x8aMU\x89\x16\x95\x03\xedHeZQB\xdaJM\xee\xb2\x92\xa7\xbd\xd4.`I\xa9c\x16Oyav\xf7D\xa0kR\x1c\xa6Lo\xdcD\x1b\x85E\xc2U\x85[(\\\xd4\x94/\xb0[R\x91\x15\xaa\x8aB\x8b\x8a\xd5hH\xdd\x8a\xb2h\xf4\xb1t5U:\xb4\xf2\xb4\xa4\xe4TU\xa2e\x05\x1fw\xbcUF\xe9\x0d\xf4\xaa\xf2\x18\x13\xd2-\x0bB\x0c\xda~f\xe9\x1f\xe1]\xa3M\x0d\xa2\x87\x16\xdc\xa0\x80\x9b\x85}>\x7f\x0cV\x85\x0d\xc1^\xef\xc2\x18z8\x0d\x9f\x9e\xb8\xa6u\x80\n\xe3\x15!1\x12T\x08\x82\xf0z\xee@\xe3\x1f@D\xae\x1f2%<\xa4\x06:m\x9f\x96\xd6b\xfb\x1a\xa7\x1en\xd4(xa\xe1N\x94\xccwE\xb4>\xa7+\x1c\x16\xc5\xc4ByG\x18\x8f\xe6\xc5\xa5\x07E\x96\xf4\x8a\xb2m@#9\x8d\x06\xf7\x8a+\xce{\xa7-\\\x12_\xbe\xd9p\xb7\xdb\x14\xfb\x02\xc3\xd3\xe8dQ\xc4\xbd4\x95\x8d\x07\xe9\xa0&\x02@\xb6\x1a\x0b\xee\xe4x\x83$\xb6\x08\xe7ll]\x8dG!\x8c\nOQ\x93\x13o\xd3\xb7\xf8\xc6\xb6 \xa9q\x93Ng\xa1M\x11\xe2n~\x97\x1fA\x9f\xdeL59\x18\xec\x88\xfd)~\xbb\x99\xc6B\xdc\xd3%\x81f\x9f/\x17\xd9P\xb9}`c\xed\xb5\xcbZ\xa6\xda\xbe\x93\x0c6\xcf\xf4[\xa5\xfe\xc0\xe2\xcb\xaaR~\x80M\x0c>\xd4\xc4\x15\xa8\x8aRo7Y\x96U\xe7\x0e\xee(\x14\xbb\x88XtW\x8e\xb7\x87\x8aXcr\xabl\x99b:\xeeJTy~\x04\xdd\xc5\x8e\xd8\xb4\xaa(\xdb.\xe8+w\x1f\xe13!Z<\xc8X\xdc\x0f\xb3\xaaHN\xf1\x8c\x93\xe0\x8aDx\x87\xdb\xa1Et\x00\x8a,\x96+\x07\xbe\x9eg\xc4\xa3b\xa8w\x97\xda\xe4\xea\xf2\x01\xd59]\x13\xba\xefs\xde\x8b\x07\x11l\xcb\xa7 \xafxn\xe9\x8aw\xe7=\x1b\x9a\xb7\x8a;`\x13\xf1\x89U\xb9\x8bU\x8e\x06\xb24\xad(\xf5\x014\xf8\xea\xe9\x11.\x9d\xf0\xb5\x14\x06 \xe2f\x03\xad/\x05\xf4VY>1\x1d\xf0U\x08%G\xc6\xa0e\xf3\x94\n0LRQ\x8e\xfd\x11\x0c\xeeA\x9fG\xb6\x0e\x04\xc3\x91\xb8\x96\xa5\x8aU\x04\"\xcf\x15\xc5\x7f\x86\x1c\xbb\xe7\x05\xe1\xe0\xf4\xf4\x81}\xbd\xa2\xac\x87]\x89V\x95NG*\x92\xbab\x11%E\x845e\xc2;oCn\x95\xe76O\x8a[f\xc6)\\\x19\xf2y\x8dW\x895\x95_#\x1b\xb2\xa2\xf0p\xc37T\x9a\x10\xbd\xa0\xd7U\xc4\x0e\x0d\xae\xa7\x93w\x84`\x14\x9d\x88\xb2\xef\xc7\xfc\xce\x01\x9d{\x0e\xbc\x98.\xf6\x14u\x0cPA\xd7\xfdi\xb7\x95o\x15\x88\xd5\xdf\x8a\xd0\x9c\x02N\xf4^\xe3t\xc6C=\x18[\xbd\x11/\x18.\x1d\xe3\x8c^\xc1\x15\x8cUr\x150\x80\x97\xa6\xe6\x14\x97\xb4R\x04\x9cUv\xa7\xfd\x89\x9c\xc2\xa2&\x93d\x95<\xe9I\x1bRW\xd6D\x95hM9\x90\x0e\xb3&\xc15=\x99/6\x91\x0d\xb1\xdc\xf2i\x8f\xd1\x90\x9f\xfbRY\x91\x9f\xd9\x0c\xcf)\xb7\xea8\xe5\xd9\xb2\xcaN\x1d\xa5/Y\xb1\x9f\xba\x92S\x1aP\xa0:\x83\x9b\x00E-\xf8b\x87\xc2'B\x9bb\x85#n\x1ah\xc1m\x1d\xe2*\xab\x07\xbeb\x80\xdb\x9b9\xa5\xd4H\x07\xc1Y%\xdb\x90\x93;2+RW\xfc\xe63\x14\xdb|9\xcd\xb3x\x16=\xf3\x99\x1e/\x9e\x1d\x82;c\xf7r<_\xc5\xc5$\xe8\xf4\xaa\x92SBM\x93\x9ei\x87M\xb0\xe6#4tY\x93\xc5=\x139\xa5\xc2\x04\xda\xea\xb2R7l-EsJ\x8e\xcd6\n_hQ\x16\xf4\x152y\xadD\xa65\x13h\x96%\xa8)\xf9\xbb9\xdc\x8b\x127\xb8*F)\xdf\xb6\xe1_\x83\xd6\xf8\xec\xc2f\x19\x9e.#\xc3\x821\x00\x0d\xcf\xd0\xd2\xa7v3\xb9^\x88\x87rJ\xe9\xe1\xbc.f;a\xd6\xa2-\xea\x92U:\xaf\x10\xa71\xbf\x9dS\x9e\x01\x1a?J\xd3\x9c2\x82\xe3\xd6#c\xbf\x86\xc6\xd7\x04#W9\xb0\xe1\xef@`\x11\x90\x85:\x90\xc5\xc5MG\xc91\xfe[\xa82c\x06S}\x10\xcb \xbc\xde*.\\\xbbJQ\x01\x0d[E\xe6a\xf6\x00\xdbC\xeb\xf31\x0bk.\xd8\x07:`\xaf*|*\xe1w\xb9\xefx8\xa73\xfa~\x8e\x03\xc1\x9d\xc2\xaf(\xde3\xf7\xd4\xe1[k\x03\xce\x1f\xa7 \x88\x1f:\xd64\xfcx;\\\x9bt\x12\xa4\x96U\xf8\x95\x17U\x84\x8a]\\(\x9cn\xc9\xb8\x87\xa8v\xa0Ac\xba,^\xca*\x96\xda\xc0\xd88O\x16j\xa8\xf6\xcf.\xf9\x9a\xea*\x1dn\x99\xc4U:-\x89z\x10\x8f\xad\x04i\xe2MC\xc2\xe3\xae\x12\xe1'\xae\xb2jb#\x89\x8a\x8d$C\xc6E\x04\xae\xec\x99[Z\xaa\xeb\xb3\xab\x02\x96\xba#\x9a4]\xa8/m\x89\x9a\xaa\xf1\"\x1d\x9aK\xb5\x94J\x15\x10:}fg=\xf2\"yd\xa9.\x18\xe3Q\x87\x0e$\xaa\xf8\xf4 \xd4x\x943\xf5\x8a,T\xe5\x9e%\xbf\x7f\xe0\xbb[\xd3\xa4!\xb0\xc5\xb6T\x0b4\xbdH\xb1\xd4\xac\xa0\xcc\x1dp\xd2D\xf4\x0f\xc1_\x97\x8d\xc8\x85jc\xb6Hm\xf1k-\x07\x1e\x81,\xd5\xd2EWZjV\x1d\xe1\x98\x1d\xac\x95%\xe9Kt\x03\x9dX\x13\xb3T\xec\x8a\x9c\xee\x9b@Wb\xc1u\xf4\xfci\x1f*1\xc67\x17\xdd.n\xce\xc1\xad\x9f{X\xf1\xde%<{|O\x06lR\x0d\xe2\x95\x928\x15\xef\x9b\x95\xa12\x18\x1e\x9e\xf6`k\x0d\xce\xcb\x18_\xf5\xc4mH\x18\xb8>\xdbjAI{\x9e\x95\xbaQ4\xc9\xb0\xd5\xb5\xc2zm\xa5\xd6\x14FO}Y\x1a-\xd5\x05\xeb\x0dK-\xe3\xfd@\xf1\xa5\xae\x03\x0f@\xba,\x04\xb2UWMo\xc5\xac\xd4\x88\x0d\x9c\xa5\xbaW1\xbb\xda\x81\xa6W%}\xa9\xee\x95&\xc3\x0e\xca\x9d\xb8D\xd2\x14\x1d\x97'\xf2\xfd\x0b\x8f4,B\x8f\xb8\xa1{\xaf1\xce\x84\xcd\xf9\xd4\xa6G\xe7\xb4jm\xa7\xa2-\xbc\xea\x10QW\xed\xa4\xab\xea\xa8\xc3\x9ed\xb8\xea\x0bs\xae\x8e:\xeaI=[\xed\xa8\x12]\xa9Ct\xac\xaa\xa4\xdb\xaaO(\x83v\xe4\x8e\x0f\x1b\x8c\x15<~\x11\x0f\xee$\x89c\x98\xc3)\x16s \x90\xc6\xa5\xdd(\xee\xc7\x80\xba\xea:^#\xae\xd4*mH]W\xadP\xd6v\x8e\xba\x13+\xcb\x9e\xad\x96(\xd8\xe2)3\xce\xa0M\xa6\xf0\x99\xbb:T\xd8J\x80\xe2\xce\xdc\xb1\xd8\xaf\xff\\z\nKE\x1c\xba\x1a\x85\x9b\xe1\xe4\xf8R\x17\x9b\xe9p\xf3\xa1\x06\xf8\x9d\x1c/]\x9a2j\xf1\xc4@lH5E\xbeW\xe3\xb0\xdbW\x1f\xd98\xd8P\xd6\xe0{\xd8\xd6\xdf\xa8l-\xe9\xab\x1d\xa6\x01\x85\xb5j\xb2\x04\x9e\xba'\xf8u\x02U:\x1c\xdb_\xa4/\x81\x17\xf9S#\xf8\xf2\xed\xdf\xbe\xec\x8c\xc9Z\x9f\xae\xbe\xe5r\xc1N7M\xc3\xbf\x89\xac\xdc\xd7\\\xe0OsAx\xb0\x8d\x9c\xa3[\xee\xd7`\x1a\x04_\xa4\x8f\x13\xffGxX\x1b\x9fO\xbd\xd5}K\x9f\xd8F\xf0A\x16\xd7\x9b\x19\xff\xe1x\xb3\xc86\x82\\\xa8O\x17\x07\xcf\x0dn\x02=\x08r,c\xee?\\\xcfwt\xdb:~T\xf6\x87\x8af\xc6$2o\xa6\x0b\xcb\x9e\xf9\xc6G\xf5\xfe\xa46\xd3\xb7f?\xabi\xe2\xedo\x02\xebh\xb9\xe6\xcfj\xd2\x83\xb51\x0do|=\xb4\xbc\x9fnw\xcb\xd1\xcd\x9f\xef\xbd\x89>]\x99\xbe\x17\xb93V\xc7\x9f\xee\xc3\x84\xba\xb5\x17X\xa1\xe5\xfdtGzQh[\xee/\xa8\xa9\xe7\xcf\x0c\xff\x17\xa9\xb9\x99z\xb6\xf7\xf3\xca~\xd9$\xe4V\xf9\xfa\xcc\x8a~\x952 \x8a_\xa4kg\xcd\xc2\xc5/0l\x7f\x13,\xf4\x99\xb7\xfbYMSo\xf6\xd3U\x9bz\x9e?\xb3\\=\xfc\xf9\xee\x9b\xda\x86\xfe\xf3\xa3in\x1b\xfb\x89\xb7\xffY53+X\xdb\xfa\xe1g\xd5\xccmO\x0f\x7f\xbeN\x9e\x1b\xde\xccu\xc7\xb2\x7f\xde \xa6\xea\x97\x0cj\xd0\xb43,s\x11\xfe\xbc*\xdf\xf9\xe9FZ\x80)?\xad\xc66\xc2\x90\xcd\xfb\xb5>\xfd\x05\xce\x8e\x91\xf6\xcd\xe2\x974\x92m\xb9\xab\x9f\xaf\x9d\x15\xfc|\x139\xfa\xfe\x17q\xd9\xaf\xd1\xe2m\x0d\x7fn\xff<\x1f\xfe2g\xcd\xc6N\xf8\xd3S\xd5\xf7B\x16#\xb9?\xdd>\xc1\xca\xfaEJn\xd6\x81\x11\xcd\xbc\x9f\xd6\xf5k&\x97k\x98zhm\x8d\x1bG\xf7\xcd_P\xc5\xf0\x97D!\xa1\xb1\x0fof\xc6\xd4\x83\x08\xf7\xa7\x07\x13\xa8\xd3m\xcb\xfc5\x9aB_w\x03\xc6\xb7?\xad\xed\xb06n\x82\xa9\xfe\xf3\x8e$<\xac=\xd3\xd7\xd7\x8b\x9f\x9e1Qh\xd9Vh\xfd|\x1fn\xad\xc0\x9a0]?m\xd2na\x85\x06x\x93\x9fn\xa7\xad\xe1\x87\xd6T\xb7\x7f\xcdhX0\xd6\xfc\xe9\x86:\xdeX\xee\xcc\xf8\xe9h\xcb5\x82\xd0\xf8h\x8d\x9aX\xb7\xdb\xfa\xc1\x8b>\xf2\xa8\x89\xf4\x93(\x0c?&\xd2D\x06\xc7\xda\x7fL(\x89\xf4\x9f\x98QI\xed\xdeL\xb7\x7f(\xb9a\xff\x801\x81\xe1\x7f\xa2o\x93\x9b&\x8c\xf8~ \xb9\xb7\x9e\xe8\xfe\xe7\xd3[.k\x9e\xcf\xb0a\"\x93\x1e\x85\x0b\xcf\xffx5\x9e\xc8b\xf8\xfe\xc7\xcb\xd1d;\xadm+\xbcY\xeb\xaeq\xe3|\xbc\x14Jv\x88\xee\xaff\xde\x8e\xd7\xe6\xdf\xe3\xfd,\xea\xb9\xa1\xe1\x86_\xbe\xfd\xdb\x97\xaf\xa7\xbc\xdf\xdd\xbf\x7fw3\x99L\xe6_-g\xed\xf9a\xe6\x7f\xff\xff\xd2s@H\xa0\xee\x7f\xff\xed,1\x0e\xc5\x0b8^5_\x9ca\xcc|\x01\xe2\x8c\xb9\x80\xf9\xc4\xb8\xc0Y\x87]Z\xc2\x86\xed5\xd4\xb0/5\xf0Axi\x1d3\xfa\x12\x85!u\x01'F\xce\xc5\xb9x\x80\\\x9c\xc1qp\x82\xdd\xa9\x1d\xcd\x8c\x0c\xf3\x7f\xff1\xf1f\x87?\xff\xe5\xc2\xd8\xf4H\xb8\xac#\xefpv\xe2?\xbf\xbb_\xa4/\xff\n\xdd\x92\xd0\xf9G\xd8\x0c\xf9\x96\xf9#\xb8Y\x06\xdd\xcc\x8c\xb9\x1e\xd9\xe1\x0d\xac\x94\xe0\xf4_\xe2\xb1\x90X\xd2}\xcb\x04:\x1b\n\x86o\xcd\xff\xf6\xdd\xc5\xf3B\x1b\xfc\x8b\xa5~w\x93\x85\xb2\xc5\xfbY\xa1\x0c\xfa|\xa1\x8e\xe7z\xe0\x97\xfe\x968\x89\xeb\xb9o\x99j>\xffyS\x16\x86>c\x0b\x9d3s\x04\xfcy\x93>\xd7\x0e_\xa4/\xb9\\\x86\xe8\x81\x91\xa1\x9e\xedE~\xf0\xdd\xfd\xe3\xc4fS6\xf3\x87|>\x9f\xf9_\xbc\xc0\xbf}w\xff\x08\xfe\xf7[\xe6\x0f\xf3\xf9<\x85\x9b\xbe~\xb8\xa9\xe4\xbfelVa\xc3\xfd3j\x902\xf5\xe2\x9f\xferJ\x99\xc9\xe5\x8c \xfb\x13Y\x8a\xf9+y\xaa\xc5\xaf\xb7\x95\xb3l\x99?\xe8y\xf6'2\x96\xaee\xacT\xbf^\xe6\xab\xe7\xd9\x9f\xc8W\xbe\x9a/\x7f\x91\xab\x96g\x7f\xa7\x9a]\xc9U.]3\xf36\xcf\xfeD\xc6\xea\xb5\x8c\xa5\xdb+fV\xf3\xec/\xcew\xad-K\xa5\xaf\xa5\x8b|\x15\xf8O\xe4\xbb\xbdZ^\xe1k\xf1\xb2\xc0J\x9e\xfd\x89\x8c\xb5k\x19\xaf\xe4*\xe7\xd9\x9f\xc8U\xbf\x96\xabP\xbb\xd6.\xa5<\xfbc\xe3\xf0\x8fSov\xc3\xb2\x7f\xcb\xfc\xa10a\x7f\xa9\xa1\xa4\x9bzh\x88\xf3%\xf8/u~\xe2\xb3\xf2\xe2\x04\x93r\xa1RH%p\xf4\x95'N\x97\x0b\xe5r\xd9H\x0fa=4|\xdb\x8b\x93\xdc\xcej\xe5z1m\x82\x1d\xc6\xa7gu\xf6\x97.\xc0\xf0\xa7\x91\x7f\x10)\x8c2\xfbK\xa5\x98z\xee\xd47N\xd50j\xec\xef\xac\x0c}\xa2\x07\xa1\xe1\xb3\xd9t\xcb\xfe\xd2\xa7\xd7k\x9be7\x0c\xf7[\xe6\x0f\xd5\xa2\x9e/\x9d\xcf8\xc3po\x16\xfa\xd1\x80iZ\x9f\xdd\xa6\x15,u\xc6\xbf\x81qc\xeb\x91o\xd8\x90\xa8v>\x9d\xd7\x86\x1fX\xba\x1b\x97\x93gs,\xad\xc74\x0e\x81\xe1\xdfL\xec\x88\x154\xab\xcdfF:\xc1\xcc\x9b\x99\xa7\x04\x85R\xbdp\xc6\x0d\x86;3\xf4\xad\x17\xc5i\xf2\xf9\xcaLOwJ0\xd5\x9d\xb5u\xb3\x8e\xfc\xb5\xcd\x92T*zZ\x87mLC\xdf\x9a\xdel-\xcf6B\xd6m\xa5|\xde\xa8\\\xad\x8do\xcc\xbee\xfe0\x9d\xb3\x01w62\\\xd3\xbb \xd9/\xeb\x94\xfam%\xdd\x1e\xdf\xdd\\.\xf3\xb40\x1c\x83\x8fS\xdb\xf3o\xd6\xbe\xe5\xe8>\xeb\xc5Z}2\xcf\x9fw4K\x12\x18S\xcf\x9da\xa2z\xbeP\x9c\x1bW\x121\xe7\xcbFd\xbd\x9e7\x8aW\xce\xeft\xdf\xb5\\\x13\xc8\x95Q\xc1\x95$3\xdd5q\xc0\x9c\xdb\x9d\xb6\xf5\x06V#\x89\x99\x99:+e\xd2\xf4\x03\xf9\xff\x83'\xf1\x82\x10\x8c\x9cN\xebi\x0bx\x02\x13\x1a\xbfZ\xd0\xe7g\x95\x14\n\"v~>\xd5\x0b\xa5\xab\xf9g\x86m\xa0\x07\xa9\x97\x8c\xd2U\x15\xcc\xd1]oHQ\x86\x1eN\x17l\x90\xe4\x8d\xd2\xb4x\xb5\x14+`q\x11S\x83\xfe\xe6Z\"o\x0d\xdbAl@\xce*zz\xd8\xc3H\x90EH\x04-\xc4\x02\xa4\x9b\xa9\xe7\x86\xba\xe5\xb2\xf1\x9e\xb8f\xf3-#\xdcDz\x0e\xb3\x1c\x01\x0c\xdd\x1b\xdd\xb6o\\\xcf5nl\xcb]%\\\xb7\xf0\xc50<\x92\xb9\x99O\xc6h\x12J\x9f\x84\xeeM\xe2B\x18\xcf\x0b\xdb\x0fk\xdd7\xdc0U2\xa4\xbeb`\xf9l\xfe\xb3tI[,wa\xf8\xd65]\xe2\"I\xac\x0f\xc8\xfel\x10\xb1\xa4q\x1c\xf9\x83\xe6&\xf2\xa5\x0dO\x8c\xccw2\xa5Z\xf4sY\x82\xady3\xb7l\xfb\xa3l<\xe3Tw\xa7\x86\xfd\x83\xb5\x12\x99\xd2UJM\xf8\xb7\xf2\\\x19#Wr\xf0<\xc6\xde\x98F\xe1\x8f\xb6y\x9c\xeb\x9ay\xe7\x032\x95#e\x1c\x04\x85o+?3\xe9F\xb7\xc37\x0baT\xbf_\xeb\xee\xec\xc61\xc2\x857\x0b.{I\x04d\xa9\x02\xdf\xcd$\xe80\x8et.f\xba\nK\x1c,\x1e\x0eov\xbe\xbe^\xb3i~\xd1\xa0i&K[q\x96\xf7\xea@\xbe\xccw\x99\x93\x8b\x81\xc3h#\xd5\xd6\"\xaa\xbc\xa8B\xc3\xf3\x1dP\xc5\x96x\x82u\xaeX\x1f\xc7\x1d)\xcbS\x99\xd2f\xc7\xe1\xd4;\x19>\xc5\x0e\x90\xc5r\xd7\xd1E\x11q\xbcuY\x04O\x7fY\x8f\x8bA'r\xb0\xc5\x92\xee\x1b\xfa\xa72\x9de\x99{\xd3(x\xa3\xdfL\xe3\x9c\x15\xd2y\xa7\x91\x7f\x8d\x1d\xdek\xbft\xde\xf7\xe7\x94\xc83]\x18\xd3\x15kq[\x9f\x9c\xb3\x84\x88\xc9/K\x8as]10\x15\xac\xbe\x97\xf5\xb2\x9b\xdf\xcc\nCR;m7\x80\xfdl\xb2\xe3\xaa\xfa\x8a\x15\x17#&\x91\xfc\x1a\xb9\xb3(\xe1\xac} \xc3g\xfd\xeb\xd5\xd41S\\;y\xad\xb4\xd0\nm\x83\xcf\xd3k\xe3-\xb9\xd6\xf8(\xff\xda\xff\x88W\xa1U\x1f`\xeb Tx\xeb\x89\xedMW\xe7\x03\xf6\xb2)O ?5SE\xf2P7\x85\xee\x89\x17\x86\x9es\xcauZ\x84]-\x08r\x9e\x13\xbfh\xdc\xf7\x8b\x9c@\xd7\x1a>\x1cZ\xa1\xe1\xdc\xe8S\xb8,\xb5(\xdf\x04k\xdd\xbd\xd1\xe7\xe1ub\xbe\x16\xe2$T[\x81\xb76\xdc\x9b r F~\xa3b\xef\xd8&\x14\x18S6\xa4\x85\x99\x9f\xa2\x99\x0fT\xfcX\xb7\x88\x1a\xa0\xb7\xfb\xdcdz#\xef\x07~\xfc\x8d\\\xb0\x1f\xf5)\x83\x0d\xbcj\xa7\xdb\xcc\x1d\xb3n\xbb\xca\xff\x895\xe6\x99\x066\x06l+\x08q \xcc-?\xb8\xea\x0c\xae\x15\xee\x1b\xc1\xdas\x03\x83%\xba B=\x8c\x82\x9b\xc8\x9dy\xd3\xc81\xdc\xd0\x98]\xa1\xce\xd2\xc5\xd8I)\x81[\x06>\x95\xed4\xdff\x87\xabN8\xde\xe3xc\x9a\xce\x0e\x1fR\xc1\x1f\x83)[\xa9&\x97$\x9f\x19\x89\x97\xb9>7\xf8p\x03\xfa\x87K\xbb\xc8\xf5\x7fY\xda\xd4s\xd6\x11\xeb5\xe6)/\x9d\xc2\x1bS\xdf\xf6\xf4\x99\xe5\x9a\xc9\xf2\x8d\xb9\xe7_D\xbcb\xcf-e\xfbG\x99Co\xfd\xd9\x01\x08\xd71n\xe0\x1a/\x13|\xcf\x0en\xf4\xe9\xd4X\x87\x82\x02\xae\xc7^g\x9b8)\xf3~L\xfde$\xf9\x8en\xf03mo\xa6\xdbP\x91\x99\xa5\xdb\x9ey\x13a\xf40\xf3\xbd\xf5'\xe7`*/\\\xee\xf8\xdc\xa8\xb9\xc8\xf4\xf1Z\xfb2\xcb\xa7\xc6\xd9y6\xd1\x96\xa9\x96\xba\x1a\xc1]\xc9\x1c\xb3\xf95\xc7r\xc5h\xd1\xcc\x86\x8dK\x0f\xb8\xf4s33\xd6\xbe1\xd5\xaf3T\xf1b\x88c\xa6\x85un\xf4\xb5FJ\xa4\xfd\\\x07\xfeQ8*\xbc*u\x11h\\\x8f\x02.\xf3q\xb7\xb7(\xbf\xd18\xef\x14\xf3\xbe\xe2E\xf9\xe3\xe5\xd1\x95\x9b\xb0\xdbqC\xf5\x03-\x96\xfb)_s\x9e\xed\xady\xfcv\xc9\xac-\xe0\xc2-\xea\x83\xc3\xeb\x0b\xb6\xd9\xd5\xdac\x86\xcb\x05\xd0\xb5\xe0\x81'\x9ey;\x97\xf99p\xab\xf1\xee\x83m\xb0\x10\xe9b\x95~\xba$\xf1 ex)\xfcj\xf0s]\xcf{Z>\xaa\x0ek\xb9\xc3\x1a\xf7i\xdf\xbb`\xfc\xce\xca\xe5\xbdK\xbe\x1fe{\xe7\xd2\xec\xdbY\xbfH_\xc0p\xea\xb9[\xc3\x0f\x8dY\xe6E\xdc\x83\x80\xbe\x93\x9d\x8b\x82\xd0s2mcf\xe9\x99^d\xf8\x87\x8bD\x7f\xfd_\x99\xd3\xd32\xd3 \xc8lo\xbf\xe6\xbf\xe63\xff'\xd3\xd6\x9e2\x0f\xd6\xd4p\x03#\xf3\x7f2\xa6\x15.\xa2\xc9\xd7\xa9\xe7\xe4\\c\xea\xd9z\x90K\xe7\xfbk\x0e\xf5e\x14\x1e\"\xc3\x15\xe3\x7f\xfee\xff\xc5\x05\xfc\xf5\xbb\x9b\xf9k\xa6\xf05C=\xdf7\xa6a&\\\x18\x19\xd6|\x19\xbc\xb37c\xb9\x19\xdd\xb63\x13\xdf\xdb\x05\x86\x1f|\x85\xf4\xc5\xaf\x99G\xdf\xd8\x1an\x98\xd1g\xcb(\x08\x99\x89A\xc6\x9b\xc35\xefL`\x1d\x8d\x0c\xac\x0c3\x9eo\x19.\xde\xeb\x99\x99.\xd8<\x0b2\x96\x0bJ2\x99\x8c\xa6f<73\xb4\xdc\x99\xb7\x0b2\x8f\x0b\xcf52\xba;c\x85Z\xdd\x01\x94\x05v.B\xc7\xce\xc0U\xf5\xc4M\xc7\xdf2\x85\xaf\x85\xca\xdf2\xb9\xbff\n\x90.\x93\xb9q\x02\xbe\x1e\xb2\x8e\xc6\x0d\x9a\xf6-S\xc8\xe7\xff\x04\xc9\x8a\"\xd9\xce\x98\xac\xac\xf0\xe3\xa4\xff\xc9{a\x80\xcc\x1d\xfc\xbe\xbd\xd07\x1cok@\x0f\xe0]\x9f\xe7\x8d\x9f\xf9\xb3\xb7\xb6\\\xb6\x84\x0b\x8d\xd9_N\xcd\xc3&\x186\x0f\xe6\xfb\x96\xc9\xff-6\x1eu\xcb\xb3\x19(\x9e\xf2n\xe6\xcf\x00\xb0\x1245S\xbf9)\xd3\xfd\xd0\x9a\xda\x86\xf4\xdd\xd5\x03k\xc6\xfe\x9d{^h\xf8\xd2w\x17c*\xe9\xbb\xeb\xea[\xe9\xbb\xcb\xfd\x19\x96\xcc\x15~\xcb\xc0\xaa\xe9\xbc\xf8\xe4\xe8J\x0c\x11w&j\xea\xb9\x99\xdf\x16\x85\xdf2\x9c\xee\x82\xcc\xce\n\x17\x96\x9b\xf9\x8d\x17\xf2\x1bK\x0c\xaa~\xe3\x06\xfe\x96\x81\xf8p\x1f\xb2\x01\x95\xa1\x0b\xdfs\x0c)\xd3\xb0|c\xee\xed%\xd0=\xd0\xe7\xbao%\x86Q\x01m\x05F`\x16|\xcb\x14\x0d\xe7o\xa9\x86\xfbZ\xbd5\x9cd\xfbe\x9a\xbe\x17\xad-\xd7\xcc\xf0x\xf4\xf7\x1d\x04\x9f\xea(6a\xdfMx\xaa\xf3\xdc2\xa7:\\\\\x93@\x88|\xd6\xa5\x8en\xb9\x99\xbf'\xa7\xce\xfb\xfdw^\xd8i|jj\xa6\x96*-\xf2\x8d\xf4X,\x18N\xa6\x9c_\xef\xcfu^\xa9\xc3\xc4\xdbg\xf0I<\xa6\x9a\xf7eL9\x83\x85\xb7\x83\xe4\xe2\xa6x\x96H\x9d\x998\x90\x92\x95^\xf8h\xc2\xe9\xc9\xbeo\xa2\xf7X\xc0\x96\xe2\x0cA&\xf9\x14*\x8a\xf8\x96\x81\xfbem\xe3\x92\x15\xaeR'\xbfh\xa7\xbbS\xb4*\x98\xea6\xabN\x8a\x1a\xdf\xe2\xd4\xa4\"o6\xcb\xfcf8\xbf\xc5\xd9x\xa3\\d\x84\n\xafE\xa3\xc3\xd0\xbe\xb8\x0dJJ\xdc\x11\x95\xaceb\"\x14\x0c\xe7\n\xf1=1\x86\xb4\x8d\xadag\x02\xc3\xd1\xdd\xd0\x9a\xfe\xce$X\xf8\x9a\xe4A\xf0\xd3\xa7\xb0\x85\xd1\x04n@f`\xff\x87\x0f\xc0B>nB\x9e\xd7\xd4\xd7p\x12SE\xee\xcc\xf0\xc1\xa9\xa1c\xc9\xd4\xb2 ~\xc8\xd4\xb2 \xf6\xe3\x03\xe7\xbdKwi\x97\x93\xf4%\xa7[\xe3o\x82\x95\xb5\xfe\x96\xf1&Kc\x1a\x06\xef\x0c\x9eDe1\xb4\xce`\xa4w\"\xb5L\xe5\xf6\x06\xcc\xe5\xf3!S\x12,P\xbc\x9cA\xcc\x8c\xcc\xc9\x8c$5\xb2\x99\"e4U\xcat\xd7\x86\xaf_\xa7H}2\xf1\xff\x0d\xd6$\xff.\xa6P\"\xec\xff\x96q=7=\x84\xce\xea\xfd\xed\xd4\xd8)\x97\xfbv\xb2\xcc\xcc\x0bCc\xf6V\x13\x898\x83Ur\x16\xadm\x8bE\xf1\x19\x16\xb6\xb2#VEo\x9e\xf9m\xe2\xd93\xc3\xff-39@B\x97\xb5\x82\x1f\xd9\xd0\xe1\xbc\x97\xab \x7f\xc9\x9cW\xe8{\xae\x99\x984\xe2\xf6@>\x83?b@\x98\x96\xbb8FJ7\xf2\xb5\x96}\xb7P\xb4\xff\nC\xfe\x03p\x0b\x8b\xc3\xa5\xef\xeej2c5\xd0\x9d\xf5\xef\xc14\xef42\xdc\x98\xcc\xcc\x93\xdd\x99\xefY\xb3L\xf9k)\x11\xaf\xcc\xe6n\xd2\xab\xb3\xc4\xdf2V\xa8\xdb\xd6\xf4\xa3>L\x10\x0bkO\xdc\xe2\xb8\x8c\x88\x1c\xdd_\xbdE\x0b\x7f\x98\xcf\xf3\x10@\x089\x9f\xff0\xf6z\xbf\xb3\xa0H\xd8\"\xbc\x08Vj\xf9?\x9d\xeb\x16\xd3\xe3\xb7 \x9a@\x8c\xc4\x8e\xd6\x898j\xee{NF\x9f\xcfY\x18\xe5\x9aW\xc2{P\xf3\x86\x15\x11\x0c\xdah}a\xc9m\xe5O\x7f\xbb\x08\xc7\xb1!\xc4\x93f\xdf2\xbea\xc33L\x00\xa7\x9f\xf0\xf8\x96\x99\xe8\x81\x01,\xc1+\x14D\x13A8\xc847\xf9\xaf\xc5\nDg\xfc<\xb7\"\xf4\xd6p2q.\xf7\xd7\x8c\xeaL\x8c\xd9\xcc\x98\xfd\x03\x05i\xc8\xa7\xd1\xcc\xf2\xa4\xef\xee\xd6\x9a\x19\xdeY\xa4l\xb9\xd0|\x9f\n\xb8\x12%0\x07V\xbe\xb9=+\xe3\x9b\xeb\x85\x7f\xfe7\xb1\xe3\xfc\xef\x7f9+\x0bx;\x1d\xee\x9c\x95\x98rD\xe0\x81\x98\xfb\x80w\x10d,\x97-\x05\xce|n\xa2\x96\x96c\xa6\xbc\x05\x9f\x85\xbc\xd0T1wL\xd1y\x10\x97\x8c\xdd\x82\xad u\xf9\xe6{^\xc8\xabq\x8a\xc6\x16\xd6lf\xb8\x89\x8eox\xbe\xf3\xfb\x87$\x14\x96\xae\x89\xe5\x0b\xab`\xf0\x89\xf5Y\"&I\xaf\xeb\x843\xbf\xea*`\xa3E\xfa\xee\xc2\x05:\xe9\xbb\xeb\xadCF;kXt\xd9\xc6\x94a\xe2~\x85+l\x9c\xb8\xd7\xfc-\x0e\x16\xeb\\q\xee\xfdu\xf5iY\xf9\x06q_\x0d\xcdy\xaf\xb2\xf6{3t\x7f\xab\xd2\xe9\xc5\xc9e4\xfe\xf6\xe0MzIo\x8e\x01Q\xfcd\xa0(\xf6l\xa1\x98\xb0\xf4G4%\x17(\xe9:`/\xa5+\x91~F\xf1\xfa\xec($6V2Ccro\x85\x99Idfv\x0b\xc372\x7f.\xfe%33X\x10q\x082.pk\xe67\x98\xfd\x9c\xfa\x81e~\x03M\xf0|\x01\x92A\xdaw^\x0b\x08,W\xc7G\x023\xa1\xc7\xfd\xed\xd4\xb6\xa6+}b\x1b\x99\xf0\xb0\xc6\xa1\xce\x88\xe7\xdd\xe1\n\xdb4\xff\xc6\xd2\xff\xf3\xf7/\x88~\xff\xf2\xef\xd2\xa9\x11\xc49\xdf\x08\x8c\x90\x9d:AA4q,\x86\xe1x\x16a\xb5\xbe^\x1b\xba\xcf\xba\xe0[\x065\xbe5\x04S\x1d\xe7\x1a\xbe`1f\xf1Z\x9f\xcd\xae,*\x13\xd6\x7f\xfbv\xe3xG~\xcf\x11\xe4O\xd8\x16W\xe5\xddT\xa2R\xef&\x8a\xaby\x99\xea\x1d\x06\xcd\x88\x1a\\\xe5\xed \xf4|\xc1M\xd3(\x10\xe4\x14\xb9\x81\x11\x8a\x88x\xed\x1b[\xcb\x8b\x02\x88\x8a/*\x7f2\xc5\xb7\\\xf3j\xcd\xdfL\x12W\xfb\xcd\x14\xa7:\xa7\x93pn\xc7\xd7\xbf|\xcb\x14\xd6{\xbe\x16\xe07\xdb\xb2\xc5\xe7{\x1bI\xef\xf5\xea\xdc2\xec\x19\xab\xff\xdf\xd3\xad\xf7\xb5T1\x9cL\xfe\xeb-\xfeS-\xa6\xc2\x88\xaba7\xcc{\xd8\x8e\xe7\x85\x9do9\x9c\xcf&\x11G\x9e\xd8\x03\x82\xb0\xdf\x84M\x89\xe8,\xc1\x92\xa5\x14\xf7\x88\xba\x05^f\xc6\x96\xdf\xde\x9a\xf9\x17\xdd72\xae\x17f\xa6z\xc4\x827/\n\x193\xb8,\xc7!s4|/\x03w#\xe1\xf4\x7f\xa3\xbc\xeb\xa1\x9em\x98\x86;\xbb\xdc5\x89\x97\x7f\xe9M\x13\x1e\xed\x8a\xb5Rr\xa5\x17\x87\x1cp\x0d\xe6\xcc\x8d\xf0\x97+\\q@\x89\x01\xce\xe0\x12\x87\x13\xcf\x18\x7f\xe3{\xeb\x89l\x1f\xed']\xdf<\xbb\xb2l\x16\xd1i\x06\xa2S\xd6V\x99\xb76\x15a\xf1\x9c\xdcy\xf1L\xdf\x08\x82\xf7b\xbbd=\xdf\x8c\x83?\xa65~\xb9\xe2dl0\xf5=\xdb\x9e\xe8\xfey\x0c\x95\x8e\x0dN\xdeS\x8fB\xef\x87\xb7\xe1\x12\xc1\xdeY4\x93\x98\x80\xe7\x11\xa1\x98\xfb\xe2\x86\xc54\xd9\xfb\xfa\xcc\xf2b\xae\xff\xc4x;\x1b\x1dW\xda)5\x01#?\xf0|\xee\xc8\xbcy\xc6r\xa7>L\x00\xe8\xc0\x99!$\xfe\x84\xe8\xa9\xab/\xedw#gb\xf8\xc8\xd7\xdc%\x01Y\xdf\x04k\xcb\xbd\x89=\xdf;\xc9\xbd(L'\xc7J\x8bX\xeb\x8d.9_\xae\x9f\xfc`bc\xe8\xcc\x19_,\xf3\x91YO\x0b\xe8s\xc7\x1d\x13\xb4\xa1\xfb\xd3\xc5\xbb\xbe\x97\x8d(\xe0\x93\xf4.)\x96p\xe3\xcd\xe7\x81\x11~\xcb\xdc\x14\xd7\xfbO\x0cdtwb\xf4\xc0\xd2\x1bn\xb3\xbf\xec\x90\xe46\x9d\xe7f\x1c}\x9a\xbc,ta\xff\xa9\xd5\x11\x8ao\xf9?\xef\xa7\xb7s$\xf6\xce\xdel\x8c7\"\xb7_\x12QA'\xe2j\x03V\x1ak\x9fQ\x7fh\x19\x01\xd3\xf4\x1bg\xdc\xdf\xaeu\xe7\xa9.s\xcb6n\xa25\\\xb9M\x0e\xba\x0f\xa2\xaa\xe4B\xe1\x1a\xb9\x8b5\x97\xe6\x86\x86\x8f\xfb\xb0\xbf\xd7\xca\xeb\xfb\xa7\x97\xd9\x1f\xf0\xfei\xd73\xb1\x85zj\xb3\x99\x11\xea\x96\x1d$bT\xc7p\xa332?[\xa1\x7fd\xdb[\x9b)p\xdb\xe6\x99\xea\xf8~\xca\xc4\x92v0\xf5\xaduh\xb9\xe6\xef\xd5\xb8\x1f\xd6\xe0l\x13c\xaa\xbb[\xfd]\x0f\xf7\xf9\xdd\x8b\xb4\x9br\xd6\xb6\x1e\x1a\xd7\xf7*Ds\xdc\xc1\x92\xff\xbf\xb3-\xd2\x9e\x0d\xb7 \xfe\xfdM\xa3\x7f\xd5\xbd\x04\xdf\xa1\xce\x8aJ\x9e\x9b\x19z\xa7=(}\xb5\x03\x887\x0d\xbee\x16a\xb8\xfe\x96;\xbd_\xc1\xf2r3o\x1a\xe4\xe0\xb5\x989\xcc\xdb\x8a\x820\xa3\xf3\xaa\xc1\x89\xcc\xd4\xd6\x03`\x12\xdd=\x88\xb0\x10(\xca\x88\xfdE\x00\x1b?!l\xaa\xc4/\xebd\n\xb1\xfe_Q\xd1_3\x7fO\x87\xee\x81g[\xb3\x8c\xe91\x17\xf1\x9f\"\xd9\x0d\xde\x1f\xf2Fb8\x99L\x8dwM\xbd\x91\x1aNB\xea_\xdd\xc6\xbc\x91\x9b}M\x01\xf1\xdd\xb6\x85W\x8e\xf2\x06\xceP\xdd\xcdL\x8cL\x14\x18\xf3\xc8\xce\xcc=\x1f\x9b\xd9d~\x0d_K\x91\xb1\x82 2p\x87\xca\xf33\x0b\xc3\x86eD\xe8e\x1c}ed\x82\x08\x96n\x96k\x06\xb8/\x1b\xad3k\xc3\x9f\x1b\xd3\xd0>|\x85\\\xd0\x8b!k\x18\xcf\xc5\x8d\x88\x85\x11\x18\xd8\x93\xd0Y\xac73\xfc\xa92\xde\xa5\x17\xfd\x05V\x9fob\x7fK>\x8f\x16\xf9\xf6\x9fgz\xa8\x7f\x83=\xbf\xdc\xda5\xff\xc6b\xd3jY\xb2^H\xb7\xbf\xcb\xdf7MO\x96e\xb93x^\xa8\xcf&;\x84\x1f\x8d\xca#Y\x96\x15U\xb9\xad>0\xa0\xf9\xdao\x0c\xef\xfaO\x93\xe28?+6\x0e\xe3\x1e!\xe3f\xdd\x1a\x0fHk2l\xb8\xe3\x97\x96=\x1a\xf6+\xd3\xa9m?\xb2\x0c\x87\xc5\xfa\xa5\xb1\xc8\x0f\xd5B\xbb\xebt\xb6\x93Ae\x81\xe9+\xe5\xc9\xab\x8c\xff)\xbb\x9cqG\x16\xa3bh\xcf(\xb1\xc6\xc3\xd9z\xb2\xcc[\xb7\xb7QN\xb3\xc8z\xac\xe4\xad\x97\xe3K\xa7\xad\x16v\xbd\xe2\x8b\xa7?/\xaaS\xe7\xe5\xc9XU\x9eG\xa5\xb5?:\xda+mY\xcbj\xca\xbe\xdcu\x17\xe1\xb4Y\xb0gM\xd54\x9a\x85`\xe2\xb6\xab\x86\x92\xb7F\xc3\xfev\xe4\xde\xb5V\xe3\xe5z\xd0WG\xb1=S\xa7\xef<\x0eZ\xde\xec\xae\xbf\xebZ\xb5\xed\xac4+=\xb8\xd3\xe3\x83S?\x8c\x0f\xb5}\xf7iUy8\xca\x87\x87\xa3vxxm\xad\xc6V\xe1h\x0c+\xf9\xd1\xab\x19N\xdc\xf62\xa1W\x1d\xbfv\x96S\xc7\xde\xcd\x9a\xf6vb\x91\xc3\xb89\xaa\x8e\x86\xad\xed\xec\xb5W\xd7,\xed\xd4\x06\xcd\xc2\xee\xe99_\xd7\x9cE~v'W\x1f\x0e\xf5hz\x88\xfbb9)\xe6\xb7F\xb3\xb1{8\xaaQ\x9b\xd6\xc3 \xb4\xcf\"\x9c4+\xc7\xae\xdb\xc9?;/)\x9b'n;\xe2m\x1a\x8d\x8a\xf5\xf0\xa1\xb4XLim\xff\xb0\x94\xb7\xd3B\xbf2m>o\x9f\x9d\x97\xe3\xa4\xf4r\x18\x15_\x06\xe3\xe1h\xa9Y\xa4<\x19\xee\xa3\xe9q\xcd\xfa\xfe\x93\xb6\xa0\x1dS\xb5\xd0\xe9\xae\xfa\xdbQ\xe9%\x1c\x0f+\xf9\xc1s\xaf\xae\xb1\xbe\xa6\x95\x95>\xecU\xdbO}\xa5\xfb4*w\xf2\xcf\xc5N\xfe\xa5\xd1~j4:K\xb3\xd8>\x8e\x95\xder\xb5\xeb\xacz\xe5\xf6\xd2\xdc\xb5U-\xa1\xcf\x8e\xa6\xa5\xfeb\xe2t\xec\x84\xbeuZ_\xefs\xfa\x94\xb52u^\x16\xb3f\xfd\xf0\xd2\xaco'J\xde\xeaa\xfb\x98\xcf\xcd\xc5v\xd6\xac\x1f\xf5f}\xa7\xa9\x1dES\xb4]\xfb\xe9\xd9\xbcW\x0b\x8bQ\xd1\x8e\xe0\x1c]Y\x8f\x96\\\xe3\xfdT\xed7_\x0e\xfa\xeb\xd8\x1e\xab\xe3\xc3\xa4\x987\xa7\xa5>k\xc3\xaa>\xac\x1cg\xcdF4*\xbe\xb4\xfaJ\xdeb\xe9\x1f\x1c{=V\xbcRg9=\xf4V\xbdRg9*\xf5\x8e\xcf\xfb\xf6\xf3s\xb1\xb7l\xd1^\xfe\xf9\xd0Q\xe4r\xfbI\xde\xb5\x97j\xa9=\xd0b}\xe3f}9\x1b\x16\xec\x89\xdbO\xe8\xeb\xa7\xf5\x1d?\xd4\xb7e\xb6?\x94\xae\x8cI6Vi\x1d\xc6\xe5\xf3\xaa\xdf\xc4t8\xef`\x1e>\x95\xcdG\xa5^\x9e6\x1bK\xbd\xf8\x92\xd7\x9a/\x11\x9b\xefSK\xcb=\x06d\x90m\xb6\x19C,\x07\xcf}\xf2r\xb7\xd4G\xdbc.w\xac)\x0f\x81R6\xa7\xcdWk\xa4\xcaM\xa2\xdd7\x89k\xe4r\xf3\xc6z'\x9b;\x99\xd4k\xb2\xde(\xae\x97\xf6s\x8fe'\xad\xfesE\xf5W-\xd34\xff\xf9\x9f\xff\x92\xf1\x8d\xb5\xa13\xdf\xb8\xce\xd8\xc6<\xde\x88J\xd0\xe9M\xa1\xfa\xab\x19\x95\x00\xd7\xf5\x90Q\xe5y-W_\xfc\x0f\xa3\xfe\x0f\xa3\xfe\xa32jW\x19\x1d\xfa\xcb\x85\xdaW\x18\xa3\x8e\x0e\x1f2\xe0\x07\x8cz\xd2\xd7\xfb\x9c\xbe\x7f F\xed=}\xc8\x80?\xc4\xa8\xbd\x8f\x19\xfa\xf7a\xd4-\x1d\xe4\x0b\x1a#\xa3v\xcc\xa8N\xbf\x9c\xabdI\xe3\x91\xcc\xe5v\xc3\xc9\xb5\x89\xb9\xaf\xf5\xe5\xe6\x90\xba\x05Yv\x06f\xa9\xdc\xab\xae\x88r\xdfn\xb6\x15\xba\xd3\xa8\xd1\xd6\x0c\xa7\x91\xab\xf4\xf4\x9dj\xad\xe5\xe1\xeey\xb1S\x97me;\x91\x87\xf6p\xb5}!\xbb\xa8\xb6\xedi2\x91\xd5\x1d\xa1\xebE\xed\xb9:\xcd\x03/\xa9v\xe3i5\x88z\x0e\xa5\x9fb\xe1\xda\x0d\xae\x0f\xce\xa9\x18\x97\x1eg$\xbc\\\x1b1\x0b\xe7\xea\xcb\\\xb9'\x8f\xfa\xaf\x8b\xf5\xd8\x94\xe5\xc1\xf3j\xc3c\xda\xd3\x7f\x8f\xb9@&\x0du6\xec\xf8F\x8f\xf1sO\xd0g\xae\xdck\xef\xf5\xbb~~\xaax\xdb\x87b\xe5\xf8\xe0 \x9b=\x00\xe3\xd6\xcb\xa3Wy\xdb\x1e\x94w\x0f;\xb9\xf6XZ\xecF\xc3\x8e?~\xed\x99#\xe7\xc5\xd5\x87\xe5\xba\x16eo\xb7\x07\xcd\xd4\x87\xbd\xbafO\x0bOO\xa43U;\xb6\xde\xb45\xc3m\xd9\xcf\xa5u\xf7\xa5\xd9\xa9\xea\xc5veL\xb5\x1c\x8cT\x85\xcdb\x12\x8e_\xfb\x8b\x13S\x98u\x8d\x97\xddu*\xc7\xae\x03L\xbce3\x1f\x98\xf9\xae\xef?\x0eZ\xc2c\x8c\x9e^d\xb3W\xac\x1f\xc6\x03\xb9\xf0\xb0\x1c\x85\xa3\xa3\xbao\x0f\xe4RwP\xdew\x9e\xccc{\xf9\x1c\xf0\xd9\xb2m+\xabm\xfbI\x0e\xdb\x8aZm?\xc9\xd5\xf62\xc1\xb4Tc\xec\x1f\x8f\xb2\x93=lD\xe6\xad\xb8mJ\xb3\xd2\xecP)\xb5\x0f\x95\xed\xd4\x99n\xdbO\xabJwP\xdb\xb5\xad\xda\xa1m\x15X\xfepZb3\xb2Q~\x18V\x8e\xda\xe1\xa4\xb7\xdf|9\x8eJ\xad\xf5\xf4\xae\xbf\x9e\x14\xcb&c\xf1\xae\xd3\xb0&\xa5\x97\xfc\xe3@K\xb0%c\x83D\x99\xef\xf5\xc7\xe1\x1f\x90\xa1_\xe5j\xaf\xd4\xb2G\xaf\xfd\xed\xd4\xeeo'\xc5]\xc2;\x12oR\xeao\xa7\xc5\xc5vJ\x89\xd2;\xc8\x87\xb6\xa2\x164\xba\xe8\x8c\x86\x9d\xf5\xc4e\xe7\xcc5\xea!\x9d\xa7\xa7uk\xe2v\xf2\xa3ae9~\xb6\xd5\xc7A\x8b\xe9\x8f\xf4\xa1\xbd\xea\xae\xb4}{\xa9\xe5\xbbO\xd3cg9\xa3\xed\xa3\xba\xef?\x8di{\xd5R\xfaOZ\xbe\xad\x98\xfb\xb6\"\x1f\xdaO\xd3}B\x9f:)v\n\x93\xe1K4SO\xfa\xc6\xcd\x94\xbe\xfc\x87\xfa\xc0\x83\xc6^\xc5\x9e:vq<\xec7\xa7N=\xd4\xee\xb0-\xbb\xce\xdb\xde\xa1\xb7T\x0f\xede\xaf\xd29\xaa\xc5N^;\x82wXi\x87\xde\xaa\xd3h/{\xbb\xae\xa2\xee\xda\x8a\xb6\xef\x1cU\xeb\xa4\xefm\xefu\xd2\xa7}\xa8\xef\xe1xb\xd4\xb31\x99\xd5\x94\xdd\x16\xc6\xa5\xddR\xfb\xc8\xbc\xc9\x88\x88\x9dOFZ\xf6\xc4avh\xd6\xe3\xf16wk\xca]\xee\xb1\xe41\x84\xb12\xc9\xd5\x03y!\xcb\x93\xe6\xc2[\xdf\x0dl\xd2\xb2\xc6\xa4g\xd5\xb6\x0f\xf9\xd6\xdd\xe3\xb1\x9c}\xcc\xcf\xee\xfa\xff\x97\xff\xcb\xfd\xfc\xfa\xfe\xa9\xe7t\x94\x9aw\xaf\xd4\xef\x1e\x8f\xcf\xb9\x8f\xf2|\xfc\xff<\xb7\x93\xe5>\x95eM\x96ME\x1eh\xb2\xbcP\x89\xbcWI\xae\xd6\x93\x87\x8c7{\xf2\x95\xffFD\xee\xa9WpMUe\x95\xc8r\x9b\x9c\x9d \xb2\xa2R9\xaf\xf6eYU\xc8\xa5\xce\xbe\xf6\xd4 \xcfCu\xa0ms\xba,\xef\x14\xb9'S\xb5\xd7\xee\xcbJM\xf6\xba\xee\xd3K\xa1\xf7\xa4\xdc\xb6Z\xc1\xe2\xb1\xb4\x1d\xb4K\x8f\xb9\xdc\xf8S^\xa6P\xfd\x117\xf3C\xb1>\xf3\xb5\xb4\xb7\x1a\x9aE\xf9\x7fb\xfd\xffO\xc7\xfa\x9f\xf5\x04\xe9\x98\x9c1\xec'=W\xb1\x10&\xbd\x17\x8f'?\xeb\xbd\x8e/w\xf6n<\xa8\x0f\xc6\xaf\x9d\xed\xec\xb5\xb5dcil\xb5\x7fY,\xfd\x99\x18\xbfs\x1c\x95\xda\xab\x96\x8a\xbb0\xed\xc2\xfb,\xfe\xf1\x1a\xe4\xa4o\xf4\xa1\xbe_\x16\xeb\x7f\xbc\xdb\xf1C\xb1~_\xf9P\xdf\xef\x14\xeb\x1b\xd5Vi\xc5\x18\xe2x\xbe{\x92\x7fV\x82\xf6\xae\xbd\x1c\xf4\xbd\xd1c\xa5\xb9)\x0f\x1e;\x93\xfe\xf2\xa5\xad\xf6\ns\xdaW\xcc\xac\xe5\xe6\xaa\xd9VAn=\xef\x03SV\x9b\xb2\\*\x10\xb9\xd5\x1e\xe4\x9b#d\xf5\xc1\xf3K\xb7\x7f_\xa1#M{kG\xe5\xd7\xee\xe4\x93\xeekf\xa0\x8d\xb5N\xf3\xb4\x01\xbe\x08\x1d[\xc2\x87\xe4\xa4\xef\xee\xcc\xdaJ\xc9\x87\xdc\xf8\xf3e\xfc\x99\xa8\xabO\xbb\xcd=\xdf\x91N\xb7\x14I\xe2n\x19 \x9e\xbb\x91\xe2;\xe4u\x96\xa9 -\x8a\xd2\xa2$-\xca\xd2\xa2\"-\xaa,\x91\xf4\xdd\x8d\x98 \x1e\xfb\xb1-f\x05;\x9a1U\xb3Y\xe2^Nv\xc8j\xc5\xfe\x05|\xc1~|qS\xa4\xb8zm8\xbae\xe3\x1d\x15)<\xbe\xfb\xe0\xfc\xc4Z\x0f\x82\x9d\xe7\xcf\xae\x9c\n\x8dk\x9a\x98AW\xe0\xc8\xe7\x89\xbf\x9e\xee\xd3x\xf7\x1e\x8e\xdf\xa1\x8b3\xf2\xe0Q\xa5O\x99\xbe\xfc\xa4u\x07\xa7n\xce\xfd5\xf3\xb4\xb0\x82\x8c\x15\xc0u\x98\xb9\x1dY\xb3\x8c\x03\xfa\xc2\x85\x1e2\xdc\x107\x89\xc3\xfdX\xe1\xc2\xf2g\x99\xb5\xee\x87\x87L`\x85F\x90\xb1\xad\x95\x919xQ\x18M\x0c)\xb3\xb5\x1c\xc3\xcb\x18\xe1\x14/3\x0f}}-n\xab0\xfc\xf8\xda\x99\xe5f\x92_}\x83\xab\xcc\xe1\xc2p3\xc6>4\xdcY\xc6\n\xe1QF~ .\xb0|c\x96\xc1\x94\xd6W\x03\x14\xb7\x13\xd7\x81\x0c\xdf\xe07y\x89\x1b\xf4\x99>\xb8g*\xa3\x87\xa1oM\xa2\x10/\xd01}q}\xa0\x9a_\xf9\x95L}\x1d\xf2*\xe2U\xc2\xe0[.\x97x\xe08\x88\xacp\x1a\x04\xb9\xa9\xe7\xac=\xd7p\xc3\xe0fn\x1b\xfb\x1bP\xc6T\x80\x1au\xaf;k\xdb\xf8\x16\x03\xff4\xb3\xb6x\xcd\xe9\x9f\xbf\x7fI\xd78!\xdc\xdc\x14\xaa\xfb\xfa\xf7/\xff\x02y2\xffd\xcd}\xdd1\xae\xe6\xbb\xb9\xc1\x87\xa3\xbe\x7f\xf9\x97\x7f\xcaa:\xcc\xf5O\xb9\x99\xb5\xfd\x97\xb8`~\x15+Ud\xea\x0e\x9aw\x1e;\xf8\xcf\x8b\xach`\xe6\xef\xe2\xee\x93\xf8\xc1\xa6J\xf5k\xb1\xf2'\xbc\x18\x99\xceP\xdf\x17\xaaW2\x14no\xbf\xde\xde\xfe\x89_\x90<\xcbS\xde\x972\x7f\xcf\\\xe4\xb9\xbd^Bi_\xbe\x96\xbaP*}-\x95\xde(\xa1z=O\xb5\xfa\xb5z\xb5\x8c\xf2\xbez\xb5\x8cJ\xfe\x8d\x02j\xfb\xca\xd5\x02\x8a_\xafW\xa2\xb2\xaf]-\xa0\xfaV\x01\xb7\xd7\x0b\xb8-|-\x17\xdf(\xe1\xf6j \xe5\xb7J(\xec\x0bW3\xe4\xdf\xca\x80#\x12\x87WrH\xe9\x93\xc0\xb3\xa3P\xbcN\x1e\x1eA\xc9s\xc1O\x8e\xc2\xd3\xe3+Bf\x9e\xee$%\xef~D$\xbe\xe7\xfe\x04\xf1\x0f\x8f\x00&\x06\xf1\xbf\"\x93\xfd\xe1\xef\x7f\x9c\xf8\x86\xbeZ{\x96\x1b\xde\xb8^\x88/\x13\xfaOnq\xba:n jr>Y\xd2\xb5K=\xa7\x93a\x0ds\xa9\x0b\xa6\x0dh|o\xe6\\\xc9\xc7f\xcf\xf5|\xc9 t%cy_\xc2|\xff\x7f\xf6\xfe\x84\xc9m#\xd9\x17\xc5\xbfJ]\x8f\xc7\x92|\x1bl\x02 \xc8nz\xda\xff#\xdb\xf2Xqm\xcb!i\xb6\xfb\xef\x17\n\x90\x04I\x8c\n\x00\x0f\x00\xf6\"\x85\xdfg\x7f\x81\xdaPK\xd6\xc2V\xcb\xe7\x9d\x1b\xaf=cw#\x7f\x99\x95\x95\x99U\x95\xb5\xa0`mE\x00Sz7\xb30\xc9\x8d `\x9c[\x19\xc7\x16\x05*9\xb7\x95\xc7\x1b\x16\xc0uq\x97\xd9\n\x13\xad\x0b`\xcb\xee.l\x85\xcd\xed\x85-\xac\x85I-\x0d,ma+mf/-\xbe\x8bm\\S;\x17mwJ\xc0:\x9a\x1f\xd2\x9b 2\x9b!\x02\x9a\"2\x9a#\x02\x9b$\x82\x9b%2\x9b&\xa2\xcd\xc5\xdeB\x87g\xc7\nn\x9e\xd5c\xb7\xce\xeaa\x8d\x13b\x0bh\x9b\xd5\x03\x9a&\xc8\x13\xd02A>o\xc3\x84K\xf3\xb4K\xb8(_\xb3\x84\x8b\xf2\xb4J\xd8\x82\xdeF \x97\xe5i\x930\x93\xbfIV\xff\xa7\xb5H\x9c\xb7\xbb\x02n\x90\xf8\xb1\x1b$~X\x83\x84\xd8\x02\x1a$~@\x83\x04y\x02\x1a$\xc8\xe7m\x90pi\x9e\x06 \x17\xe5k\x90pQ\x9e\x06 [\xd0\xdb \xe1\xb2<\x0d\x12f\xf27H\xfc\xdf\xb6A>\xf22\xc0\xcb_\x9e\xff\xf5\xc5\x1b\xf2\xab\xfbD,\x7f\xf9\xe9\x9c\xbe\xcc|\xae,\x19\xbc\xa6\x17w\x967\x05{\xd7\xf9\x7f\xb0 'y\xa5\xd9|c\xe9s\x9c>\xfd\xee\xf9\xf7\xff\xeb\xaf\xaf_\xfd\xed\xd7\x1f\xd0\x9b\x97\xff\xfbE@\x95\xfa}Q\x15\xdd\xb9t\x1dAW~(\xf8\xa1T\xb9\xcc\x17w}Qw\xe4\xd3\x1a\xccEC\x96u\x85\xc4\xd4\x81?\xad\x10\xbaB4]\xe1\x8f\xf0\xf0\x88\xf4\x97\xb2\xc9\x06\xea\xabm_\xd4\xe8\xd8\x15\xe4\xaa\xaeuS\xad\xca:'\xefL\x90\xb5\x0e\xe9^\x05bT\xd4\x15=\xca;\x94\xd7\xec\xd48}#b\x90\xd4\xd4\xc3S\xf2\xe2\xe8xt\xf5kV\x93\xc9\xba\xb9)Z\xf4\x11i\x15]\"B\xf8\x1f\xf4\x13fy\xdd\xb363aW:\xc2\x1c\x84\xa4\xf1x'V\xb4\xb5QEhb{\xa2.V&H\x1do\"\xa9\xa8S=@\x1b\x0b\xcfi\xca\xd01T\xd1\x05?@\x17\x0b\x8fE\x97Gntr\xab\xfb\xed\xd5\x9b\x97o_\xbe\xfaU\x90\xf2\xae`\xcde\xb5CW\x92\x92\x1c\xf1K\xb3)\xb7e\xd1\xf2V\x15\xad\x8b\xba/Zt\x85\xd8/\xf4?\x8c\xd87\x07tE\xd6\xbd\x95\xc7\xa4?\x1eY\xc8\x9f\x8cD\xfb\xe5\xa1h\xfa\x8b\xc27t\xd0#\xdb\xf0\x97P\xcb\xd9\xf2-M\x1fj\xfbz\xe3\xe7\xabp\xab\x1d\xaf\xe9Gt\xad^\x88BW\xf7\x97\xa8n\xd8\xaf\xdfh\x80q\xb0Rl\xf4\x0d\xe2\xebt\xab\x1d\xb1\xd4\xc7\xa1|\xafp\x1d1J\x1f\xed\xfc\x0d\x95$\xa4S\x83\x7f\xfc$\xe9\xb2\xb3\xbeQ\xa43W\x05\x18\xc6.]q\xb7b\x19\xe2\xf4\x8f\x9ff\x19)b\xbe\x19-\x13\xd6\x03\n\xcf\xd3\x0e\x8d\xb5\x0e\x9f\xfbC\x03\x00\xd1\xce\x98\x96\xd37\x07\xb6\x86\x80B\xca11\x8eXP\n\xa2w\x81\xd2\xa2>\xb1 #,\x94\x82\xa8[\x83-\xe7*\xc8\x88\x10\xa5\xa0\xc1\xb5\xdcv\x9fX\x90\x11,aK\x1dF\xb8Tau\xf6k\xe2\x88\x96\xea\x0f\x0b\x96\xea\x8f\x8a\x95@\xb3}b\xa8T\xff\x15\x91\xa2\xa4\x0fc\xa0\xe0\xb0\x1a\xfb\x15q\x04\n\xfe\xc3\x02\x05\xffQ\x81\x12h\xb6O\x0c\x14\xfcY\x03\xe5\x91s\xbbW\x7f{\xfb\xf3\xcb__\xbc\xb9\xfe\xfc\xf3\xa1 \x7f\xc9\x1eze\x91\xa4\xae\x1c\x11\xc9\xaf\x86\x80/8*WL\xca\x9cS\x19?=i\xe2\xc2E\x901\xc1\xa2\xa1\x04\x93T\xb0\xb1\x18jJ\xecS\x8diz\xd2\xac\x86K\xa9NV\x15\xe6pkZ\x9d\xa2\xa8\xd2eq\x19\xf8d=a\x0e\xb7\x9e\x18\xd4\xf3\x91[\x0c\xfa\xee\xd5\xeb\x1f^\xbc\xa6\xcb)\x81\x8b\x0f\xe4\x94Gw~mN\x9a\x10Z\x91\xa9\xcb\x00\xb8\xb6\xcc\x98\x10\xca\xd1\x15\x92f!=\x9d\"\xf1?\x87\xb9\x944#\xe2\"\x87\x8e\x8a?\xc1Cs$\xb3\x1f\xfawM\xdaq]\xfc\x01\xcd~\xe8\x19\xf3a\xfa\xaa\xdc\xd6\xc4\xfc\xcf\x1e\xf2u\xa3\xc3\x1dw\xea\xaa\x1fY\x86\xd1\x08d\x1b\x08\x00k;\xb2\xd2\x01\x06d\xa6$\x80}5\xb2\xb3q\x03\xe4g4@\x00\x1e\x05\x90\x01\x01d'\x14\x80\xb96LE\xef\x91U-\xc5{\xb6\xd0\xbem\x95\xb3\xc5\x95\x13\x9d\xa0p\x9d\xec\x07\x85\xfbA\xaeP$<\xd0\x1b\x8a\x8c\x078\x04\xb2\x9c\xdd'\xa1=\xf8*\xa7\x0bL\xa7:\xa4\xfa\x14\x7fT\x9f\xea\x8e\xea\xd3\xbdQ}\x9a3L\xa3=\xc4\x17j^\x9dG\xf8!\xae\xc0\x9f\xe2\n\xfc\xa9\xae\xc0\x9f\xee\x8aO\xeb\xa8\x00\xa3y\\\xf1\xc8#1\x1d\x88\xd1\xf7\xaf~~\xf5:dw\x03\x1e\x8d\xbf#\x7f\xd2k\xda:\xb4\x16\xb7TlP\xdf\xf0\x93\x89\xfd\xbe \xb7\x8f\x11\x86\x15c`\x97J\xac\xf2\xb3U\x7f\xb6Z\x9d\xad\xda\xb3\x15F\xdb\xe6H\xbf\xca1\xf0\xbcce\x91\x0f\x95lKr\x9d \x91\xf1\x96 T\x84\xa1\xd5\xbd\xb8\xb8\xec\xb6\xc4\x98\xec\x05\x8c\xb7\xe4\xd1\xeb,\x18\x07\x91\xd27\xf4\xbc&\xa3\xac\x8f-\xc9\x98\xc9-|\x84g2\x14$]\x80\x91\xb7\x059\xf1I\xd0y\xc7\xee\xda\xa07f\xde7Gv\xeaR@\x88\xa0\xbc\xde\x08-\xa9\x8d\xfaf0\xd1\xa6\xdcn\x8b\x96_\xa0\xa1e5FR\xa3\xe54\x11\xfb~U\x9dW\x05\xbaBE\xbe\xde\xb3Z\xde0g#B*;\x94\xe3\xaeA\xb9\xa2\x02\xa1I\x13\x8bU\xc4\xaeC\xf9\x88\xd8\x0f\x0bA\xe5\x13S$\x0e\x07l]\xe4\xad\xc4\xa0aG\xaa`\xd8\xe4\xed{\xfa\x1d\x9c\x8f\x80pA\x15\xf8\xaa\xdcHp\x1d\xcf\xa9\x02.A\x01\xb8\x02\xedJL\xb7y@(\xa5\n0\xa6\xfd\ng\xd1\xc02u\xd4\xbcij{M\x05U+B0\x80E(\x0c\xc4\xba\xf4= \x9b\xed\xa5\xabnV\x91\x84\x85jf\x0cRWa\x89\x11N\x13\xf2\xe9\x038F8M\x03\xc31\xc2i\x1a\x18\x8e\x11N\xd3\xc0p\x8cp\x9a\x06\x86c\x84\xd340\x1c#\x9c\xa6\x81\xe1\x18\xe14\x0d\x0c\xc7\x08\xa7i`8F8M\x07\xc3>\x17D\x1dn\x89\x91\x91*\xc5\x08\xe9\xd3\xdbbcv\x9b\x9c\"\xa4\x83(\x19@{A\x10&H\x02\xdc\xb4\xe4>C\x03I\x9f\x0b\xd8\xae\xc1\x80\xb8\xf1F\xb1U\x14\xdd\x17\x187\xb7&\x88>\xd7\xb4\xb3\x81e\xaa`a\xdfO4\xc0\xf4\xb9&\xd9\x06\x96\xa9\x82\x85\x18\xf7P\xd6\xef-v\x1fH\x02\xbcoz\x0b\x96SF\x8dA\x98\x02a\xfa\x80\xc0\x91\xa6jJ\xbf\x05\x08\xabJh\xa3\xbf`\xa4\n\xe2\xc3%\x08\x95\x88\x82\xa1\xceo\xeeM\xe4\xf0T\xd5\x93|\xa0\x1aVs I\x0d\x05\xc2)\x10\xaa\x06\x0c\x1ci*\xbc\xe8\x9c\x1c\x9c,\x98n\xf3n_l,,\x12Qg\xb0XN\xa6\xea,\xb6\xb8W\xc8:\x13\xd8\x94G\x9a\xd4\x8d\xa8\xeb\xd8\x1a\x87\xb1\x86\xbd\x8a\"v\x91\xa8\x01\x16\x17\x8c\xfa\xd73\xbf\x1c?i\xb0D\x11\xfdhew\xdf\xf5Eu\x86\xbe\xc3e\xfd\xfe\x97|\xfd\x86\xfc\xfdcS\xf7g\xe8I~S\xd4eK>\x04\xf4\xe4\x0c\xd1\xbf\xce\xd0\xbe\xc07E_\xae\xf33\xf4D\xfc\x8e\xea\xe2X<9C\xc7\xd5\xb1\xee\x8fg\xa8mVM\xdf\x9c\xa1\x9a\xfc\xfbIW\xec\x9a\x02\x1d\xcbAL[\xe6\xf8L\xfa\xbc\x82\xf6e[\xa2\xdd\xaeh\xda]\x99\x9f!\x13\xb1n6\xf4\x84K\xd7\xe0\xbc#\x9f\xca\xc9\xd7\x8d\xf4\xc9\x1c\x05->\xd7 >i\xb9D\xf3\xb6\xa8,\xa0\xee\xb8\x1aq\x99\x1d\x17/Qj\xa7&K\x94L\x12\x07{\xbaD\xf1\xc4A\x9f\x0dt\x97\x80l\x89b;u\xbeD\x93\x8b\x85\x83}\xb1D\x13\x93\x8e\x8b\x9e\xde\xb2\x9c\xaf\xcbz\x17\xf5%9\x99\x18M\xa6\x99\x1b\x18/\xd1$vC\x92%\"\x1f\xa2Q1\xe3\xe72\xe8\xb5\x00K\x14[\x01\xe4sZ\xd4,V\xcc\xba9\xdc\x13\xcb*\x88\xaa\xc8\xbbc[,Q:\xd5\x14`\x94\xa8\xce\xdb\xb6\xb9]\xa2\xc4\x06\xb8-\x87\x98Kg\x1a\x99\xd7\xaen\xc8\xb6\x02H+\xee\xfa6\xa7K\xae\xc4\x06\xba\xd19\x8e#\xac\x00\xbaH\x08\xf8\x9d\x03\xc8\xca\xd5\x12%6:\xd5\x84\xa1fn\x94\x82\xbd\x08\xc1*\x1c\xb1\xd1\xc48\xcb\xe0\xa2\xa8+\x0ey\x9b\xf7C\xf7\x15O\xf4\xa8`\xbe\x8c\x81\x9a2R\x02T\x92\x91R\xa0f\x8c4\x03*\xc2H\x19\xa41Y\xa4\x02\xd5\xa0\x14H\x0bJ\x81\x94\xa0\x14H\x07J\x01U\x10\x07gA5F*\xa4\xcaH\x85\xd4\x19\xa9\x90J#\xd5\xa3\xd6|\x89RG\xc9\x8b%\x9a9\x84_,\xd1\xdc\xa1\xd9\xe5\x12]\x1ae\xb3\xc1\xaf\xcd7\xe5\xb1\x03\x1b\x9e\x8a }\x93\xd9\xeaTP\x02\xb6L\x15\x93BmS\x85\xcc\x00'\xa9\x88u\xd9\xae1\xfbr\x90\x03v(\x87\xae\xe0\xf2\xf2\xf2\xf2p\x07\xc1\xa8}\x1c\x95\x17A\xe3\xa8\xbb\x08\x1d{\xd5E\xfcXk.b\xc8Vq\x11FF\x98\x90\x97\xdd\xf7\xf9\xa6\xb9\x1d\x14\x9d\x1e\xee\xc8\xffg\x87;\x94\x1c\xeeP\xbb[\xe5O\xd1\xf4\x8c\xffo\x92\xa0g6\xf6dd\xbfx\x00{\xba$,\xc9\x03K\x9f\x8d\xec\x17L\x8bS\xd8\xb3%)uv\x12\xfb01\xa5\x9f\xc9S\x9e\x8f\x0b\x94K\xf4\xa78V\x07S\xb1\x18\xb9D\x7fJ\xd3Tmtl\xe1q\x89\xfe\x94e\xea\xe8\xc9\x1e/\x16\x0b\xe51]\x1d\\\xa2?]^^*\x04y\xf1p\x89\xfe\x94\xe7\xb9Z\x12_(\\\xa2?\xad\xd7k\x80\x95\x11\x8b\xa20\xebFVm\x96\xe8O\xdb\xd9\xf0\x8fB\x17\xa4\xad\x9a.J\xb9\xb4\xf2\xfdQ\xd3\xa0\xd1\xe5tIm?=\x1b\xfe\x99\\\x02V\x8f.4\xd0\x05\x04Zh\xa0\x05\x04\x9ak\xa09\x04\xca4P\x06\x81f\x1ah\x06\x81R\x0d\x94B\xa0D\x03%\x10(\xd6@1\x04\x9af*h\nj>MtX\x02\xe3b\x03\x18\xebH\xbe\x8a\xcbpI\x96\x9d\xf1\xff\xeb\xae\xe4k\xb8\x10\xf4\x02\x82.@\xe8\x02\x82\xceA\xe8\x1c\x82f \x14\xac\xd6\x0c\x84\xce h\nBS\x08\x9a\x80\xd0\x04\x82\xc6 4\x86\xa0\xc2\xf5\nT\x0f\x00\xb1b\x0b\x82a\xe7Ja\xa0\xc2\x8d`\xe0\x8bqCO\xb2\x98\xce\xa6j\xa7@ \xdb\xed,N\xe7@\x17\xc4\xc9\x8b$S{(\xba\xd6Fh\xf3T\xeb|w\x0d\xa6\\\xab\x85F\xa1k\x05\x84\xb6\xd1i\xf22\xda\x80Xm\xe3\\\xedP\xe9B\xd8\xd03\x17\xc9:\xd7'?\xe3R\xd9\xd0\xd9\xce\xe6\xe961\xedp(\xebaD\xd8d\xd3\xe9\x85j\x08\xbe\x1e\xc6\xac\xb1R\xfbTA\xb9\x98\x82]\xb5\xa0\xe7\xe9fa\x16K\xd6U\x86\x91(],2U-A\xba\xcc/\x173@4\x07\\\x16\xc5j\xad\xea\\\xe77\xf7d\xf0\x8bW\xb3\x99Y\xea\n\x1f\x0bB\x9e\xcd.\x0b\xad+!\x944[\x14\x9b\x0dP&\xa3_\xce\xd7km\x10QV\xa3\x86\x91kS\xe8\x10i\xf5i0\xc9|\xbb\xdd\x16\x10\x80W\xac\xb8\xd8n\xb6\x19\x84\x90\xc2e\xbb.V\x10\x84\x07\xe8f\xbbQ\xb4\x08\xda'\x07\x8f\x03-\xd1\x93nMV\xc9\xf2z\x83\x9eVe\xcdw\xe9\x87Y\xf3\xb3'\xaa!\xf5\xa3+\x1en\xf6t|\x0dp\xee\x94\xc9&\x916\x91&\xb3|\x06\xef\xef\xcf_\xbf|\xfe\xdd\xcf/\xc4\xa5F\x9f\xe7h\xc1\xeb\xe7?\xbc\xfc\xdb\xc9G\x0bX\x82\x7f\x0e\xed\x8b\xb7\x08\x89\xadq\x86\x83w\xc8\x11\x9a\"\x82\x9d\x9e\xd3\x83z\xe4YL\x9f\xc5]\x8f\xba\xbe8\xa0\xb2&\x9f\xb6\xe6\xe4\x84\x92\x93z\x03\x92SJN[\x98<\xa3\xe4Y\xbf\xd7\xc9\x04\xf0s\xd9\x17m\x8e\xd1M\x8e\x8f\xc5x80\x9eN\x07\x8d\xa6\xd3?\xf3'\xc3\xc4\x06]\xb1\x99\xcd\xf5\x1fs\xc2\xb0\x9d\x1a{\xc4\xd4\xbaK\x04\xcc&\x11?\x86\x13\x87r\xc5\xdf\x08\x9e$\x94'\x19y\xd2P\x9et\xe4\x99\x85\xf2\xccF\x1e\xe2\x8d\x8f\x01\xdb\x00\x01H~\xec\xf6\xf0\x10\xdd\x83\x9b\x03,\xfc3\xb5\x06\xf5\xd4s;\xe5\xef\xf8\x9d\xd6\x18\xc2\x98\x94\xc6\x10\xc6\xa24\x860\x16\xa51\x84\xb1\xe8\x8d\x01?\xb41\xe0\x876\x06\xfc\x80\x80\nk\x0c\xa6\xe4\xc7n\x0c\x0f\xd1=\xb81\xc0\xc2?\xb51|\x9e\xa9\xe1\x9b\xb7\xff\xfa9\xe8N\x1d\xf8\xd4\xf9\x0f\xc5\xa1\xa87\xe4zZ\xf9\x1cx\xd5l\x8e\xf4\x03\xc4\xf2\xd1qh\"9\xce\"\xd9\x051\x84`L\"#\xdaz\x91x\xdf\x8b=e_\x8f\xbfb\x9f\x91\x1f\x9f\x93\xa5\x87\xe19\xf9E<\xa7o\xdf\xa1+\xfar\xc0g\x9d\xd4\xa1\xf1T7\xd3R\x7f\xcd\x80>\x16\x87f\x98\xce\x06\x8a<\x16(\xf6I\x02\xa4\xa1\xa4\xb7OW\xccX\xd2!A\xe5\xbd\x86SRp\xae;\xf4\xf2\x90\xa4>\x83\xd2\xf5\x1e\x08:\xd6\x81B\x89\xbajRkT\x84\"\x07\x9dy\xd2l\xa9Mp\xde$jc\xbe}c\xab\x0c\x80\x84\xebR\x05V\xa5zXM\xd41OT\xc4|w\xc5V\x11\x00 W\x04\x07V\x04{*\xf2y\xfa\xab\x7f\xbc\xfc\xe1\xedO\x0f\xef\xaf\x94\xbe\xe7v\xec|\xc8j\x9d}\x05\xeb\nM\xd9\x95\xdc\x14\xcf\x08\xb1\xb6\x86%\x0b\xd3\x16\xb4\xd4\xd5,+0\xd5\xd6\xb5\xac\xc0\x99\xb6\xc2e\x05f\xe8\ne\x1e\xe0g\xec\x05y'x;\x1d\xe3\x8f-\x8d\xaa\xbb\xee\"t&\xab\xdb\xd8\x83\x8d90\xf1\x00\x13\x0eL=\xc0\x94\x03g\x1e\xe0\x8c\x033\x0f\x90\x1f\xc3\xa67\xce\x15}G\xc6\x83\xc9\xaa\x8f$KH\xaf\xd5\x99\xd6\xa0\x05\xb52^y\x8f\xce\xc6\xb1\x929\xd4\xf7\xe6l,Xf\x91\xdf\x94\x83\x19\x82\x87\x8f\xdb\xa92\x1a\xb8\x1dO\x18b?\xc3\x98\x92\xdf&~\xf4\x98\x8d\xdf\xa6~\xf4\x98\x88\xdf\xce\xfc\xe81\x07\xbf\xcd\xfc\xe8L\xa0\xfbhj\xbc\x91\xec48\xcd.\xa7\xc0\x8b\xc8^\xb6\x95\xc6\x16\x12\x10\x88\xbcV95\xdf8vr\x05\x0f\xc3\xb7SyX\x0d\n\n\x1f^\x89 \x1fX \x1fX\x89\x08\x1fX \x08\x1fX\x8d\x87\xea\x01\xe1`\xbc\x07\xed\xe5Z\xa9\\\xa7\x04\x83\xfe\xc2\xf3\x03cAMdn\xa7rb\x12\x14\n>\xbc\x12\n>\xb0\x12\n>\xb0\x12\n>\xb0\x12\n>\xb0\x1a\n\xf8\x01\xa1`\xbc\x87\xed\xe5Z\xa9\\\xa7\x84\x82\xfe\xc2\xb5/\x14\x1e7\x15\xfc\xee\xd5?\xa37?=\xff\xe1\xd5?\x86\xbf\x02\xb3@~\x84\x8d%\x82\xaed\x07Ju\x8cD\xc72\xd9\xe3g\x04\x89\x81x\x99\xc42\xe3\xf9A\x9aA\xf0\xe3\x80\x0ed\xa2 S\x072U\x903\x07r\xa6 3\x07\x92'0aC=\xaf\x1c\x1f3\\u\x1f\xe1\x89\x1b\x9eh\xf0\xd4\x0dO5\xf8\xcc\x0d\x9fi\xf0\xcc\x0d\xa7\xf6\x08\x1d\xe4\x84=\xaa\x93\xcc\xe1B\x9b\xd6p\xa1Mc\xb8\xd0\xa6-\\h\x9f)\x94>^X\x02\x9fd \x17\xda\xb4\x84\x0bmZ\xc2\x856-\xe1B\x0bK\xd2\xdb\xe2\x11b7\x9bLh\xda0\x1d(\xe4\xd7\xa5\xa0\xb0\xd4\x80N\x11{v{<\xa1\x90\xd1\x7fJ\xa4ar\x87<\x12W:\x91\x92b\xb5\xa4\xb8-*\xb9\xb0X.l$\xb2\xf2b\xa9\xbc\x91H\x8a\x8c\x95\"\x05\x91\x95\x9a\xa8\xa5&Z\xa9\x89\\j\xa2\x97\x9aH\xa5&j\xa9\x89Rj\xa2\x95\xaaW6\xd2k\xabV72\xea\xabT8\xd2j\xacU9\xd2\xeb\xacW:\xd2k\xadV;2\xea\xadT<\xd2j\xaeU=\x92\xea~]O\xf8\x97\x08\xa2hKN\xdf\x0c\x01(}\x8a\x80\x95I\xff\x18\x03h\xf8\x0b\x8b\x0f\x0f\x9c\x90j\x90\x10\x1e\x9a\x81R\xe3)\xef\xb7iL2\xba\xd0Y\x90Y\x98S\xfa\xc7Q9F\xe6\xb1N\xe8z\xbc\xb3\xc2c\xa3p\xe1\x0d^~\xac\x97/#X\xf0k*\xc8\x08\xde\x024-d\x08 tC\x91DW$\xd1\x15I\x0cE\x12M\x91\xc4T$\xd1\x14I4E\xa4\xfa\x9a\xe1/\n\x12\xf51\xdb\xc0X\xd4\x98B\xea\x0d\x81Wi\xb4\x9c\xd9\x1a\xb8>\x89\xa9\x8fYqQ-\xb3UH\xfa$\x9a>\x86\x89G\x03\x9a\xed\x03!\xaduD\xe3\xc1\x91\x87~S\xee\x84,\x946\x95\xca\xddR*wC\xa9\xdc\xed\xa4r4\x93\xca\xdbJ*o#\xa9\xbcm\xa4r7\x91\xca\xdbB*o\x03\xa9\xbc\xed\xa3\xf24\x8f*\xa4uT\x01\x8d\xa3\xf2\xb5\x8d\xca\xdb4t]\xc0\x96Q\x054\x8c\xca\xd7.\xaa\xe0fQ}\xd6V\xa1LHh\xa3\xc0\xeeF\x81\xdd\x8d\x02\xbb\x1b\x05v4\n\xecm\x14\xd8\xdb(\xb0\xb7Q`w\xa3\xc0\xdeF\x81\xbd\x8d\x02{\x1b\x05\xf64\n\x1c\xd2(p@\xa3\xc0\xbeF\x81\xbd\x8dB\xd7\x05l\x148\xa0Q`_\xa3\xc0\xc1\x8d\x02?N\xa3x\xec \xdf\xcf/\x9e\xbf\xfe\xf1\xe5?\xc9\x1f\x9ey\xde\x1a\x17y\xbb-\xef\xd4O0\xfdZ\xae\x1b\x9cw\xe8\xaf9\xc6\xf9n_\xb4\x1d\xfa\x9e\x01\x111@\xd9\xd0\xa2^\x17[1\x95\xac)\xd3\x8e\xf3\x90O\x1bW\xe5\xbam\"^J\xb4\xcf\xd7\xef\xcf\xf9Z\xdcz\xbb\\\x15\xdb\x86|\xaf{\xf8#\xdf\xd2\xaf\x98\xac\x9b\xba'/X^\x7f\x81\xae\xbf\xf8\x06m\xca\xee\x80\xf3\xfb%\"\x1f\xe2&\xaeP\xe0\x83prc\xfa\x9e\xd3\xc4\x89\xf6\x0f\x0di^\xe4\xf9@\xc1#\x1e\x93+\xcf ^\x92B|\xc7\x1e\xaf@\xe1\xf5\xf8\xf4\xe4\xe3\x1akv\xdaWWa \xb5\ni\xd4c\xa0\xad\x14\x9aPf \xd5\n)\xe0\xa0\x82\x9a\x80\xac\xe9aKX\xa1\xca\xaeOeU\xa7:I\x1b\xf5\xbbE\xf4\xb0\x1b\xac\x0c\xb6+\x83\xad\xca`X\x99\xc7mp?\xfe\xfc\xe2\x9f\xdf\xbd\xfa\xe7\xf5gY\xb8fme\x8b\x8b;\xf4ql\n\xc3\xdf4 \xe9\xe7\xbb\"\x1d =f!z\xfe5\x8a'\xe8\xc7\xf2\x8e\xdc\xbb\xf9\xfd\xbem\xaa\x02\xcdfhu\xdc\xd1\xef\x94\xf3/\x93\xaf\x9bM1\xd95\xcd\x0e\x17\xa4\x0d\x1f\xce\xd7\x03\xb8\x8f\xe5\xe7\xc9\xf8<\x91\x9f\xa7\xe3\xf3T~>\x1b\x9f\xcf\xe4\xe7\xd9\xf8<\x93\x9f\xcf\xc7\xe7s\xf9\xf9b|\xbe\x90\x9f_\x8c\xcf/\xe4\xe78\xef\xfa\x91t9\xfc\xf0\x8a\x13W\xee\x86^n\xca{\xbf\x1d\xb9\x95\x8b\x19`\xa4\xc7*=V$t\xfb\xb6\xac\xdf\x8f2\xe8\xdf\xaa\x14\x86\x89u\x0c\x97\x14\x96\x1a\xd2\xe1\xa4\x03\xc7x\x84\xe4Q^C\xe9\x03=\x975\x0c\xba\xd2b\xd6\xd6\x1c\x8d\x1d\xe3\xb1}DFr\x19\xe3\xd9\xdf\xad:,s\x00\x1b\xa1\x04\xc420s\xf8\xe0\x0f\x10\xcbGf\x0e$C\xe6\x88\xd4\xc6\xe6Q=\x10'\x8d\xce\x8a<6\x1e\x82r\x95\xc1R\xab\x9d\xc9\xe7\x1e\xa3\xe5\xda:y\xf5Az\x88\x83q\x90\xa6<\xaeAZ\xe0\x8bzcC\xf3\xeeN`\xe5O\n\xda\xc6i\x01\xe6\x83\x17\x00W\xc65Is\xd2?\x01x\xb5\xe7BH\x1a\xb2e48ds\xb4VO`\xc8\xe6H\xb3\x96\xc6\xa8\xcd\xa1P\x1d\x81\xa1{\xd4\xd8\xa8!4|#\xa4\x0e\xe0\x14\xef\x1b\xc1%.QW\xf7\x10.q\xc8uv\x0d\xe3\x12\x0b\x1b\xaf,<\xe6\x98&\xb1\xd2a\xcb\xc9\xa9\x8c\xe7\xec+\xb4bD\x97\x0d\xe80\x874\xa8\xdb9$c\xa8\xa3:\xc8\xa2\x9aB\x1b\xd9A\x0e\xd0\x10\xea\xf0\xee\xe0\x93\xcc\xa0\x18\xc1\x88#\xcb(\x8f\x10\x1f\xe7)X\x19\xea\x051V\x88\xb1JL\x14b\xa2\x12S\x85\x98\xaa\xc4\x99B\x9c\xa9\xc4L!f*q\xae\x10\xe7*q\xa1\x10\x17*\xf1B!^\xa8\xc4!)P\xe8r^\xc0\xbb^\x9a\x19H\xbd\xae\x9c\x1c(\xa0\xd8\x00\xc5\x9a,\x9e#H@5M\xd0\x801\x00\xa42\x7f\x0fZ\xb2!\x8cUH\xa2P\x05\xe7 \xd5\xe7O\x13*o\x96P\x85' \x95g\x06\xaf\x8c\xebUX\x9aP\x9d\x96%\x00RC\x92\x04{%\xbd9\x02\xc4\xeaI\x11\xaaS2\x04\x18lK\x10\x0c\xb43?0\xd0\xee\xf4\xc0\x80\xbb\xb2\x83*<9\x00\xa1\x96\xdc@\xc7\xbaR\x03\x1d\xeb\xcc\x0ct\xb0'1\xa8N\xcf\x0b\xec,\xf6\xb4\x00\xe4qg\x05 KHR\xe0`t\xe7\x04\xd5\xa9)\x81\x8d\xc1\x9e\x11\x00\x1c\xee\x84\x00`\x08\xc9\x07\xacl\xeet\x00b\xb3e\x03\x95#\x19\xa8\x1c\xb9@\xe5H\x05*G&P9\x12\x81\xca\x91\x07T\x8e4\xa0rd\x01\x95; \xa8\x82r\x80* \x05\xa8\x023\x80*0\x010pb\xfc\x0f\xd9&!\x9c8$\x01\xc0\xc1 \x00\xfe\xfc \x00\xf6&\x008<\x01\x80\xa0\xe0\xe0\x8f\xc3\x06\x7f|\xda\xe0\x0fH\x0d\x19\xfc\xed\x15\xf4\x0e\xfe\x96\nk\x8b\xf8\xda\xf0\x8fO\x19\xfea\xb0m\xf87\xd0\xce\xe1\xdf@\xbb\x87\x7f\x03\xee\x1a\xfeq\xf8\xf0\x0fB-\xc3\xbf\x8eu\x0d\xff:\xd69\xfc\xeb`\xcf\xf0\x8fO\x1f\xfe\xed,\xf6\xe1\x1f\xe4q\x0f\xff K\xc8\xf0\xef`t\x0f\xff\xf8\xd4\xe1\xdf\xc6`\x1f\xfe\x01\x0e\xf7\xf0\x0f0\x84\x0c\xffV6\xf7\xf0\x0f\xb1\xd9\x86\x7f\xec\x18\xfe\xb1c\xf8\xc7\x8e\xe1\x1f;\x86\x7f\xec\x18\xfe\xb1c\xf8\xc7\x8e\xe1\x1f;\x86\x7f\xec\x1e\xfeq\xd0\xf0\x8f\x03\x86\x7f\x1c8\xfc\xe3\xc0\xe1\xdf\xc0\x89\xe1\xffq\x0f&\xa0\x1f^\xbe\xf9\xed\xe7\xe7\xff\xa2\xbf\x87\xbc\xf6\xc1\x92\x85k\xe3\x0d\x0erU\x8bB\xd4_\xd2 \xffR\xae\x7fY\xb1'+\xdc\xac\xdf\xd3G\xe5\x8a>b\xb9\x88L\xe9\x15\n9\xeaC)=\x13#?ZK\x8f\xa2u\xc1_\xb3\xe8[\xf9y\xdb\xdcrx\x83%8\x19pG\xcaN\xa3\x0c^>\x1e\xae\xff\x80w=6\xf5x\xf5&\xfd\x11\xc9\x9aH\x91&\x9b\xd2\n\xa2\xb6b\xb0\x95\x15F\xac\xcc\x85\xe90==T\xc0\xbd\x07,\x1d\xc8\xda\xe8X\xf0\xd8\xd6\xa6_\xdbD\x8e\xbe\xe4PrR\xe3\xa3\x15*NkP$u\x1b\xc5\x9bHJ\x15xv\\\xe4\xa3E \xe9\xc8\x88\x00\x0b\xf9 X\x92O\xdb\x1fBo\xf7e'}_w\x00\xa3\xbeA\xdb#\xc6\xec\xae\x92\x9c~\xf2\x97DZ\x8e1\x1a*\xcfXV\x05*\xfe\xf3\x983$\x8d\x98A\x97h[\xde\x15\x1b\xf6\n\x07)\x9f\xb6\xdc%\"\x04\x92\xaf\xb3L=\x9eN\xff|\xda\x8b\x1b\x1b\xb6\xba\x0d;H\xce\xda7\xa5\x0b)\xc5\xe5\x80]\xb9\xb0c\xbc\x11\xb1\x00\xd6\x1e\xa1\x84\xa3\xf7s\x8c\x018p\x00\x0cP\xac\x12\xe8\xda!\\\x0bX*Z\xec`\xda\xf0\xd2$E\x8e[\xc1\xe4\x0c]\xca$o\xaa\xc2:)s&-\x82)\x9f?\x88)'\x8d7\xc2\xc3zLK\xd0\xe9aw\xd2k\x10\x1b\xba\x8a\x02\xdbY\x8b;;\xd0\x08;;\xd4\x88:\x1d\xea\x0d:\x1f\x83\x1esv]\x8c\x90\xb3\x8a\xb6F\\\xf5\x80\x80\xabN\x8d\xb7\xeaa\xe1V\x9d\x1em\xd5#\x07\x9b\xb2z\xb2\xa1);la-\xd6\xec@#\xd6\xecP#\xd6t\xa87\xd6|\x0cz\xac\xd9u1b\xcd*\xda\x1ak\xf8\x01\xb1\x86O\x8d5\xfc\xb0X\xc3\xa7\xc7\x1a~x\xac=r\xb2\xfe\xe3\xcf\xaf\x9e\xbf\xa5\xafh{\xb2\xf4-n\xf2^\\\x99\x16O\xd0\x8f\xc3\x83b\x83\n\\TE\xdd\xd3\x0f\xf0\xe7\xc7\xbe\xa9\xf2\xbe\\\xe7\x18\xdf\xa3\xb6\xa87E[lP\xde\xd1\x88D\xb8\xb8)\xb0`\x99\xd0\xba\"\xf4\xa6\xe8\xfb\xb2\xde!Z\xc8\x90\xb10\x8b\xb2h\xa3\xf9\xc9\xb6\xbc#\xef~o\x9a\xe3\x90\xd7Ty\xbb+k\xb4:\xeePYsIe1\x9f\xa0\x7f5G\xf4\xbenn'\x93 \x99\xf3\x93\xb7\xc8\xf3N\xbc%\x9eL\xd0\x0fM\xfd\xa4G\xdb\xa6\xdd\x0dyR\x83\xf8\xdb\x02\xe8\xbe9\xb6\\\x0f\xf2\xb6\xf9d\xbd5\xa7&h\x8b\xae(\xca23Ax\xc8\xbd\xc9\xeb\xe5\xe4\xcf\x16])o\x9e\xd7b\xd6r\xfd\xb9S\xfekz\xb2\x8c\xcc\xff\x9a\xbc\xe7\x87\xdc\xd1;\xa8c\x99l\xdb\x11\xc8\xce\xbc[\x80\xf5\x08<\xf9\xa5\x84-\xe6\x1b\xd2\x92F`9\x03\xb8U\xc0.\xad\x06t\xad\xa0\x03\xde\x07\xd0\xb7\xba\xd9Ry\x98f\xd5)\x8aU'\xe9\xa5-\xc0G\x86\x0b\x1dj\xe1S\xd4\xc2\xb0Z\x8f\xdd\xd7\xbc\xfa\xf5-\xfa\xf1\xf9//\x7f\xfe\x17\xfa\xeb\xebW\x7f\xfb-\xe4j\x88\xfe\xfe\xd0\xec\xda\xfc\xb0\xbf?'\x1f\x7f\xdd\xe6U\x89\xef\xcf\xe5\xe8\x9eH\x1f\xe2\xa5/\x01\x8c\xc0%\x92>\x19\xcc'&\x13;V\x85\x91/ GN\xf1\x90t\xc6f\xe3\x90\xc1\xe4\x0d\x89_\xf8w\x7f7\xe8\xed\xfd\xa1\xd8\xe6\xeb\xa2CO\xb7M\x8b\xd6\xcd\xa6x\x86\xc4+R?\xb6M\xc5-\xb5\xee\xbaAl\xd7\xe7\xeb\xf7\x93uS\x11\xd4\x80?C\x93\xe1?@\xc9\xdf\xf3/\x0e\xf3\xceR\xfc\xb0/\x10C\xcf\xa9f\xa2r\xeb\xe6\xd8\x96E\x0bH\x7f\xf2=#\xfdJ>\xb6l\xc8b\x9c\x01\x85\x90\xba\xbe\x19\x0c\xfb\x86\xd8p4\n[\xc3\x18\xbf\xd9\x0c\xa8a|\xd0y\xfc\xda\xb3Q4\xe0=\xf6\xc5h@0\xf8-\xe9\x00\x91\xb4:pM\xf2~_\xe0\xbc\x03\x8ac\x14\xb3\x00\xfeai\xb3d\xa5\x1e\x0c\x06H\x0e\x14\xd0\x97U\x01)F\x9e\xfb\x98W\xcd\xa6\xa9K\x80\xfb\xfa\x8b\xef(\xe9\x97\xb7\xd7_\x98R41\xeb\x1c\x97\x9dx\xb7G\x95\xf3=\xa3\x05 \xda\xe5m^5\xf5\x062\x07#y\xab\x94w\xef\x8b\xf6\xa6\xc4\x18j[\x12\xd5#\xe8s\xf4\xaa\xe4\xc2\xee\x07\xf4\xa6\xe4\x86^\x9e\xd3}\xce\x1cdR\nc|Dc\xd1KT\xf69.\xd7,\xa3\xe8\xa2\xbai\xab\x1ck\x18\xfa\xf0\xa4\xfc\x82,\x15y\xca\x1b\xc6>^b$\xee\xcc\xb0\x14\x1c\x9a=\x94\xec\x98Xh\xb9\xd5C\x8bU\x92\x83\x92\xbd\xbb\x1dZ*\xf6\x96\xfa9\xa2\xf4\x1f/^\xfe\xf5\xa7\xb7\x0f\x08\xd3[\xb2\xd7/_\xd7\xccbm{;\xa4\xe1#\xe4\xda\x92\x8c\x9b\xb7.\xc5S~\x97\x93y\xe9R\"h\xa9AK\x05mf\xd0f\x82\x96\x19\xb4L\xd0\xe6\x06m.h\x0b\x83\xb6\x10\xb4\x0b\x83v!h\x97\x06\xedr\xa0}\xfef\xad\xb6\xd7[v&C\n\xa5\xc9J\x89K\x8eX5\x98\xbd]\xb4\xbd\x8d\x01z<\xe5o\xbb\xdc&\x009\x19\xc9)@NG\xf2\x0c \xcfFr\x06\x90\xb3\x91<\x07\xc8\xf3\x91\xbc\x00\xc8\x8b\x91|\x01\x90/F\xf2%@\xbed\xe4\xf0\x9en\xec\xbf\xecN@h\xb2\x12\x1d\xa2\xcd\x13C\x07q;^\xd9\x03\xba\x83`\x12\x18\x93\xc8\x98\x14\xc6\xa42f\x06cf2&\x831\x99\x8c\x99\xc3\x98\xb9\x8cY\xc0\x98\x85\x8c\xb9\x801\x172\xe6\x12\xc6p\xb7\x85\x8e\x12\xa2\xf3\xf7\xf8\xac\nrY\xe5\xf7\x18\x04\xd1\x1c\x06A4\x7fA\x10\xcd]\x10D\xf3\x16\x04\xd1\x9c\x05A4_A\x10\xcdU\x10\xc4\xef)e`\x15\xe3\xa5\xc7Q8\xc8Q\xd8\xef(\x08\xa29\n\x82h\x8e\x82 \x9a\xa3 \x88\xe6(\x08\xa29\n\x82h\x8e\x82 \x9a\xa3 \x88\xe4\xa8G\xcfE^\xffB\x97\x1e\xc6\xec\xb4>\x1c\xfb\xa8-\xba\x82}\xda0\xba-V\xef\xcb>\xca\x0f\x87\"o\xf3z\xcd\xbfcA\x88U\xf3\x01\xa2\xb0y\xc2\xb1\xef\x9b\x9a\n[. v\xdb\xac\x8f]T\xd65\x99\xfe\xca\xa5\x99\x00Z\xfeJ\x9c\xa1\x19\xfe:\xe4\x9bMY\xef\x96\xfcR\xbcG6\xc8O$/\x0bY\x8dak\xc1\xf4\xec%\xf8\xfd\x8c=\xbaB\x94\xcc\x1e\x90\xb3\x9aC2!\xcelJ\x84\x1b\x95\x82\x86\xda\x94\xeb\x1c#\xf6\xe1\\\x85\x81\x80m\x88k%\xef\xbb\x1e\xd3>\xf9S\x1c\xac\x14\xd7G8\x00\x88\xfe\xf9\x0d\x00\xa2\x7fx\x03\x80\xe8\x9f\xdcP!\x0c\x14%\x19\x02n\x0f\xcd\xc4\xe7g\xb3)@\xcf\xc6\xcf\xd3. \xfe\xc5\xc8\x1fO\x81[M\xe9\xf7m9\x84\\\xa6q\x85\xba\xbe-\xeb\x1dC4[\xb2\xb2\xcf!e\xbd/\xda\xb2\x07P\x8c\xf2\x07\xa4\x9e\xe7_\xa3\x9f\xa8 \xdf\x0c&\x14KC1\xfa\x88\xf8\xd9\xe0/\xe9/\xfcv\xed}\x02\xd0\xd8\xcb\xe6\xfb\x14\xa0\xb1\x17\xce\xf73\x80\xc6^:\xdfg\x00M\xfa\xcc\x07\xd3\xf1\xb7\xa2]\x17u\x9f\xef\x8a\x0eE\xa4\xc1lP\xb3\xdd\x0e&c\x81\xd0l\xd1!o\x8b\xba\x175\x19\x82\xe1#\x12\xc2\x870`e\x0ea S\xb2\xa9\xa0,T\x9e\xc5\xc8C\xbf\x9e\xcb)dc\x89j9!\x0d\x90\xd1\xe5\xa3\xd5\x12\xe6\xfck\xf4\x8668\xa3B\\\xdf\x1b@\xe1\x1bv\x81\xd1\x0d\xa0\xb2D3\x94\x96h\x86\xda7{Y\xef\x1b\x8b\xe2\x02Eu\xa7a\xfa[\xdb\x1c\x86\xfeCZIdw\xc7\x908\xe3\xec\xe4\x10:\xb3\x1a\x0fuI?\xf6\x88\xc9\x0f\xcb\xd2\xf7\xfc\xfb\xb3ph\x0e\x88\xc4\x82\x10\xc7!\xf7\xa9\x05!\x0eE\xeeg\x16\x848\x1a\xb9\xcf,\x08q@r\xf0\"\xc5p\x08\x8f;B\xcc\xa6*\x91\x87\x1e!.4\xce\x85\xcc)>Xk\x84\x17Bc\x08R\x08\x18\x85\x08\xd1\x18\xd3j0\x86\x19\x05p\x0d\x81X\xa3\x80\x85!a\xa1J\x804\x1d\x01c\xd4\x81\xba\x8e\xc0\xfdx\x1d\x82\x19Z\x84\xce\"I\x85\xc8\xe1\x15:\x9f\xd8\xd3\xd7;\\\xc1\x05\xd1\xe5\xd0\x82\xe8r`At9\xac \xba\x1aT\x95#\xa6*GHU\xae\x88\xaa\xbc\x01Uy\xe3\xa9\xf2\x84S\xe5\x89\xa6\xca\x17LU@,\x01j\x1a\xa1Ty#\xa9:9\x90\x94\xe9\xce\x9e\x9e\x13v\xc5\x11D\x97\xe3\x08\xa2\xcbq\x04\xd1\xe58\x82\xe8j\x1caG\x1caG\x1caW\x1cao\x1cao\x1caO\x1caO\x1ca_\x1c\xe1\x808\x02\xd44\xe2\x08{\xe3\x08\xdb\xe3\xe8\x91'\x1f?\xbfx\xfb\xf6\xc5k\xf4\xe6\xb7\xe7\xdf\xbf\xfc\xf5\xaf\xd7\xfe9\x88\xb48\xdc\xb7\xf9\xfa}Y\xef\xfe\x90\x1d\x0cRX\xc1.\xe8\"wu\xf6}\xd1F\xdd!_\x93\xb9\x19\xfaR}\xc2\xb3N\xc6\x17\xf5%\xf9&\xbf\xc1\xa7\xb3\x11\x9c\xcaZ\x15\xbb<\xa8H\xda\x10C\x93\x12.^\xda*\xf1\x96 \xba\x02\xa5Zt\x04\x0b\xaf\x99\xc4?\xd4-\xa27n{\x0bO<}\x99:(\x8a\x12>\xb9v\xd5'U\xae\n*\xdaW7\xf5\xb6b&\x1f\x7fr\xd5\xf0'U\x0d\x07\x15\x9d|\xae\xae\xe3\xe5\xaf/\xd8\xe2\x05:G?\xbfx\xfe\xc3\xc9=\x089\xcaH;\xba?\xa0\x0fAh\x82\xf7\xe2c\xbdR\xd9\x83\xcd\xc7\xbf\"\xe5\xd3\xaax\x1f\xf5e\x8f\x0b'\x07AH\x1c\xeb\xe6p\x8f\x9c\x1c\x03\xe2\xa4\xde\x82k\xce\xda\xfai\xca\xfb\x98 \xfdy\xaf\xe0\xafBh\x8f \xaaP=\xa0\x06n\x1e\xb0\x02\xd5'\xeb\xaf\xb4z\xa1>~\x80\xfan\x1eP}|\x8a\xfa\x8f\xdf\xb6\xffW\xc8\x8a$?J:\xb4\xe4\xf7\x9dt.l2<\xa0\x86\xeb\x8b\xbb>\xda\x14\xeb\xa6\xcd\xe9;\xccb%\xb7o\xf3\x9a~G\x88\xbc\x13\xdd\xb4h\x12g\x1d*\xf2\xae\x88\xcaZ,\xe9\x0e\xa2\x96\xc3\xbf\xce\xf8\x1f7eW\xf6\xe2\x9d\x98\x00)\x94m\xdf\xdc\xd0[;Oc\xcb\xd7}yS\x9c\xccFV\x95\x83KC\xa89\xf6\x83\x7f\x97(>\xdc\xb1OF\xa3\xf5\xb1m\x8b\xba\xff~\xe0\xf8L'X~~\xf9\xc6s\x04Yrr\xd7kN\xee\xe4w\xc0\x86?\xe9y\x86\xa8\xbf?\xc8\xdf\x9e~d\x9d\x7fy\xfe\xcf\xf0\xafN\xb3U\xf3*\xbf\xa3\x17\x1a\x80\x0b\xe7\xd5\xed0\x84p\xc8u\xd8\x826}\xa5\xcb\xb5\x9em\"\xf4\xe5l\x13\xa1\xaff\x9b\x08}1\xdbD\xcc\xd1\x15\x9a;5]\xa0+\xb4pjz\x81\xae\xd0\x85S\xd3Kt\x85.mz0\x0cY\x1ft/y\x93k\x9e\xf5\xd5l~:\xfb\xfasg\x05\xe7_\xa3_\xf2;\xf4\x0f\xa2\xbb\xbcP\xccb\xbc\xba\xa5\xcb\xf6\x1f\xc7\xf0\xd0\xd7fG~e1\xbc\xba%_\x97\x92\xf9\xbe\x14\xbf\xf3\xf9Iu\x9b8@ \x07\xa5\x0eP\xcaA3\x07h\xc6A\x99\x03\x94q\xd0\xdc\x01\x9as\xd0\xc2\x01Zp\xd0\x85\x03t\xc1A\x97\x0e\xd0%hg\xdb\x8aru\xcbo\x0d\x97\xa4\x9d|>\x9e\xfa\x9ce@\xb0\xdb \x8a\x7f<\xc9\xe9b\x82L\xdc\xc8dD\xa6nd:\"gn\xe4lDfnd6\"\xe7n\xe4|D.\xdc\xc8\xc5\x88\xbcp#/F\xe4\xa5\x1by)\xdb^\xba\x89\x16ruhR\xca\\]y=]\x85:\xda\x05T\xfc\xec\x02*nv\x01\x15/\xbb\x80\x8a\x93]@\xc5\xc7.\xa0\xe2b\x17P\xf1\xb0\x0b\x088\xb8:\xd9\xbfJ\xd2\xce\xdc\x8b\xbd\xee\xc5\xa1\xeeu\x01\x15\xf7\xba\x80\x8a{]@\xc5\xbd.\xa0\xe2^\x17Pq\xaf\x0b\xa8\xb8\xd7\x05T\xdc\xeb\x02\x02\xee\xc5v\xf7>r\xcexj\xbeH4\x02s\xc5!U$T\x91\xc2\xe8\x89bH\xaa\x18\x92,\x86\xa4\x8b! \xa3'e\x14\xa8(\x06\xcf'\xfcy\x04$\x00 Q\x00\x99\xeb\x04\x05BQ\nHHe i\n\x00R\x190\x03\x003 0\x03\x8a\x98\xc9Ed\x00 \x93\x01s\x000\x97\x01\x0b\x00\xb0P\x00\x80\x1d\x16\xb2\x1d.\x00 \x17\xb2\x84K\x00p)\x03\xbc\x995BQ\xbf/[\xb6h~E\x88\xe8\x1c\xa5\xe8\xe9\xafM\x8f\xba\xe3\xe1\xd0\x90vU\xd6h\xc8\xa3rT\x95u\x89\x9a\x16\xbd|q\xf1L\x92q\xdbP9\xdd(#\x9ed'J!;\xfd\\\x13%\xd5\xa7g[\xc6\xc6\xe4L\xf6m\xe9>\x98\xf0\x9b\xdf\x84\x1f\xdf\xe6\x02\x12\xf6\xdb\x18\x91\xc9,\xef\xb9\xe4\xde\x7fr\x9b@D\x96\xa0\xdf\xa6\x10\x91%\xe6\xb73\x88\xc8\x12\xf2\xdb\x0c\"\xf2#,\x93a\xf8\x1a\x00\x8c<4F\xc674E\x89\x90H\x84L!d\x82\x90*\x1c\xe9\xc8\x91\xa6\n!\x1d 3\x850\x13\x84\x99\"j6\x8a\xca\x14B6\x12\xe6\na>\x12\x16\na!\x11\x94z,\xc6z\\(\x1c\x17#\xc7\xa5B\xb8\x1c \xf4\x90\n#\xc8\x87onY\x0b\x11\xc4\xa7\xbc\x91<\xe3\xbcR\xf8\x1b\xa8x\x92 \x1c;\xca\xc2\x10bc/t\xceq\xcb\xcf\xa8@\xd17\xd0\x13\x90.R\x8e\xdb\x14\xa4\x8bL\xe3v\x06\xd2E\x82q\x9b\x81t\x91W\x0cF\xa4\x08=\x16 1\xd1\x88\x89B\xcc4b&\x11S\x8d3\x959\xd3T#\xa62q\xa6\x11g\x12q\xa6\x89\x9d\xc9b3\x8d\x98\xc9\xc4\xb9F\x9c\xcb\xc4\x85F\\(D\xad\x9e\x0b\xb9\x9e\x17\x1a\xe7\x85\xccy\xa9\x11/e\xa28\xec\xa2\x070\xa1\x92\xd8T\xe8Z\x0cS\x94\x88b\x10*\x02\x99\x80\xc7\x933z4\x87N\xabn\xe3\xf1\xf2\x10{@[ rL[ rX[ rd[ jpW\x8e\xd8\xae\x1c\xa1]9\"\xbbr\x04v\xe5\x88\xeb\xca\x11\xd6\x95#\xaa+GPW\x8e\x98\xae\x1c!]9\"\xbar\x04t\xe5\x8a\xe7\xca\x1d\xceUp4\x03H \x98+e\x94\x0d\x08ge\x16y\x1b\x8f\xd7\x93\xd8\xa3\xd9\x02\x91\xa3\xd9\x02\x91\xa3\xd9\x02\x91\xa3\xd9\x02Q\xa3\x19+56\x02Z#\xeb1\xad\x93\xb5\xb0\xd6\xc8zd\xebd-\xb8u\xb2\x16\xdf\x1aY\x0fq\x8d\xacG\xb9F\xd6\x03]#\xeb\xb1\xae\x93\xb5p\xd7\xc8z\xc4kd#\xe8)\xdd\x11\xf688\xec\x01$\x10\xf6\xd8\x1a\xf6\x8f<\xbbF\xaf\xfe\xfe\xe2\xf5\x8f?\xbf\xfa\x07\xff\xdb\x93\xc5[\x92x(\x87\xd7Sx\x96\xac77E\xbb\xc5\xcdmtSv\xe5\x8al\xd0\xf3GK\xc4\x9e\x91\xca\x8e\xc8}\xb9\xd9\x90\x0f\xb5\x8d@\xfaH\xc3u\xeb\xb6\xc1X\xc1\xd1G\x1a\x8ee|#JJ\xfaF\xd4\x1d\xa0atg\xd3\xf1\xce\xd4r\x00\x83z\xde\x99\x9a\x0eXP\xd7;]\xdb\x01 \xea{\x0f\xe9{o\xd3\xf7\x1e\xd0\xf7\xde\xa2\xef=\xa0\xef\xbdE\xdf{C\xdf\xfb\x07$\xd5z\x90\xd0\xa4\x06\x8e\x13\x19N\xd5\xd7\xd1R\xa5d0\xd5_\x07K\xb5\x92\xc1cj\x05\x84\x8d\x0c\xbc\x83u\xd6#Ge\x81\xf4\xd6\xc2Ge\x80t\xd7bHe0\xf5\xd7\x02I\x86\xdf[\xeapo\xaf\xc3=\\\x87{k\x1d\xee\xe1:\xdc[\xebp\x0f\xd5\xe1>()Ps\\#\xb8\xaaSb\xab:!\xb4\xaa\xe0\xc8\xaal\xfd\x11\x1cZ\xd5\xa9\x91\xa53\xf8\x02K\xc7\xbb\xe3JG{\xc3\xaa:5\xaat\x06_P\xe9xwL\xe9\xe8\x80\x90R\xf2L#\xa2\xf0)\x11\x85O\x88(\xeb\xe8fD\x14>-\xa2\xf4\xc1\xc8\x1bQ:\x83/\xa2\x1c\xa3\x1d\x10Q:\xda\x1bQ\xfa\xe0\xe4\x8d(\x9d\xc1\x17Q\x8e\xd1\x0f\x88(\x1d\xfd\x19S\xb8\xdf^\xbdy\xf9\xf6\xe5\xab_\xc3Nq\xb2]\x92CCO5\xfd!g\xc0\xbb>\xef\xcb5\xfa\x88x\xa9KD\x1f\x11\x8bL\xda\x02\xe7\xec\xa4\x96\x84\xe0O)&_u\x0d>\xf6\x1a\x86?\xa5\x18z\xdf\xb2\x02\xa0wC\xa2\x132\x0f\xaa\x18\x1de@u\x11\x12\nGt\xd7\xdb\xa23BBk\x03\xa8(\x8e\xd0D\\\xddk\xd1>thc\xdaW!\xcaW\x81\xbaW!\xaaW\xa7k\xae\xf4\xa0Lq\x1c\xa28\x0eT\x1c\x87(\x8e\x1d\x8a?rCE\xaf~{\xfe\xfd\xcb\xb7\xf4\x8e\x7f\xdfa\xeb}Q\x15\xddys\xc8\xd7e/_\xdc7i\xd8\xa28#\x91/\x12 r\xd3\xe9\xa4!{O\x12ir\xf9\x8d ]h\xa4\x8b\x91\xb4\xd0H\x8b\x914\xd7H\xf3\x91\x94i\xa4l$\xcd4\xd2l$\xa5\x1a)\x1dI\x89FJFR\xac\x91\xe2\x914\xcdT\xd2t\xd0\x83\x91\xc8\x8e\x8aDJ\xf8\xb7\xad\xa3)R\xb8\xe8\xa5 \x8f\xec\xef\xd7\xaf\xde>\x1f:\xe67\x92\xf7\xda\xa6\xcf\xfb\"\x9a\x0d\x8a\x91\xb3\xa5\xdb\xa6\xad\x96\x88>~:\xcb6\xc5\x8emL0$\xd9\x1a1\x91\x97S\x03\x19\xa7\xb0\xd085\xa5\xc6\x17\xb0\xd8\xf8\xc2\x94\x9b$\xb0\xdc$1\xe5&\x0bXn\xb20\xe5\xa61,7\x8dG\xb9\xde^\x9b\xf6\x1e\xc2\xaa\xb4\xdfv\x1av\x84\xf3\xb5{\xa7uGx\x9cZ\xc5\xcb&\x96\x18.\xac\x05\xc8v\x1e\x19\x92\xc4Z\x82ll\x89aa-A\xb6\xf8\xc8\x90\xc6\xd6\x12d\xb3{\x87\x1b\xdd\xec\xd5IV\x87\xd1V\xa3\xc3p\xbb\xcd-x\xab\xc9a\xbc\xdd\xe2\x16\xbc\xd5\xe00>\xcc\xdet\x90\xd4\xcd\x8dO27\x8c\xb6\x9a\x1b\x86\xdb\xcdm\xc1[\xcd\x0d\xe3\xed\xe6\xb6\xe0\xad\xe6\x86\xf1\x9a\xb9\x1f\xb9\xab\x7f\xf3\xbf^\xfe\x1arF\x89\x0d\xeb\xdd\xfb\xb2\x16G\x94\xbe\xc7y\xd7\x15\x1d\xda6-\xea\xf8\x8d\xdeM[\xec\xc8\xd7\xa5\xc8\x97GV\xf9\xfa=\xfb\x93\xbc\x84\xd0\xa1\xa6\xd6\xae\x03\x7f\xb9E\xf7\xcd\x11\xed\xf3\x9b\xa2~\xd2\xa3M\xb1\xc69\xb9C\x9c]\x8aC\x19\xcf\xd0\xea\xd8\x93\x8f\x9c\xb0\xa7M\x8dr!\xea\x0c\x95=\xb93\x9cH\\\x15\xf4k(\x0d\xb9=\x9c\xbd\xd1@\xde\n\xa1\xb2&\xd7\xf2Y\xec\xb7\xe2\xb98\xd3\xbb\xc2\xf9\xfa=\xdb\xdbg?\x04\xb0D_r\x12\x1d\x10\xe8_\x17v\xe0\x85\x02\\\xd8\x81\x0b\x058\xb7\x03\xe7\n0\xb3\x033\x058\xb3\x03g\n0\xb5\x03S\x05\x98\xd8\x81\x89\x02\x8c\xed\xc0X\x01N3+p:\x9eO\xd9\x97<\xb9\xd0\xa1\x9cDe\xd2\xbf@\xdfp\x92\x0c\x04}\xc3I2\x10\xf4\x0d'\xc9@\xd07\x9c$\x03A\xdfp\x92\x0c\x04}\xc3I2\x10\xf4\x0d'\xc9@\xd07\x9c\xc4MN\\`s\x0d\x95V\x17y\x1bI8\x0e\x19\x9fS\xdc&o\xdfG\xbb6\xbfg\xe28N<\xa7\xb0\xaa\xdc\xc8(\x01\xe3\xcf)JF\xc8\xa8\x11\xd1\x95\x98\xbc\x80\xf5QC\xd0\xe7\x14\x83\xe9Kt\x14\xf9q\xc4\xc8\xcf\x99VMSC\xca\x8b\xe7\xb2\xc0\x11\xa7\n\x1cq\xc46\xc4\xd6\x80\xcd\xc8s\xc9S67q\x1f\x11\x03\x0e\xdd\xe6G\xd5\xa6-\x9b\x14NT\x9axL\x95R\x89\xe2\x19\x854m^\xef\n\x89N\x1f0\x1f4Xf\xdd\x89{>\xef\x0b\x8c\xc9\xa7\xb58\x89>\x90K5 \xf2c\n<\x1c\xdb\x03\x96\xcb\xa6\x0fd)\x06D~,E\xdd\x81\xbc\x1f\xa8ZgxF!\xfb\xa6\xd7\x11\xfc\x11\xd3D%\x8e\x04V\x9cJ\x1e\x1f*q_\x90m+-\xe8\xf9\xf7\x1b':]\"\xf1\xd8Q\x01\xd2S\x16R\xf9\xcd\xbdD\x1f\xfe\x94\xca_\xe1c\xa1\x17?<\xa3\x10\x8d:\x12h)\x1ay|(\x81\x8a\x0e\xc6\xf1\xe7,\x9e\xf3n_lt\xa0\xf4T\x81\xe9u\x96\x1f+@#\x9a\x94\xe7\nT\x0d\xf7\xf1!\x05\x91\xe7\xd2EP\x0c\xa7^\x035Y\xed\" M\x18\xf3\x9dh4\xa4\x921p\xb6\x8b \xb6\x0b\x9dm\x11\xc4\xb6\xd0\xd9\xe6Als\x9d-\x0bb\xcbt\xb6Y\x10\xdbLgK\x83\xd8R\x9d- bKt\xb68\x88-\xd6\xd9\x94$\xc5\xca\xc6\xf2\x95\x81\xcdLX\x00.5u\x11\\\x17!\\\x17:\xd7\"\x84k\xa1s\xcdC\xb8\xe6:W\x16\xc2\x95\xe9\\\xb3\x10\xae\x99\xce\x95\x86p\xa5:W\x12\xc2\x95\xe8\\q\x08\x97H\x91\xd8T\xe2;c\xb6\xc3'\x14\xbbHO\xa2l\xa1#\xf4\xd0S*\x80A\xcf\xaeV\xbbHO\xb0\x00.-\xd7Z\xed\"=\xdd\x02\x98\xd4\xcck\xb5\x8b\xf4\xe4\x0b\xe0Q\xf0z*\x06\xe0\xe5\\k\xb5\x8b\xf4\xc4\x0c\xe00s\xb4\xa16Z\x9a\x06\xd5F\xcd\xd8Da#\x97\xb50\x85KO\xe1l>\x92\xb29\x1ea\xeePP\x19\xc8\xa2\x00\xbb-\xf2#\xcc A\xa4\x11J\xca\nm\x81 \x86\xbd\xd5\xce\x8e\x94Ar\xc6h\xb5\x92\xcc \xf2G\x00-\xa7\x92CP\xd1l\x12\x8a%\x91X\xaev\xe3P\x0f\x00\xe5\xe1^h\xebb0\x93\xce\xd5nL*\x01\x069\xb3\x14%\xb8\x18\xcc\x84\x94\xbb\x86e\x8d6\xdf\x8c\xf9\xe3j\x17I\x19*\x80W\x93\xd5\xa1\x06V\xa8\x02S\xb2W\xbb\xee2\x8b\x92\xcb\xda\xfb\x17\x91\x9f\x91\xce\xc2\x8aV\x81j\x9e\xebh\x842\x13\xcbz\xa1\xc6'\x12`\xae7\xcb:mjK\xe9\xf0\xce\x81U`J~lU\xd9d\x91\xb2e\x1b\x97\x9a8\x0f]\x87\x92;C\x1d\x87\x9eF\x8fL\x0e\xab\x9aI\xf5\xc8\xe6j;@\x8a=2Z\xbb\x08=\xe1^\xed\xa4l\xdb\xc4\xcb\x89\xf7\xe7X\xfd\\\xfe\xf6\xe6\xc5\xdf~x\xc5\x175 w\xf9\xa1\xa0\x8b\x87\x83\n\xe4:d\xb1\xd6\x88n\xd9\xd7\x94Q\xd9\xa3\xb2C\xe4\xd6\x95b\x83\x9a\x16\x91\xeb^\x86_o\n\xba\xc8(\xae\x9d\x1d\x9e\xd0\x91\x9a\xde s\xa6=\xa4W\xb7\xc8\xb3/1\xa8S\xd88\xd4\xeb\x02$\x8a.E\xcf\x0f(\x83\x18\xffuI#A\x17\xa4\xa5\x0c\x14\xceS\x02]\x8cx\xaeKQs\x08\n\x86\x04\x80\xcc:#\x1d\xf4uV\xf6Tg\x963\x04\n\x943\x07]\x88B\xd3E\x99)\x07\xab5O)\x0cs\x08\x82a\x0f5\x0b\x91\x0b\x87\x04I\x14X)]\xd4\x98z\x801C)`\xccH\xe9\x07e\x00\xa5\xc0\x02\x94e))\xc6\xa3\xcb)\x18\xfb\xc3s0\xfc\xc5tH\x06_X\x84\\\xd8\x84\\\x00B\x16\x16!\x0b\x9b\x90\x05 dn\x112\xb7 \x99\x03B2\x8b\x90\xcc&$\x03\x84\xcc,Bf6!3@Hj\x11\x92\xda\x84\xa4\x80\x90\xc4\"$\xb1 I\x00!\xb1EHl\x13\x12O\x8dP\x05\x82M<\x07\x03V\x0b6>\xb3\x86\x85\x00\xc1\xa6N\xc5e\xb0\x19l\xe29,d\x01\x081\x83M<\x87\x85\xcc\x01!f\xb0\x89\xe7\xb0\x90\x0c\x10b\x06\x9bx\x0e\x0b\x99\x01B\xcc`\x13\xcfa!) \xc4\x0c6\xf1\x1c\x16\x92\x00B\xcc`\x13\xcfa!j\xb0\xb1\xdcD\x97\xc1\x1fk\"\xb4%D\x16\xdc;Kb\xb0\xd3Fu0\x0f\xd5\xc6ve\xdd\x00\x90\x08$\x0b\xb69+$\xdb\x9a:(4\x87d0\x91\x90V \x00\xb9F:\x01\x88\x852\x0b\xb6F\x01H\xf4I\x03$\xc1\x89\xc2HpH3S\x05mm\x03\x90\nf \xd6\xa9\x05X\x825\x1fQh.\x9bB\xd9\x89\xb2RbU\xdc'\x1aNW\x94\xf5\x14[\xec\xaa9\x87-v\xc7\x1cdd\xb7\x89\xf5J\x84\x84I\xcb-\x80H\x99\xea\x10\x0c\xac\xd9\x08\x11\"52\xa5\x0b\x92\xafc\xd0\x13\xa8\x9d=\x87\xda\x99i\x94U\xea\x05,\x15H\xaavf^e\x95\xba\x80\xa5\x02Y\xd6\xceL\xb4\xacR\xe7\xb0T \xed\xda\x99\x99\x97Uj\x06K\x05\xf2\xb0\x9d\x99\x8aY\xa5\xce`\xa9@b\xb63s3\xab\xd4\x14\x96\ndj;3Y\xb3JM`\xa9@\xea\xb63\xb37\xab\xd4X\x97*r6S\xaa \xf9Z\xae\xd9\nD\x12g\x93\xean\x05\x1c\x03J\x05[\x81 y\xa5\x1a\xad@\xa4y6\xa9\xeeV\xc01\xa0T\xb0\x15\x08\x92W\xaa\xd1\nD\"h\x93\xean\x05\x1c\x03J\x05[\x81 y\xa5\x1a\xad@\xa4\x8a6\xa9\xeeV\xc01\xa0T\xb0\x15\x08\x92W\xeax\xf0\x862\xf3ez]\xa8x\xae'\xaa\xea\xba>\x05\x03\xfc\x10\xab\xc6%\x16\xf3u\xde\x91\xa0K\xd0\xd6\xff)\x9c.\xf3\xebB\xd8S]\x82\xbc'@\x81\xbb\x06\x1b\x1a\x90g:\xeb\xb8K@AtaRgeOufy\x15S\xae%,D\xa1\xc1F0\x05\xd2=\x00]\x14{\xaa\x0b\x917\x0c\xe42a!\n\x0d\xd6\xc7\x14(v\x19\xc0\xd8:\x8c\x97Jk\xc1%\x9f\x9b\x19\xe0|\xf7A\x17#\x9e\xebR\xd4\xed\nf\x06@\x00\xc8\xac3\x8e{\x14\x16\xa3@B\xf4\x8d\x0d\xa9\xded\x19\x1c\xb4\x08\xa5\x80&\x91\xd6\xceY\x80BR`\x01\x06\xaf\xb4\xcb\x01W \x96cl\x8eP\x96:\xbf1ru\xf2L\xe7\x1f\xb7K\xa4:\xaf\xf0\xd1\x08\xb6\x91\x00\xdab\xdc}\xa0pH\x04\xc8\xad3\x8e['\xb0\x19@!\xfa~\x8b\xc4\xc0\xf7S@i\x82\x08\nT\xb7b(\x9b\xb4\xd9\xa2K\x94I\xbar\xabD\x9fY\x8d^\x94\x1f_\x80\xda\x97O\"$\xcc1\xb6kT\xaf\x19 \xf1\xd0`\xcf\x1f;\x04\xeaC\xbf|^\xc2fPep\xb3\xd9\xd3\xc8\x05v6\x99>q\x80${~\xa0\x12\xbd\x96\xb4\xc9\xb6%\x0c\x06\xddW\x02\x94>\xa8\xe79\x80\"\xa0$\x02\x9a6\xc2\xf9\x84v\xf2\xc3.\xdf\x1bm\xb6\x04C?$b/\xc2\xdf\xc3[3\x0e\xe5@\x89\xbd\x04\xcfH\xac\x9f9\x11\xec\x96\x1d\x1c\x89b\x97\xfa9N\xa6\x8cO\xc4\xcd\xc1\xf4\xa8J\xf0\x07\x13\xd9E\x19\xeckl\xfce\xbd\xe75\"\x9fq\xa2\x17r\x1f\x9a\xdb\xa2\xedP\xb3E\xfdmCo\xe5FCbA^\xe1k\x9b\nMQ\xdf\xa0x\xde\x16\xd5\xe4\xda\xbc\x90\xfc\x80\xae\xf8G\xea\xd9\x93\x8a|\xcd\xa6\xdd\x95\xe2\x0b*\xfc\x86r\xce\x93\xa3+4^\xc1A\xbe\x1b\xdf\xb4\xe5\x87\xa6\xees\xfe\xf0F\xfa\xe0;{\xd4\xa3+\xd47\x07\xf6W\x8b\xaeP[\x8e\x9f\x88_\xa1+\xb4j\xfa\xbe\xe1\xd7x`t\x85p\xb1\xe5\x1fwChJ\xae\xff\xa8\xf9\xbd\xe4\xfa-\xe9\xccH\xceO\xea@\x18\xfd\x96t\x08\xa3\xdf\x92\x0ea\xf4[\xd2!\x0c\xf9\xb4\x8e\x07C>\xaec\xc7P\x8f|\xc6\x9bR\xae\xeb\xc9!\x9f\xa2\x8f<*\x96\xe8K\xfe5@q\xc3\xfe\xe4\x90\xc7 \xa2\xb8\xeb\xdb\x9c\x16\xcb\x81 \x08T )\x08\xa1\xaar\xcc\x0c\xc4\x10\xdd9$s\xa8\xa4\x00\xe7\x0e \x00_x\xe1:\xd3\xc0\x86%\x1bFC \xc3\x86\xc4\xb1\x1dfZ\x13'v\xb4\x82K\xed8\xc5\xaexf\x07\xcaF\xc0\x99OM\x05=\xf7\xa1\x01\x9eE\x18\x0fd\xebV\xb65\xe9U`c\xb7\xb1\x03gZ\xbbM\x1cp\x05\x98:\x80\x8a\xbd\xdb\x99\x03)\x9b\xa3\xcd\xbc\xaa*\xf0\xb9\x17\x0e0-\x02\x99 \x9b\xafd\x9b\xd3\x9e\x1b6\xfa*v\x01M\xab\xaf\x12\x17^A\xa6.\xa4b\xf7\xd5\xcc\x05\x95\x8d\xb2\xca\xfc\xea*\xf8\xb9\x1f\x0fp-B\xb9 \xdb\xf7\xb2\xed\xfb\xe6\x00\x1b\xbe\x8f\xad(\xd3\xea}b\x05+\xb0\xd4\nS\xec\xdd\xcf\xac8\xd9\x0c}\xe6QQ\x01\xcf=`\x80e\x11\xc4\x02\xd9\xf8fJ\xaf\x85r\x98Y&\xc3-\x80~\xd2\xf1p\x13\xbbd\xc9\xcep\x8aT\x81Tr\xe2\x92\x1c S\x95\x96\xba\xa41\x07;\xc5 \x0c\x957s\xc9\xa3\xf6v\x8a\xe3\x10*-\xf3[1@\xa6\n\xa4\x92\xe7~\xc9'\xca7J!\xe5,B\xcbyPi`\x99{-\x8e\xa1TD\xa6\x83\xc3\xe7(-vJ\xb3\x85\xb2k\xac\x1de'N\xd9~\xa9\xba\xbc\xd4)\x0f\x08g\xcb\xd0=J\x9c9%\x9a\xee\x82G\xf8Q^\x16`M\xbfT\xd8\xef\xf3\x00\xd9\xa7\x95\x00\x97\xb3\x08.\xe7!\xa5AeV\xf9\x94})l\x98\xa5\xea\xb1Jz\xfe\x8aLPL\x84\x1cx\x0c\x98\xc0\xb2\x14L\nc\xe4!\xaf\xcag0H\x1a\x8f\xaa<\x831\xfa\x004\xa9\xc8$\xc5\x06\x04\xe0\x0b\xf214\x07Z\xe7\x19\xb8\xb0lG\xfb$\xa5\xc2\xb1\x1dfZ\x14'\x0e\xa9\n0u\x00\x15\xdb\xe2\x99\x03)\xdb\x01g\x0e\xa0i6<\xf7\xa1\x01\x9e\xd1\xd4\xa1\xc1\xce\xed\xdd*\xf6\xb6OT\xaa6v\xe0L\x8b\xb7\x89K\xae\x82L]H\xc5\xe6\xed\xcc\x05\x95-\xd2f.\xa4i\xc1v\xee\x85\x03L\x92\xd9C;\x0cn\xf7\x95bw\xc7d\xa5Z\xc5.\xa0i\xf9U\xe2\x94\xac@S'T\xb1\xfdj\xe6\xc4\xcavYeN\xa8i\xc8\xd5\xdc\x8f\x07\xb8$\xf3\x07'!\xdc\xfe\xbdb\x7f\xdb\x84\xa5\xeac+\xca\xb4|\x9f\xd8e*\xb8\xd4\x8eSl\xde\xcf\xec@\xd9\x12}f\xc7\x99v\xeb\xe7\x1e0\xc0\"\x99:,C\xe4v\xbe\x99\xf2o\xc6\xdbM-Q]s\x96\xea&v\x89\x92\xfd\xe1\x92\xa8\xe2\xa8\xe0\xc4\xa9\xa4_\xa6*-uJ\x93\x92d\x11\xfc\xdcS;\x90i\xc1.\xc7w\xf2\xe8\x9c\x94\x17\xebv\xb7\xce{\x08Z3\xbeo\xf6Cxt\x0f\xd8\xe7@\x04\xae\xbb\xc11\x13\"x\xdd\x17\xf6\xf9\x10\x81\xeb\x0e\xf1\xcd\x8a\x08\xd3<\xa4\xda \xa7\xea\x9a\xd0\xe66\xfa\xa75\xfcc\x9d'\x11\xb8\xee \xdfl\x890\x19\x1e\xb2\xcf\x99\x08\xdep\x91c\xe6D\x18\x0c\x1f\xd9\xe7O\x04\xcf?\xa0\x1a\xb4\xc6#\xb8t/\xf9;E\xc1\xaa\xb9)\xb4\x8f\x1b\xfd\xb42\xfcd\x9fW\x11\xbc\xee(\xef\xec\x8ap\x19\x9er\xcc\xb1\x08\x83\xe1*\xd7L\x8bp\x18\xber\xcc\xb7\x08\x83\xd1\xa2\xbc\xb3.\xc2\xa6{+ \x0f\x13\xbc\x9a\xbb\x82\xf3\xaa\xd1_\xbd\xe1/\xcb<\x8c\x80ug\xb9gc\x84\xc5\xf0\x94mNF\xd0\x86\x9b\xac33\x027|d\x9b\x9f\x11\xb4\xe1 \xf7,\x8d\xf0\xe8\xde\xf1%\xd4\x82QsMX\x8e<\xfa\xe5\x86^\x9f\x7fM\x8ed8\\\xa3\x02lS7\xc4\xd5\xba\x89\xbdbe/z\xa4\xebP^H\xe2-$H\xbc)8\xf5\n\x96\x92b\x7f[\x97E\xcf\xbc\xa2\xc7\x0c\xd0\xdb'\xc8\x823\xaf`9\x02\x82,n\x162\x0f,\xe4\xe4\xa2l\x05.N*\xf0\x81\xc5Z\n\xdfCm\xc36!\xb4\x0f\x83z\xdb\xd8Cm\xc337\xb4K\xb7\xb4\x8d=\xd46\xac\xd3D\xbbxS0\xd46\xec3F\xbbd\xb3m\xec\xa1\xb6a\x9d<\xda%\x9b\x8e\x84\xda\x86g\x1e\xe9\xb3\xb8Y\x08\xd46\xbc\x89kHQ\xb6\x02\xa1\xb6\x11\x98\xf0\x86\x17\x0b\x14N\x8a\xaf\xc6\x19$\x9d\xa8\xea\x11\xcf\xd4\xac\xc4\x04\xd2\x80\xc9\xa1+\xd0\x89U\xaa\x06L\xad@u\xf4\xae\xc6\xd9\xa3\x81T\xc6\xd2j\x9c\xb9\x9f\xb0\xa3\xe8\x91,\xa7v\x9e>\xe0Z\xd9P\x0c\xb2v\x90t\x1d\xca\xcb\x98\x87\x95qrI\xb6\xf2\x16\xa7\x94\xf7\xc0R\x81\xb2i\xe9{\xa0U<\xcav\xa2O\xaa\xbdY\x84M\x1a\x0f{\xa0U<\xd2f\xa2O\xee\xc3\xf7\x12}\x92!\xc7\xfaf\x8c\x87=\xd0*\xbc\xf3E\xb7\xb5\xcd2\x80V\xe1MICJ\xb2\x95\x07\xb4\x8a\xc0T6\xbcT[\xab\xa8\xc4\\\x90\xce:\xf5HgJV|*h\xa0\xe4\x90\x15\xe0\xc4&S\xc3\xa56\x9c\xb9\x87h\x01*\xe3f%\xa6\x81\x1655\xf4\xdcY'\x90\x85\x0e\xccN\x0e\x9d\x8frb\xd5\xce\xbe\xed\xc3\xca\x0e\x85,\x8e\x13\xa7t\x0d\x9c:\xc1\xe6\xde\xa1\x0b\xad\xda\x07gN0dR<\xf7W\x16\xe4\x93]\x11\xda`\x90\xbco\xa8h\xea\xdb6\xac\x1cX\xc8#m\xe2\x96\xaf\xa1S7\xda\xdc3t\xc2UK\xb5\x99\x1b\x0dY\xb7\x9d\x07\xd4\x18dT\xdc\x12\xda%!y\xbfPQ\xd6\xbb]X\xb9\xc0\x90gV\x89\xa7\x04\x0d\x9ez\xe0\xe6^\xa1\x1b\xaf\xdak\x95y\xe0\x90\x91W\xf3\x90j\x83\x9c\x8a{\x82\x13)$\xef\x13*\xfa\xba\xb7 ++\x12\xf2L\x9f\xb8dk\xd8\xd4\x855\xf7\x08\x1d`\xd5B}\xe6\xc2B6\xed\xe7\xdez\x82l\x8a+\xc2\xf2`$\xef\x0fV\xce\x0d\x98\x87m\x0e\xbae\xcaNs\x8b\xd6\x91\xbc\x84\xc4SB\x88lSj\xea\x91\xfa\xf0MA\xb7\\9\x0bs7\xf7keG0\xc4\xca!\xb2u$/a\x1eT\xc2\xa9\xe5\xd8J[\x9cP\xda\xc3\xca\x04J\xa6e\xef\xcdV\xf0\x18\xfb\x80\x1e\x99\xd6f\x106\x9f\xab\xf6f+x\x9c\x1d@\x8f\xd4\x07o\xffy\xe4\x02\xee\xf4\xcd\xe4\xaa\xbd\xd9\n\xbc\x139\xa7\x95\xcd\x12\xccV\xe0M.\x03\xca\xb1\x95f\xb6\x82\xc0\x9c4\xb8L\xb0\x15\xd87\xfd\x08P\xde\xf3\xc3\xf2\xea\xa5\xde\x00X=\x0ey\x1ca\x18&\x07\xb3@'V\xa9\x1a0\xb5\x02\xcd=?\x1bR\x19?\x0fyf\x05\xeaC&\xa2{~\xce\x8a\x81<\x0b\xc2\xe3f\xd1\x19)+\xd6\xec\xed\xdb\xf3\xc3\x0e,dy\x9c\xb8\xe5k\xe8\xd4\x8d6\xf7\xfc\x9cp\xd5J8s\xa3!\xcb\xe2y@\x8dAF\xc5%\xa1m\x0c\xc9{~\xaa\xb2\xbe=?\xec\x02C\x9eiu\xcfx\xf7\xfc\xdcps\xcf\xcf\x8dW\xed\xd5\xea\xce \x98\xfd\x1d\xdayH\xb5AN\xd5=\xa1\xdd\x19\x92\xf7\xfcT}\xbd{~\xd8\x89\x86<\xb4\xd2=\xe4\xdf\xf3\xf3\xe0\xcd=?\x0f\x83j\xb5\x95\xee\xa4\x90Y\xe0a5\x0f\xaa;\xc8\xaa\xba)8\xf9B\xf2\x9e\x9f\xaa\xb2{\xcf\x0f\xdb\xa1\x90\x87z\xddC\x9e=?\x17\xd8\xdc\xf3s\xa1U;\xf5\xbac\xbc\xb3\xc1C?\xf7W\x16\xe4S]\x12\x96B#y\xcf\x0f\xbb\xf7V\x1e\xb8\xe7\xe7\x91*{\xcf#\\\x87\xf22\x12_\x19A\xd2M\xb9\xa9O\xee'\xec\xf9y$\xcb\x99\x9d\xa7\x0f\xb8V\xf6\xfc\x82\xac\x1d$]\x87\xf22\xe6ae\x9c\\\x92\xad\xbc\xc5)\xe5=\xb0T\xa0lZ\xfa\x1eh\x15\x8f\xb2\xe7\xe7\x93jo\x16as\xc4\xc3\x1eh\x15\x8f\xb4\xe7\xe7\x93\xfb\xf0=?\x9fd\xc8\xb1\xbe\x99\xe2a\x0f\xb4\n\xefT\xd1mm\xb3\x0c\xa0UxS\xd2\x90\x92l\xe5\x01\xad\"0\x95\x0d/\xd5\xd6**1\x17\xa4\x93N=\xd2\x99\x92\x15\x9f\n\x1a(9d\x058\xb1\xc9\xd4p\xa9\x0dg\xee\xf9Y\x80\xca\xb8Y\x89i\xa0EM\x0d=w\xd6 d\xa1\x03\xb3\x93C\xe7\xa3\x9cX\xb5\xb3o\xcf\x0f\xdb\xa1\x90\xc5q\xe2\x94\xae\x81S'\xd8\xdc\xf3s\xa1U\xfb\xe0\xcc \x86L\x8a\xe7\xfe\xca\x82|\xb2+B\x1b\x0c\x92\xf7\xfc\x14M}{~\xd8\x81\x85<\xd2&n\xf9\x1a:u\xa3\xcd=?'\\\xb5T\x9b\xb9\xd1\x90u\xdby@\x8dAF\xc5-\xa1]\x12\x92\xf7\xfc\x14e\xbd{~\xd8\x05\x86<\xb3J<%h\xf0\xd4\x037\xf7\xfc\xdcx\xd5^\xab\xcc\x03\x87\x8c\xbc\x9a\x87T\x1b\xe4T\xdc\x13\x9cH!y\xcfO\xd1\xd7\xbd\xe7\x87\xadH\xc83}\xe2\x92\xadaS\x17\xd6\xdc\xf3s\x80U\x0b\xf5\x99\x0b\x0b\xd9\xb4\x9f{\xeb \xb2)\xae\x08\xcb\x83\x91\xbc\xe7\x87\x9d;-\x0f\xdb\xf3s\xcb\x94\x9d\xe6\x16\xad#y \x89\xa7\x84\x10\xd9\xa6\xd4\xd4#\xf5\xe1{~n\xb9r\x16\xe6n\xee\xd7\xca\x9e_\x88\x95Cd\xebH^\xc2<\xa8\x84S\xcb\xb1\x95\xb68\xa1\xb4\x87\x95 \x94L\xcb\xde\x9b\xad\xe01\xf6\xfc<2\xad\xcd l>W\xed\xcdV\xf08{~\x1e\xa9\x0f\xde\xf3\xf3\xc8\x05\xdc\xe9\x9b\xc9U{\xb3\x15x'rN+\x9b%\x98\xad\xc0\x9b\\\x06\x94c+\xcdl\x05\x819ip\x99@\xc9\x8f\xf8\x91B\xa2\xc6\xaf/\xfe\xfa\xfc\xed\xcb\xbf\xbf@\xbf<\x7f\xfd\xd7\x97\xbf\xbe\xa1\xedL\xf9N`\x8d\xaeP]\xec\xf2\xbe\xbc\x11_\xa1s\x7f\x17\xf0S\xbf\xf7\xf7\xff}\xe0\xefs}\xe0\xef\xba\x9e\xd4\xe4\xfb\x184\xfa\x96(\x02\xbb\xae!\xd2&5\xf9\x80\x9f T )\x08\x91\xb2\xb1IM>\xe0gb\xc6\xfcfR\x93\x0f\xf8\xd9TR\x80s\x07\x10\x80/\xbcp\x9di`\xc3\xb1>\xcft\x99 'v\xb4\x82K\xed8\xc5`xf\x07\xca\xb5\xc3\x99OM\x05=\xf7\xa1\x01\x1e\xe3\x83\x17\xe1FlccV\xe8\xb2b\x9b8\xe0\n0u\x00\x15;\xb63\x07R\xaef\x9byUU\xe0s/\x1c`2?b\x11n\xcbUlN\xe1\\\xc6\\%.\xbc\x82L]H\xc5\x9c\xab\x99\x0b*\xd7u\x95\xf9\xd5U\xf0s?\x1e\xe0\x02\xbeK\x11n\xd2>\xd6\xa6b.{\xf6\x89\x15\xac\xc0R+L\xb1d?\xb3\xe2\xe4\n\xf6\x99GE\x05<\xf7\x80\x01\x16\xfdk\x13\xa1\xd6\x0b\xb8\xe7\x9c\xe4H5\xbf\x7f\xce\xd6\x05+3\xfc\x9a\xde?\x07\xa15\\j\xc3\xa9\xab\x005\xbd}\x0e\x02\x8e\xb5!\xb8\xcc\xad\xa6\x86\x9e\xbb\xd1 \xcf\"\x84\xc7\xb4\xf4\xc0\x8b\x15#z\x07$\xc2\x928Y4p\xea\x04k6\xc53'Z\xad6\xce\x02T\xd7X\xe6\x01, #t\x97\xdc)vnU;{\xc7,\xc2\x93\xb8y4t\xeaFk\xa6ngn\xb8Z\xff6\x0bQ_\xe3\x99\x87\xf0\x80\x9c\xe0\xd5p\xa7\x98{\xa5\x9a\xdb?\xac\x11\xa6\xc4\xc3\xa4\xc1S\x0f\\\xb3\xf8j\xe6\xc1\xabFXeAU\xd0\x98\xe6AL +|\xd1\xdb)V\xefU\xab{F>\xc2\x91\xb884l\xea\xc2j\xc6\xeeg.\xb0Z\xf3>\xf3\xab\xadq\xcc\xfd\x1c \x1fps[\xa8\x81\xed\x83#\xad:?\x8f[\xb3\x17*m\xa3\x811,\xc2`cT\x84a\xe6\xa0\x08\xe3\x8c1\xd1\xa5\xa21$\xba\xc0 \xcb\"\x80\x05\x8ea,[/t;\x831\xf2\xd9\xa1\xe6\xc0g\xc7\x1a\xe3\x9eOec\xd8\xf31\x80l\xe6\xeb\x88\xa1\x96\x0d|\x07\xa5f\x07\x8al\x1d\xbe1\xe6\xc1`c\xcc\x83a\xe6\x98\x07\xe3\x8c1\xcf\xa5\xa21\xe6\xb9\xc0 \xcb\"\x80\x05\x8e],[/t\xccsp\x18c\x9e\x03k\x8ey\x0e\xb01\xe6y\xd56\xc6\x06\x90\xcd<\x8e\x13f\xd9G\xdd\x83\x1dty\xfb\xfc\xbb\x9f_\xbc\x19~\xfb\xa1YwK\xb4\xef\xfb\xc3\xf2\xfc\xbc\xcf\xd7\xfb\xfb\xa6\xee&es\xbei\xd6\xddy\x81\x8b\xaa\xa8\xfb\xee\xbc'B\xce\xc7\x9d\xbd\xc9\xba\xc18?t\x05\xdf\x91^5\xed\xa6h#\xfex\x89\xf8o\xdf(tV\xdd%\x9a\x8a\xef\xb0v}[\x1e\x8aM\x14\xe1\xa1qG]\x89o\x8avY\xf7\xfbh\xbd/\xf1\xe6i\xb3\xd9<\xa3\xa5\xac\xf2\xf5\xfb]\xdb\x1c\xeb\xcdPN\xd3.\xd1\x972\x8f)\xb1j\x9a:\xda\xb5\xf9}\xa88\xc1`\xd3\xee\x14a#\x87)\xad.\xf26\xba\xdd\x97}\x11*m\xe4\xd0\xa4Q\xcdB\xc5\x10 Q\xac\x9b?\xda\xe4\xed\xfbP\x19+\x9c\xaf\xdf\x0b\x19\x8f\x1b\x9a\xe8\xed\x8b\x7f\xbeE?\xbc\xf8\xfe\xd5\xeb\xe7o_\xbe\xfa\x95A\x1ea\xa4Z\x07\x82\xacad\xc0`\xab\xf5\x17\xa4\xbd\x87\xd6\x03B\x82\xd5\x80\x80`- `@%\xd4\x9e\x84\xf4\x04\xa1u\xf0G\x12\xab\x03\x04\x04\xeb\x00\x01?_\xea\x80\xde\xfe\xeb\xb7\x17\xe8\xcd\xf7\xcf\x7f~qZ\xffBN\xb5\x02\xdd\xca\x16]\xa1mS\x0f\xd3\xc4\x0f\xc6\x81b\xd6x\x8d\x13\xc0\xe5\x87\xc2}\xfcW\x07\x18g\x7fu\x80q\xf0W\x07\x18\xa7~u\x80q\xe4W\x02|\xb6\x9e\x8c\xf6c\xe4\xf4\xf6\xd7\xe8\xc7\xa6E?\x15ms\xfeK\xde\xbe/\xfa\xb2\xde\xa1\xb7eO\\\x88(\xe2\xed\xbe\xe8\n\xb4+\xea\xa2\xcd1\xbeGy[\xa0\xbei\xa84\xb4mZT5\xab\x92T\xe9k\xd45hU\xa0u\xde\x16\xdb#F\xc7n\x90\xd7\xef\x8b\n55\":\x16-\xea\xd6mQ\xd4\xdd\x840\xb0Nu\x1b\xcd\xcf\xc8\x7f\xf6E\xbe\xa1\x93\xa2Au\xe1\xe4%\xfaR\xfc.0t\xb6:\xd9F\x19\xe5\xed\x8e\xab\x10v \xc6\xe7\xcc\x839\xd0\xdb\xfbC\x81\xde\x0c\xc6G\xfc\xb0\xf3d\x1b\xa3\x8f\x1611\xed\x9e\xb7\x89\x15\x910DjE\xa4\x0c1\xb3\"f\x0c\x91Y\x11\x19C\xcc\xad\x889C,\xac\x88E\xd8PB;\xafm4\x8f\xea\xee\x8c\xfd\xceMI{w\x8f\xc3X\x17\xb4\x8d2I\x82\xe4\x0f\x97\x10\xd9m\\N\xecb\x88\x05,q\xc1\x12\x01K]\xb0T\xc0f.\xd8L\xc02\x17,\x13\xb0\xb9\x0b6\x17\xb0\x85\x0b\xb68i\x00\x1d\xfcW\x19\xee\xabN\xf2^\x059\xcf.\x02\xf6\x9d\x1d/\xbb\xce\x8e\x92=gG\xc9\x8e\xb3\xa3d\xbf\xd9Q\xb2\xdb\xec(\xd9kv\x94\xcfiJ\xc20\xf8\x0c\x1b>\x13o\x0fy\x1cw-\xde9\x1a|\x87!\xdfyD\xa9}&\x1a}\x88\x83|hG\xc9>\xb4\xa3d\x1f\xdaQ\xb2\x0f\xed(\xd9\x87v\x94\xecC;j\xf1\xf9\x12\xa6W\x7f}\xfd\xfc\xb7\x9f\xfeE\xfe\x0cH\x95\xaa\"\xef\x8e\xadH\x96>G\xde \xbf\x03t\xfe5\xfa\x85\x96\x88\xca\x0e\xe1\xb2*\x87:\xf7\x0d\xfa\xbf\xe7s\xb4\xde\xe7m\xbe\xee\x8b\xb6#\x03\xe9\x84\xe9F#\xac\xca\xef\xa2\xdbr\xd3\xef\x97\xe8KF\xe0\xa3\xb0]\xe8\xc5\xd4&t\x90e\x97L\xa8~\xf1\xb3\xcc*\xbe\xce\xdb\xb6\xb9\xb5\x17@\xe9R\x11\xdf5\xcd{t\xc8\xdb\x9c8\x06u\xfd=.P4>\xe9H\x02U\xd6\x9ba\xde\xbfA\xb7e\xbfGu\x83\x86\xa8)\xd79\xe6otM\xa8\x1a\x14G\x8b' ;}\xb0DqA_\xb8\x94\xf7\x9e\xa6\xf2\x13\xbe\xd5'\xed\x0b\x0c\xbe\x8e\xd6\xf9\xa1\x93\xb2\xa3\x9b!\x02\x07\x81#U\xaa\xcc\xf7M\xb5\x1a\xb2\xa9~_vh\x8d\xf3\xae\xa3\n\xe7\x88\xd8a0^\xdf\x1e\xebu\xde\x17D=\xf4\xb4i\xc9z\x05\xc2E~S\xa0\xbc\x1bL-\xa3\xf2\x9e\xb16[\xb4n\xea>/\xeb!Gd\xfbR\x13\x9e\x0f\n<\xd1\x94nq\x0c\x96)\x86y\xcam\x9b\x1fHU\x9b\x9b\xa2\xdd\xe2\xe6v\x89\xf6\xe5fS\xd4\xdf\x083\x8d\x94\x02\xe3\xf2\xd0\x95\xa2Va\xb3e\xe1^\xf9S\x8cP\xe0\x8a\x979\xa5\x80#C\xb5\x95\x89\xc7\xa4\xceI#\xc9\xc3+\xc2\x8ds\xd3x\x90\xb8\xc0(\x81\xe2\x04\x8c\x14.v\x8c\x06I\xb4#`8\x1f\xf7\x9b\xc4es\x9e\xc5}.\x07\xa2S\xd2\x1cn\xb2\xea\x01\x0et\xf1x\xfc\xe7d\xb5\xb9\xaf\xfal\xde\xab\x1e\xe2\xbc\xea\x8f\xf7\x9d\x92\xedps\xe1\x07\xb8\xce\xc5\xe3q\x9d\x93\xd5\xe6:\xfc\xd9\\\x87\x1f\xe2:\xfc\x19]\xf7\xc8I\xce\xdf\xde\xbe\xfc\xf9\xe5\xdb\x97/\xde\xfc\x019\xcb\xf9\xd7\xe8\xc5\x7f\x1e\xcb\x9b\x1c\x0f\xc3i\xdf\xa0 \xafit\x1fu\xeb\xb6\xc1\x98\x0e\xb8\xe21\x1b\x9c\x8a\x96\x1at\x84/\x11\xc5\x8bq\x95\xae\xe0\xf3\x14A>\xd5\x94\x1f\xfb\xe6\x1b\xe91=S\xc6\x9eR\xe6\xaa\x8d\x86\xbf\x8d\x03Q\x044\xd8}Ra\x0dA\xa5\x8c\x08\xef\x98F\x1b\x15US\x19_@]amE\x93\xa1\xfaF\xb5\xf9\xea\x8ePh\x80a\x13\xa6\xeb\xed\xed\xc8\x15\xbd\xf5\xdb\xd1\x1f\xa6\xb6y\xda\x1a\xd2\xbaz\x88\xd2\xb4\x07St\xd6owx\x98\xce\xe6i9Hg\xec\xd4\xf9\x91\x9b\xee\xdf_\xbey\xf9\xdd\xd0z\xff\xf5\x07\xb4]q\xd3\x04z;\xa4\x98\xfd>\xef\x87\xac\x92v^hu\xecQ\xbe^\x17]W\xae\xf8\xba\xea\xebb+\xd6\x97\xbb\xbai\xdeO\xd6\xf9y\xde\xae\xf7\xe5M\xd1\x9d\xef\xfb\n\xbf\xcb\xeb\xcd\xbbu\xd7\x9d\xefKr\x0f\xe2\xd0\xda\x87\xde|\xdb\xb4\x11\x97V\xe2\xb2\xbf\x1f\x8fG\xe1\xf2@\xddyh\xba\x92\xee\xb6o\xcb\xbbb\x83\xfeGY\x1d\x9a\xb6\xcf\xeb\x9e8\xef\xddH\xcfW]\x83\x8f}\xa1C\x06YK\xd4\x16\xeb\xfei|\xb8C\xd2\xff\x9f}\x83\xce\xbfF/_\xcc\xcf\xd0\xcb\x17\x0b\xd2%\xe9\xf03\xa4\xfc\xeb\xd9i\x89\xed K\xea\x03DMw\x17\xd1\xbd\xe7\xaai\xfa=y\xebj\xd7\xe6\xf7\xe4\xc0\x181\xdc n\x9b\xaf\x8b\xe8\xa6\xe4\x0b\x18\xea\xde\xd8x\xdc\x8f\xfc\x8a\xf3\xbe\xf8\xdfO\xa7\xcf\x0c\xab\x0b \x9aN\x12\xa0\x17$\xaaI]Q\xabvER9D\xb9\xa7\xf1d\x9a=S\x99\xe5\xae\xd8\xc0O.\xa7*\x9c&\x13\xff\xd5\xc6\x18mQ\xd6\x869\xa8\x8a\xaaQ\xd83\xb7i\x12\xa8\xaa>\xfb\x8c\xe6<\xff\x1a=\xdfl\xd0\x81\x8e\xe6c_\xc9\x82\x88=g\xcd\x95\x88[\x1f\xdb\xaei\x97\x9cE\x1e \x10\"\xc2:\x92\x0b\x08Y\xac\xbbE\xbf\x15\xed\xa0E^\xf7h\xd5\xdcE\x0c\x95\x93\xa1\xb0ljt\xc8\xfb\xbehk\xb4m\xd9\xd5\xac<\xbbiVe\xde\xe5{\\\xd6\x93uS\x9d\xafp\xb3;\xdf7\xb7Q\xdfD\x94\xbb\x88F\x81\xe7\xe3{X\xe4\xef\xc8\xa9\xba\xbc>\xd2\x16\x98\\2k\xb80\xc7\x18M'Y\x87\xd6\xc7U\xb9\x8eV\xc5\x87\xb2h\x9fN'\xf1<;C\xd3\xc9\xc5l\xf8\xf7lv\x86\xe2\xd1\x17r\xe1\xcbe\xbe\x15\x8b\xfcl\xb1p\x89\x9e<\xa1\x81&4_\xa2\xe9\xe1\x8e\xfc?\x9e\x1f\xeePr\xb8C\xedn\x95?E\xd33\xf6\xbfI\x82\x9e1&\xf2\xfad\x9bo\xcac\xb7De\xbd/\xda\x92\xae\xd5h=\xb3\xb9\xb8C\xab7\xee(\xd1\x05_\xfa;\xdb\xb7\x1ar\x11\xf2\xf7\xbe\xa0k\xc6\xe2\xc1\x07\xb2Iu\xb7D\x91\xbd\xb3\xfd$S\xc9\x06;\xd3\x89\xa4%(\xd6T\xfa~\xd1\xff\xb2\xbe\x97t\xbbd\x18,:r@\xf6}Yw$9 \xbfE\x87\xae8n\x1a\xb4mh'[\x0d \xc7\xa6\xdcn\x0b\x92\x8a\x8cU\x1b\x8c\xc8:\x81\xb2\xe8\xc41\x83\xd5\x8e\x87\xdf\x99\xf2\xd7\xd8\x88\xa5gz#f6\xd3_\xa7TF\xaa\xb1\x93x\xdc\xc9\xc4\xff\x8e^\xfe\xfa\xc3\x8b\x7f^k\xafT}@W\xdc\xbf\xd7\xd0\xfbT\xd1\x14]!\\\xf6E\x9bct\x93\xe3c\x81\xa6\x8c\x12\x1b\x94\x98Q\x12\x83\x920JjPRF\x99\x19\x94\x19\xa3d\x06%c\x94\xcb\xcbK\x83vyy9RA\xf2\xe55\x9f\x1aU\xf9\x1d_\xf4\xe8\xe8\x9e\xc0a03\xb3\x07\xe3\xc8\x870\xea\x8b\xdd0*3>\xd6\xf4\xd0\x15\xea\xfav\x18\x94)\x92=\x16\xa0\xb2/sl\x82\xc8c\x06:\xd6]a\xc8!\x0f\x997~\xf8\x95N\xf8\xba\xe5\xf9\xf9\xa6\xb8)ps(\xdaI\xd5|(1\xce'M\xbb;/j:\xfd\xfbG\xb1:\xff\xfe\xcd\x9bs\xe1M\x84\xde\x1c\x8a\xb5\x98/\xde\xde\xdeNnS\xc2\xf2\xf6\xf5\x80L\xce?\x10\xe4d\xdfWD\x9f\xe7\xc3\xd4\x16\x17|\xf1\x88\x17{\xd8\x97\xb8<\xdc\xe6\xb8oh_\x9c3\xdc\xf9\xed>\xef\xa3\xba\x89\x9a\xba\x88\xfa\x06o\xa2\xfb\xe6\x18\xe5\xab\xe6\xd8GL\x0b6\x0d}[\x1eH\xca_\xdc\xf5E=\xccpH\x11o\xf7E[\xa0j\xe8m\x86<>G}Y\x15\xe8\xb6i\xfb=Kv\xf8\x15\xe0\xaaK\xc8Ap\xf4\xaa5\x93#>'fg\x8e\xea\xa6\xdf\x17-:\xb4\xcd\xbf\x8bu\x7fF\xc0\xb4\xb8\xba \x07\xb9\x069\xf9\x86\x1c?\xea\xc9\xa1u*\x7fH\xd3\xbac\xd9\x0f\x0c-\xc1\x8es\xb0\xebz\xf2!\x9a\xa2\x8fc\xaf8\xa5+V\x1f\xa2X~\x1a\xf3\xa7\x89\xfc4\xe1OS\xf9i\xca\x9f\xce\xe4\xa73\xfe4\x93\x9ffl\xd9k\xf2\x81\x84\xbfD\xb9\xbc\xbc\xe4\x1c\x97&\xe9r\xe4\x1b\xc2\xfe\xa3\xd2\xb1'\xf1l1\xbbH\xe7\xb3\x85\xe8\xa0?\x88(\x97\xe4\xf01\x87\x15\xc3C\\A\x90G\x1cA\xe3[\xa2\x93\x07L\x95\xc7\xed\xe0\x10\xfa\xf5\xc5\x9b\xb7/~\xa0\xbf\xbf\xe5\x91P5\x9b#\xa6o\x1dt\xfd=\xa6Q%\xcf/YGG6 \x87H\xa2\xef-\x0c\x80a>\x8e\xd6\x95\xe2{\xca\x1b\xad\x9b\xc3}Dg\x0bd\xb4D\x873\x07\xf1\x88]\xd4\x86m\xdbH\xcf\xc8\xcd\x01\xe2/\xc2\"\x1c\xc3\xc4\x8c\xe7p%Q\xfb\xf8\xcc\x87H\xbc\x88\xd4\x8b\x98y\x11\x99\x171\xf7U\xba/{\\\xe8\xb5\xc6e\xd7Gm1\x04\x95bT\xe997\xa7\xfa\x95;\xe5\xa4\xa3\xfc\x88p\x923\x97Q\x7f\x7f(\xd8[MZ\xb1\xc4g\xecd\xe5\xe1\x7f\x1e\xa4i!?\xbe\xf3%.\x86D\x96_n\xc12%\xf9(\x8f\xb8\xe6C|\nD;\xd4\xa3\x03L\x0d\xba\xe20\x84f\xd3\x8eJ\x80%ppN\xc0\xba\xa8\xb2\xda\xa1\xe1\xff\x84_O\xfe\xa4\x83L\xe2\x19[UY\xa2\x15n\xd6\xefM\x97\xd4\xef;\x94\xf3D\x97_\x0fq4Sj3\xd9\xb1\xc8\x1a\x93)\xed\xb9\x94P\xa97l\x9cT\xde\x17g_Ln\xdb\xfcp\x18\x86\xf4\x8f\xb4\xf9\xebuV-1\x9bO\x0fw\xe2yKn\xd2\x9a\xca\xa72X\xb0\x0dO\x93\x11J\xd2\xfc\xf2\x03!\xb0\xec}\xd5\xdc\x89J7\x07b\xd0\xa8\xcfwQW\xac\x07\xa5\x85>\xc2\xe6[\\pq\xc3\xaf\xd1\xa6l)\x94\xd4\xefX\x8d6\xec\xdb\xfb!y\x9c\xac\xfa:\x1a\xd2K\x16!\xb2r\xdf\xb8\x85/\xd1t\x12\xa3D=o\xc4\xc4\xbe{\xb7\xeak.QiG\xf1$\xc9Zrz\xcd\xa8\x96\xb3:d\x05=*\xfb\xa2\xea\xc4K\xcd\xbc+\x17*\xc7\xc3\xd4(!\xf3#\xfe/\x01\x82fv\xe6$n\x92t\x82C8\x81\xb6\xb8\xf8p\x87\xba\x06\x97\x1b:\xe7\xfaRv\x88\x02\xa5y\xfa\x19\x9a\xa4\xcf\x84\xac\xaf\x96|\xa9\x06\x89\x13\xbf\xa4\x0c\x91\xdd/!\xb1Z\xeeO'9g\x93i\xf2\x8c\xe9?n\x90\x94we\x8d\xaa\xa2\xdf7\x9b\xa7_\x12\xf43a\xd0\xf1\xae\x1d\xd2\n\xc8\x7fy\xd4\x19\np\xed\xe3Q{\xe1\xa5\xeeXUy{\x1f\xd1r\x9c\xb5QJ\xf9\xdd&\xc9\x14aWu\x14\xd2\xe7+2P\x14-\xfd}\x08\x8b [\xd0\xd8\xcfPw\xc8k:\x05\xf2XrzJ\xe4\xcb=\xa1=\x8d\xf5\xe4\x85\xa3$$\x87\xc8\xc1Y\x9e\xbe\xac\x04'\xd9\xeerT\xef\x80\xe6\xa7\xc5\xefg\\\x0d\xad\x0fbmX\xda\x8b,\xd6\xc7\xbe0\xc6!at\xc5\xde\xd0\x8e>\xa5LV}mT\x1f\x1e\x88\x95Db6\x95'\x8cT\xa7\xa1\xd6\x11\xd9\xb7\x1fs)\xcb\xf8\x83\x90\xe3p\x1a\xd7l\x14WlJ3]P\xc7\x7f\xe3\xe0\x85\xb4,k\xcb\x86\xe4\x86L\xf7\xa0\xc7\xbf\xb5\xae\x81{=\xa5\xc9\x8f3\xfdi\x8b\xee\xd0\xd4]\xd1Ee]{}CN\xbe\xa2\x87\xc7=\xcb\xc7\x1e\x16\xfa\x93\xf5\xb15\x8d\x04]ta\xa9\xe3\xd0\xab\xbf\xeb\xfa\xbc?v`G1\x0bm\xf5\xa3\xc4c\xbdi\xd6\xc7\x8a\xdc]\xea\xb4H\xec_\x86\xfaR\xd63\xa2z*\x05\xc0+\x85@\x1d\xd9\xc8\x01\xb6\xceD\xba\x89O\xac\x03\xcd\xa6\xe2\xe9\xffk\x0dB*\xe5Y,\xe5\xa9\xfb8\x9d\xff\xa8\x07\xe1\xb8A\xc5\x0e<\x8c\x80\x89\xb1h\x84l\x8dK:B\x93)\x07\x18l\xa3\xdc`0\xe6\x11\xf1\x8c%\xd5\x91x_p\xa0\xea\x9d\x10\x81\n\x8f\xb1\x86\xad\xdf\xa6\xa8\xdd\x97\xa6\x9f\x10\x91/R3\xd5B\x87\xb6\x98T\xe5\xbam\xc8i\xe3\xf01\xd4\x18;\xe5\xaeB\xbf7&\x92\xce\xb1\x91\x95\xb4\xe1om!\x0d\x81\xabl9\xc6V\x9a\xc4\xb8\xbf?\xec\x8b\xba\xd36\x88\xecG'\xa0}\x03\xd2\x8d\x03\xbb\x05\x94E\xbc\xeelQ\x1d\naE\xb2\x1a\xbc\x94\xe9\xfc\x1c\xf1\xf92\xea\x1b\xb4\xcfo\n\xd4\xdd\xd7}~\x87\xf6\xe5n\x8fK\xf2\x0d\n\xf2\xc6O[\xe4\xeb>\xa2\xc4\x88\x12\xc5\xc7\xbf\xce\xcf\xa5\xb3\x06\xe7\xe7<\x8c\xce\xcfIT\xf2\xd3\xa9\x16m\xcc\xcb\xb1\xce\xcf\xa5vEw\x17\x87i\x8c\xd1\xa6\xc00\x15Q&t\x8c\x06cP>\xeb\x94\xe6[$\x05!/\xa3\x91\xae\x99T\xc2\xfbNl\xc7\xce\xa6\xd2i\x1ei\x9bv.\xb5\xee\xb1x\xfa\x03\x06\xa7i\x05\xe4\x89\xc7\xdf\xc76E\x06\xa7h\xddTU^o\x1c5\xa5\x86\x11\xd3s6q\xe9t\x0ee\x86%z,^Q>\x9b\xe3\x7fC+\xa6r|\xffi\xb1\xb9H.S\xf2\x1c\xdck3\x16\x8f\xad\x0dG\x99\x07ty\xddE]\xd1\x96\xdb\x91\xc6'\x00sv\xbc\x94\x85\x1e\xff\xae'\xbc\x92\xcf}\x96\xf2\x1a\xb1o|Ebb'\xa9\n\xaf\x83\x9by\x1b55]3\x1a\xaf/\x05Og)\xeb5\xc2\x14\xe9T=\xb3%\xf7\x18\xbaX\xdb\x1e#\xbc\x99\xcf\xb7\x18M)\xe6\x0e~&\x0d\xb3\xb6u\xb3\xa0-\x03\x92\xc3\x16\xb5\xbac\xf1-\xfa\xaf;\x12\xe0I\xaa\xf9\x0fwTD_\x94\xc8\xc4\x92\x9e\n\x0bZxA@\xf6\x8c\xe0\xe5\x0eiU(N\xa1\x03k\x88OV\xa4sC\xe3\xd7\xa5T,\xb8DO\x03\x94g\x01f\x84\x8a@d\xe7\xd7\x8c\xd7t\xe4u4\xa4u\x7f\xe3J\n\xe4\x02W\xfb\xb2\xb70\xaf\xcb\xac\xeb\x84\xde#m\xc6\"\x94#\x0e\xa7\x0f\x88C\xef\xe2\x151ef\x9c<\xb3\x9f^\x1b\xd7\x9cX\xa5\xf5\xe3e\xd0q2r\x9a\xec\x8c\x1f)S\xd0\x8eH\n\x0et\x0eQ\xd7\xa6\x96\xabb\xdb\xb4!\xab\x8c\x8fe\x1b#-P\xc9\xf0b+\x92V\xfa\x00\x92\xe8\x06H\xb7\x1c\x81M\xd2~\xd6O\xe4\xd8K\xd46=\xbd\x9d#\xeePYo\xcb\xba\xec\x0b\xb2S\x9d\xb7g\xe3\xf5:YgH\xd7n\xe5\x19\x7f\xcc\xe5{\xda\xbd\x1bM;\xa2\x9eP\xd6\xf0\xf9\x9bK\xa6@r\x8b\x1b_\x94\x0f\x12(\x18\xce\xd0dn\x11\xcaGtp1\xd5}G\x8c\x16\x87\xef\x8b\xfbm\x9bWE'L\xaa\x02\x80N\x95\xbe\x94\xae\xfe\x000\xa46\x1f\"\xbex\x9a\xce\xa7\x9bb\xa7W\x0b\xa9\xdd+r\xf7\xb6\xd2\x94R}S\x83\xcf\x92\xb5.\x15N*t)\xe4\xca\xc2\x9c\xac\xe5#%\xbd\x10\x0b\xefR2\xfaU\x14\xd1\xcb\x1887VO\xd6\xab/,\xf0\x1f\xed=3E\x83\xa2\xeeI\xd9\xa2R\xbc\x00v.\x90\xbd\xb3\x00\xec\x1c\xa9&b\xfa\xbd{\xc7\xd8\xab\xa2\xeb\xf2\x9d\x929?\xac|rE\xff8\xdf\x90\n\x97\xfa\xf5\xc9\x02|\x17%\xfc\xa5\x18cj\x9e\x98/\xc6@EY|\xfaI/\xe8|\x92.R\xcb\"\xbb\x00RN\x90M\xffL\x7f\x91\x94\xd0\xee\xc7Q&`C\xcb5W6\xd5w\xb0\x9b\x88j+p\xbc\x17\x96f\\\xbc\x8b\x93\xb6\x1a\xac\xeb\x00S!z\x8b\x9b\xbc\x8fZuYax6.\xed\xb2,\xfdf\x17\xe5]W\xf4\x1d\xf0V\x876*i\x07J\xb8\xb2\xa2T\xfde\xe3}jX\xcc3\x84r\xfb\xe5\x93\xba\xa1\x1f,\"\xbc\xc6\xf1&y\x93\x03\xd8=\x81\xa6e\xdaKF\xacS\xf8j9\xf4\xb7}!\xce\x838\x8b\xb2l\xd5@\xc5\x8d;\xc39\xc6C\xe7n&\x97c_\xa7n\xe6R\xbe\x9b\xa2\xed\xca\xa6\x8e\x0em\xbe\xab\xd8k\xf0\xc6\x15J\xe3\xe4\xb1\xa8\xd08.\x7f\xf5\xee\x9d\xd6\x83\x9c\x9e\x8a\x1ae\xa9\xa9\xa0\xd4\xac,\x13[\xed\x12\x06u\xd5o\x0c\xd9\xc3\x1d\x9a\xc8+\x06\xdf\xa2My3\x86\x8c\xb4V\x9ae\xeb\xbdh\xc9\xea+\x8c\xa2\xdbR\xd7\x1b\xf4\xa9\xe1\x12\xfdiS\x0c\xff\x081c\xa6\x7f\xb8#\xff\x97\xa7Z\xc6\x0d\xcc\xa20`AOy1JI\x8b\xb5\xb7]\xbf\x9at\xfb\xe6\x96\xfd!5\x0d\xdbF%/\x89\xae2\xf1.q\xd27\xef\x8b:\xa2\x17\xfc\x18\xb2xm\x95W\xb9T\xce\xba!\x1f\x19\xa8\xf2\x1eZ06\x05\xf8U\xfc\xe2\xec\x0b\xbaQ\xf4\xd1\x0c\x97q\xf9\xcf>c\x90WBP\"\x9f\x0f4\x8e\x9e\xa5\xfa\xbb\xf7\xca \x8eU_\x9f\xf62\x97\xb4\xbe@\x8a\xa2\x17\x88\n6\xfb[\x01\xb4$\xc7\xd9\x7f\xef\xdc\xf8+r\xafBW\xc1\xe1\x00\xce\xff\x95\x98MRy\x8b\x8d\xc9\xfc\xff\xf3\x85\xcd\xff\xcbt,\xeb\xab\x06\xf7\xe7\x187\xb7\x85:e\x1b\x8f\x1c\xa5\x86X\xdb\xcd\x04\xda\xbbp\x99\xc7<)p\x18j\x9d\xd7k`#N\xcb\xbd\x06y\x14iK\xa9\xcc\x16\xaf0\xd9\x8f\xa3\xdb\x8e\x8eK\xdc\x8e\x1d\x90\xaf&\xf9\xb1\xdf7\xad\xf8`\xbcT\x07\xb5\x17T\x8c\x0d\x8fI\xf4GV_\x08\x87S9\xc0J#\xc7i\x86\x92\xf8l\x8b\xf1\xc8\x7f\xe7\x00\xc93\x86I\xaa\xb9\x1a\xa0\xc4.xHL*\x85_M\x80\x80BJ\x8c\x0d\x9d\x87df \xf83m\xbe5nF\x1cl\x17\xbe\x93n\xdc\xb3\x91cy\xcd\x1ab u\x99(\xc2q\xccL\xdc\xc1\x12zfK\x99\xac\x83\xdb\xf8\xd0\xcb/\xfc\x94\xd4z\xbc\xc6\x1b\x99.0\xfbS\xd2\xfc\xd5\x93\xb3\xda\x82\x08\xceO\x15;\x15C\xb3k7\x9d\xc7\x00I\xda\xc8\x9d2f\xbe5\xa5\xef\x03\xcb\x16\x01\x92k\xe0x\x0f\x8f\x99a\x9cw\x9d\xd24\xb2\x91\xaf&\xc7\xda\xc74\x99\xe9N\xd6O\xd4\xb3i\xd1\x19?\xda\xd7\x19OH'\xcb\x1e\xb2z\xe7C\xf3\x90\xd3T9a\xd2\xde\x18\xa4\x86Uf\x11\xb6\xa3v_\xc9w%!\xd4\x1c\xfb\xa1\xe3\x826:\x8b\xbbC^o\xd8\xab6\xdd\xd9\xf8Dl\x16k\x97\xce\x84y\x01\xba\xae\xc4|\xb9\x1cI l\x02\x1cBQ\x95\x83BE \x13\xdb\xc8\x17\xd0A\xa9%i=\x14\xbd\xa5\xc7\xd1O\x05]\xce\x92\xaa\x0bf!\x05k\xf6\xa0G\xdf\x84\x19l\xa7,\xbf\x9a\x94\xf5M\x8e\x81\x97D\xc4\xe8\xc9\x00?6m\xf5\x82^\xd4`\x9ep2\xce\xe2\xb3\x82-\xf3Ns\xea\xf2\x90=*\xfbV\x1e\x7f\xc0\xa2H\xec\x84\x19[c\xb6\x8d=K^\xa9E5y\xc4\xec,lGV\xf5\xc9%\xd4\xa2\xf3\x00\xdf\x1f\x02Z\x88\x08\xef\x0c\xccc\x8f-~z\xfd\xc5&\xef\xf3%\xb9 \xfc\xbc\xbb\xd9\xfd\xcf\xbb\n\x9f\xa1\xbft7;tW\xe1\xba\xbbzb\xde\xe1\x99L\xa7\xd3\x01\xfb\x84\xda\xe3\xeaI<\x7f\xc2\xca\xbaz\x12gOP\xde\x969\xbbv\xfc\xeaI\xdf\x1e\x8b'\xdf\xfee7\xae\x19\x0e\xcf\xf8\x92{r\x86\xa2\xf8\xd9\x93o\xffr\xc8\xfb=\x89\xcb\xab'\x7f\xda\x92\x9f'\xe4\xcf\xa8=\xe2\xe2\xeaIqS\xd4\xcdf\xf3\x04m\xae\x9e\xfc\x92\xa08\xdd\xcfn\xe2\x9f\x92\x9b(\xfePe\xd1\xfc\xa7\xe4&\xdeg\x7f_|\xa8\x12\x94\xfe\xfd\x02G)\"\xff\xdcD\xc9>\xbb\x89\x92\x9f.?\xfc2\x9bd\xe8\x92\x00\x93I\xf6\xf7\xcb\x0f\x83\x98d\xf8\xfd&\x1a$\xc5\x1f\xaaK\x14\xef\xe3\x9bd\x1dM\xa6\xc9$\xb9\x88&q<\xc9\x92h\x92N\x16\xd1$\xbe\x9c\xc4\x17\xd1dF)\x8bI\xfaS\xbc\x8e&Y\x86\xa6Q\x1cMfY\x14G\xf1\xdfg\xeb\xe9\xf0\x8c\xfc\x89\xe2(\xde\xa7\xebi\x14\x0fr..\xa3\x04%Q\x82\x86\xbf\xd0\x14%hrq\x89\x12\x94\xec\xd35\x91\x82b4\x99e(F\xf1M\xb6\x8f\xe2\xbf\xcf\x7f\x8ao.\xf7\xf1\xf4&J\x06U\xb3\xfd\x05\x95\xcd\xcb\x8a\xe2\x9f.\x0c\x05\xba\x91\x1a\x11yD\x0d\"w\xf8\xed\xa7Tpp\xe2\x87'\xdf\xfe\xe5|0\xfe\xb7\x7f9\xdf}\xfb\x97\xc1\xaf\xdf^\x7f\xf1\x8c\xb5\x0b\xfe\x9f\xba\x89\xda\xe2P\xe4\xbd\xd2\x81\x9f\x9f\x933\x00m\xb9):z\xcde\x95\x93\x05\xd3\xa1\xf9\xb2H&\xcf\xd7\xc7\x16#\xb6\xff\xaeo\xc7[\xdb:o\x8e\x99\xde\x1a\xd5\xc6\x98\xe8\x8dQ:\x14g4&\x91c\xf3\xd7\x84\xacU!U\xe8\x1b4\xbe\x0d\xc4\x85\xf1\xc1\xd7xYL\x7fg\xc9Z3I\xd7\xf15\xce\xb1k\xa3\x17\x95^\xd7\xbf\x7fq\xf6\xc5\xf99\x8aB\xfe!5\x18~{G\xeen\xeb&\xdd\xba\xe37\x90\x12\x1aY*\xa3U\xeb\xf7\x05\x0c\xfb\x8f\xed\xb1\xa6\xf7\xd0\xacs\xbc>\x0e\x0d\xf4uQ=\xfdr\x98b\x8e\xf7\xbf}\xd9\x16\xd5\x1b2\xe9$\x04t.\xbf\x8c\xfa\x1fm\xd1\x1f\xdbZ\x80\xd0\xd7(\x96n\xe8c7\xcb\x89\x89\xab.[\x9a\xd1\x12\xca7\xc6c@3.\xfc\xcfk\\\xe4\xed\xb6\xbc\x1b\x97@\xd8\xee\xda\x19\xff\x13\xbe\xc7M\x0c\x1f\xfd0#\xd6\xa6X|\xd3\n=\x19\x07)\x970\xa2\x04\xf9:\xcf^\x1b\xd5X\xe5i\xbdI\xf4\x9e\xa1/\xc5\x05\xa4\xe4\xc1h \x16\xdd\xf4\xb1\xd6\x9f3&^\xef/\x8b\xbc+\x96\xe8\xe9\x00*\xeb\xe8?\x8f\xf9f\xc9t\x91oE\x9fd\xd9\xf4\x0c\xa1\xc9\xf4\";C\x93\xf9\xc5\xf4\x0cM\xb2t\xfa\xec\x8c\xf1\x11\xf0\xd2\xc1\x97\x11\xbe\xc5\xf0\xef\xf8r\xe4\xfb\xcfc\xde\xf6\x10\xdf\xc5eF\xf8\xd2))o\xe0K\x12\x99\xaf\xacA\xbeEF\xf9\x86b'\x17\xa4\xd4\xe9|\xe4\xebH6 \xf0\xcd\x16T\xcf\xe9\xc0\xb7\x98\x0d|\x8b8\x13|\xc5\xdd\xa1\x01\xf9.y\xfd\x08\xdf%)/\x1d\xf9\xd6e\xbb\x06\xf9\xe6S\xca7\x1b\xf8.\x89=S\x89o\x18j\xed|\xd1$!\x1c\x8b\x94\x947c|\xcd\xb1\x97\x1c\xa8\xf2%T\xcf\xd9|\xe0\x9b\x11m/g\xd3\x91ot\xa0\xc6\x17\x13{\xcec\xa2\xe1`\xcfx0\x92R \xf3\xa0\xcaHn\xd1G\x93\x0bR\xc1\xd9\xf0o\x83\x91\xbbP+qp9\x05\x0fE&&\xe7\xe8D\x953\xbd$u\xccH\x94esS\xd7\xd1\x8b\x9a\xae\x97r\x91 P\xe4\xe8G\x95s\xba\xa0\xb5\x1cXh\x955\xc6\xd1\x91Z\x91\x8c\x91D6\xabd\xb2\x18\x03@\xf2\xa5\x16\xa8\x99\xd40\xb2\xc1;\x93\xcbL\xe5c\xbe\xd4\x02gF\xf9Hh\xeb\x8e\x1c\x0b\x1c|\xa9\xb5(\xb9e\x10\xb5!F\xe2K\xad \xcf%\xc6\xe9b\n12WjU\x9cIm8\xa3\xb1\x9a\xa9|\xcc\x93\n\x1f\xf3\x9f(q\n\x96\xc8<\xa9\xd5\xf1\x82\x94\x18\x93\xf6\x14\xd3\xbec\xae\xf21GjF\xbd \xad\x91\xea\x98P\xf7g\xd9\xf4\xd9uMW`\xc7Aq\xe8f\x9f~\xf9\xbe\xb8\x1f{\xe9\xff(\xb7\xa8\xca\x0f\xd1>\xef\xa2\xf7\xc5\xfdS\xd2\x15\x9f!\x06B\xda\x0c\x88\x8d\x8d\x03\xc3\xae\xe8\x15\xf08T0\xc1\xb7y[\xa3'\x7f\xab\xdf7\xb75\xba\xbe~\xf2\xa7\x8f\x03\xee\xf7\xeb\xeb'\xa8\xac\x11a\x9d<\xd1\x06\xdd\xfa8~\xe9[\x0c7\x80\xd6\xe3\xf40\xea\xcb\xaa\xacw\x11\xaf\xe3R\x82kc6;\x03C?\xdd.D\x01WeR\x82\xfd\xa2\xcc\xdezI\xa6\\\\\xde\x1d\x8au\x1f\x91e\x00}\xb4|\x06\xecCjo\xbe\xab\xe7j\xa0\xb1\xde<\xfd\xe2|[\x85\x9e=x\xca4@\xe7|\xc0\x1e\x12\x1c\xfd\xb0\x86y\xd2\x85\xe5\x0c\xdf\xa2\x92l\x1d\x1bZ9O\xf9\x18\xaf\xed\xb5\xe3\xa6*\x7f\xa4\xae\xd3\xd0\x1f\xf5\xadC\x9e\x85|\xb9j\x9b\xdb\x8e]\x87Y\xdc\x0d\xc9\xf0\\\x0f\xf4\xea\xe9\x97\x87\xf2\xae\xc0\xdd\x19\xfaR\xc0tF\xb5\x15<=\xd6e\x8f\x8b\xae\xe3\xac\xcf\xcc\x06\xc0(K\xfe\xcb`;skB\x93\xc6K\x03\xc4\x8d\xaa\xb1\xdf,\x02yN\xcaJ=W\xf0FrZ\xe5w?\x11'?5\xc2M\xbe\x05DK\xc6\x80\xe6\xce\xc2@\xb3\xbf(g\xfc\xf8\xe4\xd3/\xc9WcT\x83\xd2g\xe8\xea\x8af\xa5\xc0k\xf3\\\x99\xf1,$\xbb\xf3e\x98V=Un\x12If\x87\xbbg#\xab\xb6\x0e\xa5i\x8a\x80U\xa6\xff(pW E\xad\xaaY\x95\x18\xb8\x1a\xc0T+M\xa6\xa6Zh\x89\x16\xe9\xfc\xf1\xd5\xda\x14\xdd\xfb\xbe1_\xc5\x03\xf4\x8a\xc9\xf1\xf4OW\xc0,\x8b\xf6\xde\xdf \x0f#\x96\xfa\x1f\x0f\x87\xa6\xed;6\xd3\xe8\xcf\x98\x11\xcf\xb8\xd6O\xe0)\x03\xb4d\xc6\xcb\x93\x0e\xcfu\xfb\xfc}\x81&\xb3N[\x14\x12{\x08\xca-\x0d\xc0\x8a\x109\xde_\xd4\xdau\x0eg(\xcd\xfe\xfcL\\`\xcf\x8f\xe8\x9aS\xb6\xd3\xb7p\xc9\xe1\xd9L\x7f\xeb\x1e\xd8\xaf\xdd6m\xe58*\x15\xb4o\xab\n\xd1vi\xc8j\xd8\x13\xcfb\xd8\xf5\x17\xf6\xd5\xb0\xeb/\xd00\xfd\xff\xae\xb9\xbb\xba\xfe\x82\x9e[G\xc9\xf4\xfa\x0b\xb6\xb4\xb5\xb9\xba\xfe\xe2\x978\x9d\xcc\xe2\x0b\xf4\xff\x10weMn\x1bG\xf8\xaft1\xd1&v\x08,\xc1cAJ\xb1\x9e\x92<9\xe5*W\xf2\xe4u\xa9\xb0$(\"\x02 \x04\xc4J\xb2S\xfa\xef)\xcc\x01\xcc\xf41\x00\xedu\x02=h\x89c\x8e\x9e\x9e\x99\xee\x9e\xee\xaf\xd3x\xbb\xd9\xed\xe3e\x9aD\xf1\xf2a\x1b\xa7\x8b\x9d\xfec\x97na\x01\xf12U\xbf\x96\xe92N\x17Iwg\xf7\xb0+\xa3U\xbc[la\x15oW\xfb\xc8\xbc\x13\xc5\xe9\xc2\xfc\xb1Kw\xb00/E\xfdK]\xb9\xa9\xfeC\x15\x15uEI5\x7f\x9b, IJ\xd5\xc8h\x15'\xeb\xe4\xe7\xc7\xd9\xbd1\n\xfd\xe1+\xbd\xef\xe88A\xd6.\x044E NI z\xdb\xfb\x03\x8c\xce\x83!^n&\x1d\x98\xab Q\xd7y\xd6d\x97=F\x1e\xb8\xfb\xe1\xfc\\\xb6E]\xe6\xf4\xcc\xdb\xfaKm$l\x08\x8c\x1b3\x99\xb1\xf0n\xd4[\xc8\x7f\xb1q\xdc\x8b\x0fC\xb3\xd1Y\xdd\x96\xab\x81\xf6\">\x18%\x84\xb3\x9a\x98;\x9b\x97fg\xef\x0d \x1c\xe4;\xc2\x80m\xbf\x04\xc9\xab?\x0eBF\x1aW\x04BJI\xc0\xec\xabT\x9f n6\xa6h\x1e\xf1@\xa21\xa6\xaa\xbbR\x02\xe3\xaf\x0d\"\xb5\xbb\xab\xc9u\x15\x9ex\x03!\xba\x03\xbb2\xf6\xfdU'rAw..~\x9a)\x83u\x803\xfbS\xbc?\xe5\xfb\x0fO\xd5g\xeaL\xa1\xe3\x06\xbd~r\xa9^\xdd\xc0\x1f\xab\xd3\xa8F\xd8\x92u\x16\x07\xdf\x9fJ\xbf\xce\xa3xp>\xcf\xfd\x10\x0bp.\xbe\xcf.\x1f\x98\xac\xd9@\xa3_\x15mV\x16{\x9f\x13zQ\xc5\xfb:Hm\xb2Z8{\xb3\xed>\x95kqT\xc1\xf0\xe4\x0e\xfe\xa4\x89\x02o!\x0e'\x07\x98\x04/\x89\xc1:!\x90\xb5\xc3\x7f\xcb\xae?>\xa4-\xb8\xc7\xb5\xf4\xd1@\xc2-\x8b\x01-\n\xee\x10\xf0^\xb1\x17\x9aF\x14\xf8\x8aN\xa5\x9e\x03\x03\x0e\xa4@\xb4 \xa5'\xd6\x9fI\x19H\x01\"\x0d\xd4\x9eZdLA\x9fKN\xcb\x94\xe0\xec'6O7\x0e\xdf\x12\x11\xb5^\xab\xa6\xe6\x87\xc9\xe4\xdf<\xce\xba!x\x9ci\xc7\x95\xc7Y'\xf3\xa4\xeb\xbf\x9a\x1b\xdau\xe5qf|W\x1eg\x9a\xdf\xba\x9a\x1f\xe2\x95\xb9 \xd9\xc0\n\x92$~PW\nk\xe7\xd1\xc2\xfe\x0d\xee\x07\xcb\xfe\xae\xf3Y\n\xc9\n\xb6\xfd[]\x07\xeeM\x0f\x06\x05>\xe4\xd4\xe1\x8d\xf8\xe0\xad\x7f(\xb2\xb2z\x1f=\x7ffl\xee\xc7\xe2s/T\xfa _\xf5=\xcfp\x8d\x8c\xd6\xd8`=\x18\xab\xf5\xef\xb8c\x8bCS\xd5\xaaj\x90\xcc\xe5n\x13H\x95L\xb5\\\xd5\\\xf5\xc0\xca%=1\xa2\xbeu\x82p\x02\xee\x94\x89\xcf\xd5!+\xc3\x1da\xec\xfe\x1cI\x81\x8f\xf8\xe5\xa3}Gu\xf0\x15\x91B\x06\xb5\x9edR\x18\x0f\x99vIL\xd4\xb9\x81v\x9a\x1a\x92\xd3\xf9d \x86\x14(/\xbc\xc8\xf4\xb4\xa8?\x1b\xfc\x082\xae\xb6m8 aI\xa5\xf5~T\xad\x93!\x19]\x06 \xc5\xa7\xb5\xdd\xdf6k\x7f\x1cx\x80/\x18d\x12\xa0+lH\xf2\x84\xa0y\xc4^V\xa2\xc2\xd4\xb0Q\xa4\x8cTe\xaf\x00D\x18\xe0\xcdcb\x16\x06\n\xe4\xecI_\x1a\xc2\x84\xef\xa2\x85\xa1\xb8\x0d\x88\xc2\xbeB\xa0\xd6\xfbq\x9e\x98\xd5\x84\x19\xc7dI(\x8e\x1c\xac\x033\xa5O \xe2|\xc0\x8c\xc3\x18\x04y\xbc/\xabk\xae\xcb\x14G@ro\xb6\x17\xa3\xeb\xf5\x8f$\x7fl{1\x86Y\xfb\xc8h\x08\xf6\xa7\x8d\n\x85 \x8b gn\xb8\x85EDqqA\xe7\x1c\x90XB{\xdd\xc4MfCU\xde\xf8\xb7\x189W\x0b\xc9\x92\x89\xb4\xdd8\x00\x13}\xad\xb3\xcb|\xf8\xd9\xca\xb1\x15v\x15\xd0Q\x03C\x91AH*\xc0\x93\xfc-\xb4\x07\x1fG\x17\xd7C\xa2h\x99|\x04\xe0\x11\x10T|~[\xbd\x7f\xcf\x1c;\xba\x84$\x8bfH\x81Q\xbb)F\xbe\x1dW\\,#u\xeb:\xc4+\x84V'\xc3\xe4\xbbjm\xbf\xa3\xe2L\xd1\xde\xcb\x1e\xcc\xc2\x0e\xa3,\xf4\xafDUSh\x83\xeb\xe2\x15\x91\x04\xee\xe2}U\x96Y}\xcd\xe5\x81\xa7\x95\xe1\xba\x90\x0e\x10\x06\x85\x99\x063\xc2\xcca\xc6\x8fw\xb8\xf6\x010a\xec\xdb\xfe+O\xf3\xac\xa2\xb1\\\xbbj\x86\xfa\x85\x0e\xfa\xd6\xd0\xdd\xf5\x0e\xfa\x16\xf0\xf0\xed6\xde\xec \x8d\xd7 $\xab8I!Y\x96\xd1:\xdela\x1dov\xea\xacm[>D\x0f\xfe\x19[@6\x07\xee\x80\x0d w$\x8a-\xfa\xd7\xf3\xb9\x8e\xda\x8aO\x922\x82a\xfd\xb2\xc9)B\x006Q\xbcFS\x08\x82\xd3\x88\xf6\xd3\xc1\x9d\x9f\xdeA\x13\xb5\x03&F\xeaT\\d\xe4V\x17uE\xfd]\xe6\xc1\x06\x0d\x85M\x15\xf85%\x92x\x8bH1\x82\xf7\xd2\xef]q\x92\x9f\x81 g\xf2\x9eX\xce {\x0b~\xd7\xea`<\xe2\xb8d\xaeej\xa78\xaa#\xa5D\x9a\xa6\xc66W`\xed:\xb6 \x02x\xddTu\xde\xb44K\x8b=m\xf0\xf5\xa6\x11\xa3\xdc]\\7\xc5\xb9\x08\"\x85\xf7%?\x8a\xdd\x04\xde\xfc\xc4\x1d\xe4\xba\xcfe4w;\xecQS}\x12\xfbu\x177\xf9\xbf\x9f\x8b&?\xfc\x06\x0d\xc3\x1d\x1f-\xf3c\xde\xb4\xc5>+-\x06F[\xd5d\xb1\x039\xaa\xd6^L\xc9\xe0\xb8(Z[\x07\xc2\xb3\xb1\x17\x05b\xf2o\xc4\xd76\x1b\xcf4`\x18\xa6\xc9\xa7\x0fX7\x15.\xd7)\\\x98\xa6)\xa1K{`C\x82\x99R@\xa4\xb4\xfbF\xb8\x9dx\xca2r\xd2\x8b\xb3\x93\xf3\xe7\xf0#n\xf2\xcb!o\xf2\xc3\xdf\xb3\xe6\xc3\xa1\xfat\x81zR\xc8\xb5\x8b>\xe8\x85C\xdb?\xf4\xad\xe1\x10X\xf9|\x9a\xb0\xe1\xe1P\xdf\xa2\x19/FR#\x1b\xacL\x93\xeb\xd2\x04\x1f\xbb\xb6\x9d9\x0ch\x0e\xec\x16\xa2\x1f\xc5f\x8f\xd7\xbf\xdc\xb5\x9c\x95\x01\x9cs8)9\xaa\x17\xd4\x8d\x03\x7fe\x1b\xc4\xb8\x9dD\xd4\xdcYZ\x98l\xa0\xa75\xa7\xc0\xbb\xc4\x01\xa2\xec\x8c\x00\xb9\x8bJ\xcb\x8d\xb9\xc9F\xcf\x1e5\n\x03\x9f\x1dg\x9a\xa6\xa3\x82\x90\x97~\x10\xb2\x04\xa7\x81\xe8wZ\xb3\xd0\xcc0\x12[Mj_\x8b\xa9\xc8F\x90*\xb0\xe2\xff\x85\x11 \xc5\xcf\xa9\\D\xbb\x87\xc5#\x1d\xf2=\x8f\x17\xcb\x90Y\xea\xb4\xb9\x899\xcb/\xcfg\xda\x00[\xf3\x17\xfb\x9a\x86\xcc\xe3\xcb\xd7\xcfH\x0d\xb3\xf9,\xbe\xe6\xcd\xc7\xbc\xb9\xbaD\xe6\x9d\x96\x82>f\xe3x\xec\xa3xs0!\x8b\x11\xc5_\xf7\x1e\x0bY\x8c\xf5\xc5?!\xf2\xcd:&\x10\xb7V\xd1\xb53hIAi\x95q\xc4mn\xdb\xe0\xc6\xf7\x87\xdf\\r\x18\xf5 I\xfd*q\x9b\xfb\x8e\xdb\xe9\x0dQ\xc0\xb1^z.\x0e\x87\x12\x9bB}\x9ccJW\xdc\x7f\xf6\x88\xee.|\xeeB\xcc\x05 i+\xb1\x0c(W3N\xb9\x95\x07\x19x|P{}\x91\x07>\xdeW\xe7\xfa\xb9[\xfc\x9e\x9br\xa8\xb4\x977\x8c)\xd0\xde\xc7\xe9C\xc6\x86\xca\x85\x97sn\xf3\x0b+x\xd2\x89K)\xbcB\x99\xd9\x1by(\xc4\x13N\xf7\x8cE@\x172$I2\xc5\xe9\x82\xe8T@\x08\xc6v\x1e\xf4\xa7\x8cj\x16`, g\x18\xa4c\xdeAqW\x87E*\x87\x80\xfa\xeb\xcd\xb0k\xf3\x8b~\xab\x93(\xd9\x9f\x88W\xdaq\xbb\x12\xb6\xa2 \xaf\x01 \x182\xfe\x95\xa9\x067\x08I\xbc\xee%4\x05\x1c\xf2\xa6|Bh{\xa1\x1d\x8f\xb7\xd1\x81?7\x84[\x81\xd9sg2\x02Q\xa7\xe7\xc0\x99/\xcf\xa7\xdeS\xee4\xda^\xe2\xda\xe6\xbf\x16pj\x05\"\xec\x1b\xa7\x07\x83\xf3-\xb6\x9c\xb7\xf4\x83d\xed\xb7\x0f1\xd5\x1c\xee\xf5\xb6\x0e\xb1\xde 6_\xdf\x84\xc2\xbb\xa3\xc0\x0d\xac:\xca\xa6\x02\x8b\xba\x19tE\x9eC\x8de\xde\x9a\xce\x82-\x9bL;D\xcc\xd3\xfcf\xea\x86Y\x16\x84e64J\xd4E\xc7^\xad\x83^\xcdB\x96\xc2\xb8UP\xad\xc8\x91\"M\xd4\x1e\x04[\xe0\xf2+\xb6\xe8\x11\xef*\x90\x86\xc3\x88\xaeY\x93\x9d\xf3\xb6\xdb\x9c\xf6U\xf9\xce;\x14\xf27\x88\xdd\xee\xd5\x1b\xb8\xbf\x87c\xd5\xec\xf3+T\xedIay\x95\xcf\xe7\xcb\x15\xda\n4\xe4\\\xf7W{\xca\x8b\xc6\x1e\xc6\xeb\xcf\xcd\x82#\xecLF\x86 \\!\xb8(\x0e\xa2\xd4\xcaO\x10\xaa\xff\xa0Y\x18\x0c=mq\x9c \xc9\x9a\xd1\x9d\xafj\"\xd72\xa6P\x91\x9e\xef\xdey\x1a\xc9\x04\xd5\x0c\xc1|\xdf\xdf\xc3)\xdb+\x82\xbe/>\xe6\n\x11\xa0=\x15\x97\xf7\xd0T\xd5\xd9\xd0\x19\xbaJ\xcc(\xf4\x9f\xfd\xe3\xbb\xbf|\xd7\xe9\x96\xc7l\xdfV\x8d\xb2ZUGhO\x85\x1a\xa7c\x99\x7f\xee-\x12\xbe*\x14\xa7\x9bq%\xd0 \xa0\xe9O\xd1\xc8\xc8\x85\xa7W\xd0\xa6\xca\x1e!!\xc3\xd1\xad\x19\x87\xfc\xe7\xd3B\x16\".\xe1u8p\xa0w?\xb1t\xa1n(\xb6w\xce\xb4\xefYF\xe9\xb0\x91\xfd\xd6Q\x03qN\x98\x00\xd3\x15\x97\xb9\x7f\xc39^\x1b\x97;\xf9\xf3o.\xba\x077\xbd\xb8 \xcb\x08i\x99k\xcf\xf9-[\xc2:\xa5\xb1-\xca\xcfu\xfb\xd3\xbb\x8fY\xf9\x9c\xbf\xd3\x8ec\x96\x93\xd8\xe4 nk\x07\xd0tO+\xdb\x90\xdb\xfd\x8a\xef\xea\xe2Dc\xf2\xa7a\xca\x9a\xc3l\xaaI\xe73\xc7\x0e\x99\xbe\xf1yBg\xe6/\xb9\xf4y\xd8\x7f\xd8\xbe\xef%\xa2u6\x02x\xd9}@\x17\xf6r+.\xcd\x9f\xdb\xebAX\xb6\xf1?\xf8\xbf\xce\x8d\xd9|\x16\xb7U\xfd\x941\xe3\x92H\xd9\x0b#k-\xd2_JN\xed\xa6\xe0!k7\xf8k\xe4mG\x81\x0e\xcd3R\x94K/\x94O7\xbc\x05\xdc\xde\x06\x00\x1ek\xdc\x15\x07\x16$,\x01\xfb\x91\x12\xdfc\xc9\xd4ih\xd81\x94|\xc4\x18\xda\xc7&8\x13\x8bvM3\x8e}\xb2\xd1\xe7\xa6\xbcy45\xadV\xce\x1d\x02{\xcc\xe6\x95\xc4@\x01b\x07e\xf3\x8e\xdbu\xff \x13[k\x08\xcd\xf55\xcau4\xbd\x14\x0e\x02\xec\x11\x07\x03\"\x0fBp1\x10\xcd\xd2\xe0t\x84Sk\x86Rc\x8e\x9d\xa7\xc3\x08\xe5\x86\x18\x9b\x05g:\xe5y\xca*\xba\xc7E\xf7\x0f=\xf4\xb9\x14\xc65&N\xf0\x01a\xf6\xd9\x0bq\xb5\xa8\xcf\xba\xda\x92M$\xe5>'\xd6\xc5\x899?u\xdb\x96l\x9d>\xb9\xe9\xf3\x97gJ\x08\xf0\xdbP\xeb\x10v\xc4\xbc\x82=\x7f\x1c\x1e\xf5Z5\xa0\x18\xeb+ \x0b\xd38\xd9q-\xd85\x88\x02\x9b\xb91\x14\xf4\xe1\xcfM>\x13\x03\xe0\xd0-\x8e\xf6\xba\x97\xe1 t\x18_\xcd\xb92\xfd\xc5\xdd\x16\xe4I\x19\xddf]\\\x8e\x15q\x80\xda\xf8;\xf5]|\xcc\x8a2W\xc9\xa1\x8f\x85=\x13tg\x85\xb9A\x04O&\x952\x0c\xdb=\xdcb\x12\xf4}\x94\xea&\x07R\xa7\xfb\xb1w\xf2\xab\xbe\x98CY\xcc\xc1\x98\xa8G\xbf\x1c\x9e\x05\xcc \x03%\x929\x9c\x96s8\xad\xe6pZ\xcf9/\x99)\xc5\x84\xc5 \xdc0\xde\xd7(X\xe3\xef;f\x0b\x8b\x1ecn fG8d\xcd\x87\xfc\xc2\x17h<\x89 \xd9\xbc\x92\xbd\xccT6\xb5 \xdb\xb8\x10>\x83\xe8\xf2\x94]\xf3h\x1a\x06\x86\xf7\xc4\xb1$K\xf0\x07\xbct1\x05\x14!\xe6\xc3\x00\x9c&\xadD\xcf\xa8\xb11C\x92\xe19+\xa7\xa5\xe6\xfe\x15\x06\n\xce\x061\x1e\x9b\x04h\xfc\x16\xc4\xbd\xc5U\x11\xf5\x82M\n\xc0f\xe9\xebs=\x8e\x94\xb0IIE\xde\xc2\xaf\x98T{Y(\xfa\x8d\xa1%\xf8\xbf\xee\xfa\x8c\x87\xd76;\xd7\xfeCFb\xa0j\xd5\xef\xb6\xbb\xa7\xe3b=&\x91\xd4\xcd8|\x82$\xa8\xc1\xf8\x01\x95\xb4\x85\x11\xea\xd4\x0d\xf6Fq\x8b\x91l\xbe\xdd^\x96=\xb7\xa7\xe8\xa9\xbd\x0c:\x85\xe9\xc2H2(\xa4\x98\xcaiT\xcct\xeb\xaa8T\x17\xe7\x04\x96s\xbd\x00W\x9bWM\x9b\xd6,\xdf\xf9r\\\xb9 \xa4XC\x87\xde\xcb\xc0\xd6\x9c\xb0\xcfp\xfa \xdc#j\x85a].)\xb5\x97\xcc\x01,\x13\x15\xecW\x82ES\xfd5\xe7o\xc7\xad\xe9o\x08]\xb8\xb6\x80#\xfa\x91\xe5\x9f\xf1M\xeeE&\x0d\xe6\xa3\xff#\xa1\xa2\xc3R-\xa9\xbb\xc1f\x92\x860\xa8w\xe8v\x8f|Gk\xe2\xd1\x12\x87&\xe6MS1G\xa9t\x87\x13\x08\xca\xd0\x92\xf5~\x07~\xb5:\x1e\xf3MxD\x06\xfa\x183 N\xe3.6\xe2]\xe6\xae\x97\xc1\xa4xDP\x9cz\x86\xf7KE\x18\x88\xd2\x00\x87m\xfd\x15\x98\xcby\x0f\n\xd8sJi\x89PX\xe2\x89]\xdd\xea\xf6\xbd\x82Alb\xab\xaa\xa0\x134\x92Q_\xc1o\x98C\xa99\x13`\xa7\xbe\xaa\xe7\xca\xa6\x81V\xca$?\xfb\x10>\x9d@\x11)\x08\xff\xd7\x1a\xc9\xbf\xdb/\xde\xc0\xfd\xd7\xf07\x93\xcd\x1d\xda\xa6\xd8\x7f\x80\xaf\xef\xa5\x0f\xba;\xaaO\x8a\xbbt%\xe2\xc1\x14-\xa5\x0c\xc5\xb4\xd7\xd3\xc2\xbb\x84\x9d!\x14\x10\x0f\xa8\x80\xac\x9c\xeb\x10{K@\xc3n\xff\xf0\xca\x05\x91\xcbh\xd6\xf5\xd8\xca\x081\xff\xefP\xe6Co\x16\xb0Yo\x85 \xed\xbd\xb9}\xf5\xfa\xed\xfb\xd7g3,\xe0\x1d\x96\xcb)\xea\xc5h\xf7\xce\x84\xb7\x84\x15\x08\xd5aG\x8bM?\x883\x8fQ\x11\xa5\x07q\x18\x06\xc4\xd3\xb7\xd2\xfb,4\xbe\x87_\xfeW\xe0\xeb\xef_\xfc\xb9\xf7\xe7\x17g!g~\xe4\x9d \x00\x1e$p\x8a\x83\x1b\xe6i!\xb9 \xcd\xeb\xc4\xfe\xdc\xe7p\xf2\x99'\xba \xcc=\x05\xcfY\x88\xe5R\xcb\x8c\x91\xf3\x89\xdf[\x0f{\x7f\x10\xff_\x06\xfd\x05\xc4\xd3\x89\x90\x88V+\xcc\xb7S\xf4\x13Ho\x89\x02,A\xc8D\x07\x10\x9b#\x8cnno\xd2!h\x8d\xc1hA\xd6@\xd5\x81X\n\x0b\x81\xeb\xd1\xdd\xfaStC\xfc\x1b\xe6\xc5G8\x88\x90Qa\x802\xed\xc5\xb0\xdf\x7f\xb1\xfb\xe7\xde\xad_#\x11y\x1e\x081\x8f\x82\xf4\xean\xe6l=\xad8{=Br\x1b\xc2\x14\xb1\xd9g\xf0d\xee@\xc8\xd5\xd0$\xc9\xf6o\xda\x1a\x07\x11\xec\x7f\x99.\xca\x1f;\x07G\x10z\x9f\x1b\x18\x0b\"\x19c$\x97\x90G\x89\x83\x8c8\x15\xea@\x81\x9c9\x0b\x02\xb6!t1=+8\xdaA>\xf1?\xf9\xccCD\x0b(\x98\x93\xfd\xfe\x8a\xc5\xac@b\x1fK\xac\xe4\xc4\xa2r\x83L\x8fc!\x98G\xb0\x04\x1fm\x88\\\x96\x8c\xdaa\x18\xfb\x97\x94N\x0b\xaa\x9c\x1a\xd5|\xadDEG\xf6\xf4\xc5\x9ch\xee\xa8\xe0.\xbb\x85\x12*\x07\x86\xac\x83SM\x99Ex\x90e\x87\x93>0\xe7x[z\x0e\x91\xb0*\xed\x01\xa5B\x84\xe4\x84.\xca{\xaa\xd0\xd9\xa4\xc5\xc3U\x10a\x14\x10!\xd5\x04~\xbc\xbb\x15(\x12\xe0#\xc9\x10\xf1\x81J2\xdfj\x08\xe3\xd3+\x04f\xe6\xdfO\xb1\xae8\xff\x06\xe68\n\xe4\xcepm6\x9b\xeef\xd4e|\xd1\xa3\xc2\xd8\xa8A\xc9\xf5\xc4\xb7\xc1\xec\x86\xd0\xffU!D\xfc\xac\xfe\x14\xde^\xf9\xc5?1\xbe\xc2Rk\xe3T\x1b\xdd\xe9\x0fj\x8b\x13!\xf6\xe0\xc7\xe9\x0f\x11%_\"\xe8\xc4\x10\x13\xe0?Vh\x15gA\x00\xdcv\xc7O\xa1X\xb9\x85fU/3\xee\xbc\x86\xdd\xdc\xde(L\xb1D\x98\x03\xc2\xca\xeeim\xb3\x8br\x86\x7f\x0d\x9c\xcc\xe3}\xf6W\x90KfU\x96F\xa0\xab0\x1e\xa6\xd9M\x88iU\xcam\x9a\xd3\\\xc5\xa7:\x98\x02\xd3v\xean\x94\x13\xed\x943Q\xfe,\xb2Vy+\x0d}\xa5 0-^*\xd6\xf3\x9c\x97\xd2\x9f~\xb8\x87m\x87\xf8ek\xca\xb4C5\xf9\xa0`\xb5\xe1Y\x1b\xfaJ\x1b\x13\x9f\xb9\x0d!\x01_\x7f.\xc0;\xc5\xd3&\xec\xf5\x03^\x85\xaa\xe3\xd7\xfep2\x19\\\xfd\x9e\x11\xf2\x0bl\x87\xfda\xbfR\x86\x8b\xc51\xad>\x16\x0ej\x987\x1c{\xd67s\xd0|c\x15W\x08\xa1\xf5\xaa\xc6U\xd2]\x13\xb1\x04Np`\xeb\xfbQ\xb0\xcf\x0e\xe4\xd3*\x1eI2\x0da4\x0b\x88\x87\xeea\xfb\xb8\xd8\xbfb\xab\x15\xa3\xc1\xd6\xf8!y\x19\xc9\x90\xd4\xdd[\xac\xa8jf\xc8\x7f\xdb\xdc\xbf\x8c?\xfe\x02\xdb\xbf`\x01\x93\xcb\xcc\x17\xbfF\x81$*\\\xac\xb2\xf0N\x10\xfe~`Q\x90\x0fsBAm\x80\x05`\xbcDXT\n4W\xfb\x88\xd0t!\xbcb\x1c\x90\x08\xc1K\x85Y \xcd\xc5\x8a\xd5\x90\x158b\x1f\xee\x94#\xd6\xf1\x18\x87\xde\x9f\xb2\xb7\xd01\xb7P>~wW\xe1\xd0\x10\xe7]\x86\x02\xe4\xaa`\xd3\xce\x85\x87)\x9aA\xe2\xcaV!\xa4\xa5o\x11F>Y\x10\x89\x03$\xc8\x82b\x19q@\x8c#\x8foC\xc9\x16\x1c\x87K\xe2\xa9\x1d\x9c\xcd\xcb,0\x8e\xe4R\xadw\xcf\x82t\x83.Gc\xdeZ~\xecv\xf85\xc8\x15\xf2\xdc\xe1\xcf\xf4\x0c\x08\xef\x0c\xbe\x88\xb4;U\n\xb6\x10\xca\x95zR\x07\xaf9\xb4\xf3\x83\x7fR\xb8u\xd7HH,AY\x05Q\x03s\x0f\x87xF\x02\"\xb7\xb7t\xcd\xbeE5/\xba\x03;\xfa\xcd\xd9\x1aB\xd7\xec\x1ev\xc3 p\x1c\xfe7\x10\xc0\xe2\x9b\xc6\x7fw\x07O\x89\xbfoz=z\x06\xeea{\xbd\xe0\xa0W\xce\xb7\x85|v\xe4v\xc4\xeb\xd9\x1b\x14\x02\x9f3\xbe\xaaB^y\x8d8\x1d\x80;\xe2\x02\xf8\x9ax\x15QY\x83`\x7f\x07\x01|\x0c\xa7\x83\x17\xdex\x04\xf4\xa7\x1f\xe2\xce\xad\x81y|\xde\xb3\x8b\xc6S\xf0l\x02\xd2\x08\xfc\x0d\xa1\xf7\xe0\xdf\x81`\x11\xf7\xaa\xe3\xa5X\xf8\xeb\xb8\x12\xe7v\xe3\xd5jo\x9aU\xf9M{\x14$\xf7n*\x015)7\x1e\x0fl\x12\xa9\x80\xf9B\x17\x05\x13\xa9U\xeb\xdci-\xbd7\xc3\xc9\xc4n\xf1\x00U\xbcV\x10\x93U\n\xfb\x9a\xf1Z<\xec&b\xb4XT~\xebH\xe4\x17n\xc3\xe5\xb2\x08\x95\xc0\xb1'\xd3\xda\x92\xcbF\x80\x03\xc1~\xa1lC\xaf+\x94\xd9eUX\xd7\x83\xd3JpG.3\xf0\xaaL\xf8\xbd:Em\xa6\x1c\xe6\xc0\xab\x86\xc7\xcc\x9a\xc1+\x07\xdcl\no*\xb3\x19M\xcfV\xcaJ\xd4]\xabt\x89<7E\xcf\xab\xb8M\x8d\x0b\x84$\x85\xca\xe2i,\xab\x06\xfe\x9a)\x7f\x96\xd6>\x1f\xaf<\xc8\x01K\xb0F\xaa\x16\xbd\x9b'e%,\xa1#\xc9\xaa|S\xb1M=\xda\x8d)\xdd\xec\xc8\n\x84\xc4\xab0M\xb7\xaa\xe3\xf9\xdan\x85\xb4\x1b\x97\xaa_R\x17\xbb\xfb\xe9\xd5h4\xba\xaa:5\xb5\xf6\xc3\xfep\xd0\xe9\x8f:\x83\xfe\x87\xc1d:8\x9f\x0e.\xfeYr]\x14\xfa\xcf\x0e\xe5xL\xa5(\x07X\xc8\xf8\xa4o\x07h\x1f\xb0'\xc9\xda\x05\xec\x19c\x01\xe0\xf2\x82\x91\x0b\x86\x99\xee\x8c\x15\x9d\x07xa\xac'\xa1\xbe\xce\x1e \xb4Y\x82\\\x02\xaf\x81\xa0\x92\x95\x11\xedV\xaf\x9e\xe3\xa04Y\x1c\x93!n\xad\xa0\xb8\xd5\xa7myS\xd5\xd7\xa7\x9d\xdf\x9fP1\x0e\x1d\x7f78\x9c\x14\xea\xe3\xc7\xdb\x1b'm\x1a\x0cG0\x9e\x9c_t\xe0\xf2j\xd6\x19\x0c\xfdQ\x07\x8f'\xe7\x9d\xf1\xf0\xfc|2\x19\x8f\xfb\xfd~Y%\x8a\xc2\x83\xfc\xfd \xa1T\xfd}\xaa\x83'\xad\xe6BTpb\x9e\x0d\xc6!\x875a\x91xJ\x9c\x93>\xeb`\xed \xee\x1b\xc0\xdb\x86N\xea\x9c$\xbeX\xa1wR\xe0\x92\x95\xc8\xabY+r\x8a:l\xf1\x86\xfa\x94\x903:\xc9\x90;;\xd7\xe8@\xac\xdd\x8b6\x0e\xea\xdf\x89\\\x1e\x00\xb4\xc7C\xd4\xc1D\x16\xa7\x02i\xc7\xd7\xd3^1*1\xa1\x87\x8e\xa3\x9e\x91\x0d\x04\x81\xfa\xeb\xe0Q\x96\xe9\xc1\x7fG\xc0\xb7\xe6n\xefb\x8ec\xb22\x12\xce\xa3IF\xcc\x99\xd9\xe0\xf4\x05\xbd\x1c\xb52i&\x8b\x97~\xe9\xc7\x1bW\xe6\xac<\xc1\x92\xa2\x88\xc2C\x08\x9e\xda]\x81s\xc6\x1f\x93g\xa9;8T\xb1\n\x1b\xe31\xbf\x88\x98\xa9/P\xc1\xe4\xa2 `J\\8B\xe5hx\x80\x8f\x10xQ*\xb2p\x0c>HL\x82\x02\xef\xbe*\xe6,\x8d5-\xf1\x84-\x9aP\x97\x7f\xe4\xa5\x1c\x01\xab\xb9.\xa1\xba\x9af\xbdz\x07\xeel+\x13\xfb\x13b\x8eW \x81g\x86\xdc\x89Y\xdd\xc4/S\xbd\xbd\x1c\x92Z?\xa5\xb9\xcb\xdc\xe2\x92\x0c\xcdAz\xcb\xfc\xe2Rf\xbc#\xe46\x00\x13]g\x96\xe6-\xf5\xb7\xbbC:\xe4\x16Q\x182~\xe8\xf6\xd5\xa7\xee\xe5.\x8f\xf7\x8a\xbd\xa9\xebd\xc4\xad0\xa1\x14\xe4\xd4\xbb\x1c\xce\x87\xb3\xfe\xb03\xf3\xf1\xac3\xf6\xfd\x8b\xce\xecr4\xea\x8c`0\x1e]\x8c'\xfe\xf9`X*D\x82\x90J\xc8\xe6\xaf?\xbf\xfe\x1f\xfe\xcf\xf5\xdf\x1e\xee.\xd7\x9b\xc9\xbb\xd1\xc7\xbf\xff<\xf8\x9c\xb9\x8c\xd0)\n\xb1\\f\xbe\xe2\xf0%\"\x1c\xfc)\x92<\xca\xee \x05s/\xf1\"7\xa5\n\xbd\x15\xf3\xa3\x00\xd0\x97\x08\xb81\xeb\x87\xbc\xf2^\xbc%\xf7\xfe\x88?X\x99\xe6\x89\x11n\x82k\x1e\xfb4g\xc9\xed\xb6\x94\xf3\xfdV\x93r\xae4\x06\x844\x84\x9c\xe3Y\xe7\x85\x1b\xa4#\xdd\xdcm\x08\xfbWUZ\xda\x96q\xdeT>\xd4\xe6\xde\xa2\x96q\xeeP5i\x19\xe7\x07\xcd\x1e\"$\xade\x9c\x1f4\xbb 1\xed\xf9\x16\xac[\xc6\xf9\x11\xd0;Tfe\xcb8O[\xcb8o\x19\xe7-\xe3\xdc\xb4\xe33d\xbb\xe6\x94K4\xcd\x96Ql\x19\xe7-\xe3\xfc\x18Jb\xcb8\xcf\xb7\x96q\x1e\xb7\xa7\x06\xbee\x9c\xe7\xdb\xd7\xc3\xbfe\x9c?-\xf2-\xe3\xdc\x0e\xf6w\x10\xc0\xb7\x8c\xf3\x13\xa2\xf1\xfa\xc4\xe8\x96q\xde2\xce\xbfb\xbc\xd62\xce\x0b\x9au=8\xad\x04w\xe4Z\xc6\xf9Ak\x19\xe7E\xcdI\xef\x9a\xe5B\xb7\x8c\xf3\xe2\xd6,\xca-\xe3\xbce\x9cg\x9a\x93\x06\xba`R\x83\xb5\xeb\x08\x87\x93B=>;\xb7e\x9c?\x05\xc6-\xe3\xfc)\xf1\xb6\xa1\xd32\xce[\xc6\xf96G\x97t\"\x9e\x17I\xe9\xe5\xc4\xb4\xfc\xf3\x96\x7f\xde\xf2\xcf[\xfey\xdcN\xe4\x9f\xef\xa6q\x9d#u#\xcb\\~4\xf3X\xe9\xa0\xda\xe6\xf3nG\xa1N,v5\xfd\xb8d&\x7f\x88\"\xe2\x17O\xd3\x14]\x8d\xe6\xc3\xc9\xc5\xc8\xeb\x80\x87\xaf:\xe3\xfe\xd5e\xe7\xea\xdc\x9bu\xf0\x00\xbc\xf3\x8bs<\xbc\x02\xbf98O\xa4\xf3\xc7\xd7V\xbc/>\xce5\xe1 H\x80\x12q\xee)EI\xb8\x10\xf9\xaf\x83 \xb7\xab\x88d;>Kn\xfa\xb9\x92\xfasHe\xdb\xd70\xd5\x96$P\x0dckKM\xd8\xfc\xcdf\x93?\x0e\xce\xb6s>\xa2~6\xc2\x92\xf4yRT\x1bN\xf6|]`\x1d\x92<.)\x1e;j\x8d\xa6w\xea'w\x1cR;\xd6\xc4\x8e\x83\x96\xd9q\xa8\x11\x16;A\xe0\xa06\xd5\xa1\xef\xe9\x81\xafS*\xa7\x11\xf0\x9aM\xe2\xb8\xfb\x15\xd9\xf6T\xa8:'o\x1aA\xb6\xd1\xb4\xcd\x89I\x9b\xa7A\xb8\x1a\x93f\x9355\xd2\x10N\x89\x9a\xc6\xd34U`\xa4^e\xac\x0fe\x1e\xa7\xcc=\xb6Xl\xbbJ\x1e\x1b\x0c\xf1\x82\xd0\x92\xfb\xcd\xf9\x94\xbb\x13\xd3\x89Q\xddf\xbe\x8e\x13?E\xfe\xa6i\x95\xfe]\xb5w\xa7\xac\xc9/\xb0-\x8f\xd1+\x97aA\x10\x9doU\xd1\xd5\xaei\x1bx\x0f\xdbd:\xd4G\xc9\xd0L\xa1 b\xba\xd6;\xbc\x80;3\x15]s\xbcD\x98\nA\xb6\xa9\xa5T8\x02Z1!\x11\xcc\xe7\xc4#@e\xb0\xed\xa2[\x896$\x08T\x1f\xb0\n\xe5\x16\x91y\x99\xa1Y\x02\x07\x1dlS\x86VJ\xe39\x88(\x90\xa2\xa8\xe8*\x99,{\n\xc2\x19\xcc\x88Py>.\x96a1z\xba{\x8d\xa2\xfe@\xa3\xd5\xcc\x98\xb6x\xc8\x08\xaf1 \xf0,\x80\xf2\xfb\xcd\x02\xed\xb1\x88\xcaOZX\x99\xd5\xda`\x81\x04\xc8\x97\x88Ha\x922\xaa\xff\x88&&\x84)\xfc6d\xcfA\xa9L(\x96\x86m\xd6\xe4\xe2\x9e4\x99\xbe\xe3\xa2Td\x9bhl\x13\x8d\xdfK\xa21\xf5]\x8a\x93\xfcm\xe6\xf113\x8f\xbb\xfd\\m_\x8es\x1c\xef\x8986\xac\xe6u\x0c\xc6/3f:6<\xe9\x06\xaaw\xcd\x05\xc9\xc7\xb4zG$ta\xdd\x14\x7f\xa3\xc1\x161\xaac|6\x9f\x0b\x90\x88q\x94\x1f.Bb\xc9\xa2\xc0W;\xa7\x80\x1c\x83Ka\xa5\xfb*\x04k?J-Y:\x85.E\x01\x88f|e8\xeem,\xf1\xcdh(i\xb4\x02N\xbc\xe4\xbb\x03\x16\xe0f 4\x01>\xa2\xe9\x86\xb9\xa7\xe6\xb7ZZ\x00B\xec T\xb2(\x8a\x84\x82\xfa\x1ej\xe2\x99\x17\xff\xc8\xe0\xee\xb9\x18\x05\xf0\x06dE\\\xd1\xd5\xe7\xa6\xb9\xa3\x12\xcf\xc3\xf8sY\x0d\x8ew\xf0(\xd8\xdb\x0c\xf1\xe2\x00\xec9\n`.\x13O-v\xdd\xe2\xadZIN\x16\x88\xe9D\xe1<\xdb\"\xc0\xde\x12\xe10\xfc\x8a(j\xff\xe9\x83v\x9fv\x97WA\x99q\xb8\x14\xa0ZA\x99\xb63\x9aC\x99\xa4\x95\x8c\xd6\xee\x00\xd4'\xc6z\x94\x15G\xa8\x17D>\xe4\xd1\xc4\xa6\x97d\xab\xd8\x9f0\xbd\x0fg\x1c\xc59\xe3\xf9`$'\xec\xe3\xad\xd8\x9b\xac\xbd[\xd0\x0f\xc5*\x0f\xc9xLzu\xed\x96\xa3Zq\xddx1\x91\x05e\x1c\xf27\x90,\xc6|\x17\x06\x99S\xe7u?\xfdW0\x7f\x1c\xd4\x96 \x8e\x93\x17\x9f\xbd?q$\xe3~s(^\x0899\xaa\x0f\xa0\xbe2#\x8c\xfb\xc0\xbbg\xf9\xdb\x7fO\xa8\x07S\xe41\xb1b\xa2#\xfc{\xd4\xef\x8eG\x8d\xa2Q\xa7\xc4\xc3\xe3'\x05t\x9d\xc7cA\x00\x9e)\xc0\xfc\xab\x97\xa7\xbc\x96W|\xd2\xd7\xf8\xe8\xa2N`\xdeK\xa4d\n\x85\x8fR\xd8Dj|}\xae\xcc\xf3*=\x9a<\xb4\x90d\x03\x9em\x81'\xbd\xbf\xe7\xe1#gg\xed\x04W\xd7-\xda/s\xf2\xb2\xad\x83j\xbbw\xf9\xcb\xad\x8e]\xb6\xd9\xc2\xea,@\x99,b\xf6\x0d\x0f\xc9\xe1\xd42\x97\x8aJt\x14\xcd `t\xa1v\xc6.\xba\x89\xa3e/P\x8eDG\x10\xbf\xeaq\xa7\x0fK\"\xd0\x9c@`\x7fvJ-\xdc@?\xd0S\xf5x\x83T\x02\xd3'~JO\xdb\xd5\xa2\xdd^\x15Q\xfeH\x99\x832\xd9'\xa5h&\x92\x9b8\x0dR\\\x00\xa8\xe1.)\xdb\x1e'\xd1\xaa0\xa6E\x9c$\x1b\xc7\xc7\xbb\xdb\x1af\xda\xb4\x9d\xf7b9\xd16\x8e\xc3t\xd4\xaf\x9f\xff\xf1\xf0\xf6\x7f\xff\xf1K\xf27\xf5\xadEo|\xde\xef\x03\x1eM:\x97W\x83\xf3\xce\x18{\xe3\xcel<\x18v&\x93\xd9\xe5||\xe5\xfbW\xe3\x8a\x9d\xdb4\xdb\x80\x92\x1a\x9c~+\xe8\x1ax\xb7\xab\x87\xd7\xa5 {\x83n\xbf\xb7\xdb\x0d\xf5\x9b\x0e\x9fx\xf0\xc5\xcf\xcf\xc6\x9f?\x0bF\xad\x12\x1co\x7f\x81%l\xf0\xb6K\xc2\xb9\xe8\x12\xd6S\x7f{3<\xdf\xce\x80,A~\x1e\xd2\xc5\xc8\xbf\x18\xdf_\xc8\x8b\xc9\x18\xcb\xf5PL\xfc\xfb\x8b\xf3\xd0\xfb\"\xd7\x0f\x818\xf7\xa9\x84\xf9\xe8\x01\x9fs\xfc0\x9c<\xd8\xef\xccr\\\xf5?\xed\x9d4\x82r\xe1Y\x9f\xfdi\x97a\xa6\xe7\xc2\x1d1{\xdc\xfaP\x85j\x1f\xefn\xeb\x1am\xd3\xdcW\xb4Z\xb3\x9d\x88\x13\xfb\x89J\x99\xdc\xceT\xd3\xab\xcf,;\xc5\xfe\xc0A\xd2\xae\x03 \x9cbI\xd6\xf0\x91\x93\xf8e\x95\xe9W\xe6E\xa9\xfb \xcf\nq\x92!\xac\xa3aw\x03\xf9\x97m\x92\x97{\x89\xb0D\x01`!\xd3@DY[\xf8\x12\x915\x0e M@U\x08\xcb\xec\xc6(da\x14\x18FT\xf1\xc99\x94\xde\xa4\x05\xfd\xbd\xbbO\xfc\xd8\xf7\xd7\xbf\xbe\xce\xdcQ\x91@\xbdS?\xba\x0f\xa3{I\x1d\x98\xdb\xeb\xb7\xd7\x19\x17\xa14\xaa)\x15\x17\x80\xbf\x00nS\xfb\xd4\xbf\xc0a\x18\xc4\xd4\x8d\x9e2\xa1/\x11Y\xe1\x05\xf4\xc2\x92;z\xe6TP\xa5r\x9b%\xf1\x96ygn\x83Erv\xf9\xeb\x1a\x12\xc3\xe1\x86\xe0\xb1\xfcE\xf5\xdf\x87~\x7f\xaa\xff+\xe6/zK\xf0\xeeE\xb4:\x01d\x07\xf0\xe2N\x8c\xe5}\xff\xf3ug89\xdf}\xbb\xc4by\xe8\x18\x95 \xab\x07]\x82H\xb9\xbd\x1b\x8cq\x7fx\xe9\x0d\xf1\x08\x0fg\xde\xd5\xf8\xe2|\xd0\x1f\xcef\xc3\xcb\xcb\xe1h\xec\x8d\x07\x13<\x9c\xf5\x07\xf3\xcb\xe1%\xe0\xf3!\xf6&\xb3\x11\x8c\x87\xc5\x84\x86g\xc39\xdb\xe5(\n\xb8d\xa5\x02\x8bs\x1an@'\x11\xc9\x0c\x0b\xf0\x11\xa39a/\x84 \xec1\xf5\xf3AS\xf9P\x18\xf2A\x02_\x11\n)\xad\x95\xc8\x17b\x17\xee8l\x11.\xa9\x8e\xafM\xbe\xdcM\x95\xae\x96\xe6\xf39\xa5\xc2\xbe\xafi\x8a\xc1My4B2\x1eS\xd7\xd2l~\xf2\xeb\x0b\x1d\xf3J!T\xfaN\xa1XX&\xeb\x9f\xc4\xcd \xf7.\x93a5EE\x83\xc4*\xff@G\xd2Z\xf2\x1drN\xc7\xb7\xe4;\xd4\x92\xeft\xd3T\xb9\x82b\x9a\x95vW`\x16\x0d\xed\xae@\x18\xba{\xf7\xaa%\xdd\xb5\xa4\xbbgE\xba\xcb\xd6?\xcb\x94\xf0\x80\xa9\xb1W\x11\xc4\x85\x8f\xbbd~\xd6%\x9b\x08\xce\x89\xca\x14\x02\xf3\x0b\xbd\xaa\xde\x96?\xb3$\x83\xe1XF\xdd\xbb\xc6Z;mIq-)\xae%\xc5\xb5\xa4\xb8\xe3PlIq-)\xee\xdf\x82\x14\x97\xc6\xe3G0\xe3v\xb5\xb1?\x88o\xfd]C\x15\xe2\xf6B\xbc\x0d\x18\xf6\xe3\x17\x1f\xa4?u\x98\xc6\xc2\xff\xb1!r\xc9\xa2\xdd\xa3|\xff\x19\x0b\xcb\x91\xe5\xf6b\xf0g\xcf\x90+\xf0g+\xe2\xb0\xca\x9f6L\x91\xca\xfc\xac\xa1\xf5G\x0cy\xa6\x06\x91OI\xa4\xbe\\\xe1u\xab\xbd\xf7v\x1e\xa4,j\xffda\xa1\xef\x88l\xbez\xb5\xa7^\x8e2\xb2 FV\xe1\xaa\x95\xbf\xf0\x14\xb9y\xf2\x0ey\x0e\xb4S\nu\xce.{\x847(\xc9Cesj\xc5\xf7j\x04\xa4k:\x93\xcf\xd2\xbf\"H\xa5p\xcfg\xd9^\xf6\xda\x00\xb0.\x94MG\x80\xdd\xf2D\xc8\x89\xb8\xe9\x1csT \xb0\x06 \xf9fK\xcc\xa0f \x9c\x8dP8\x8f$qV\xc8\xd3\xafXv\xa2q\xd6'r6\xf7\xdb\x95\x95\x93\xd4$\xa1\xb3YJ\xe71\xa4N\x87$:\xb2\x10;\x1b\xc4\xb6&\xbd\xb3BR\xddyh\x84\xe2\xd9\x0c\xc9\xd3J\xf3l\x10\xf0F\xc9\x9e\xc7\xd3=\x8f&|\xd6\xa2|\xba\x91>\x1bD\xb7Y\xea\xe7\xc9\xe4\xcff\xe9\x9f'\x12@\x9d(\xa0\xd5y\xe1\xa49\xfe\xee@c?Bc%\x83:\xaaP|\xaa\x83\"\x99v\"%\xb4\x06\x85\xccN\xf7\xfb\n\xc4P\x97A=krh\x13\xf4\xd0: <5E\xd4el\x8fJ\x13\xadA\x14}\xa4%Z\x8f.j\x15\x17/\xf5\xfa\x86\xde\xb4:\xeb\xdd\x954Z\x876\xeaD\x1c\xadC\x1dm\x9c- controller is a list of DIDs that are allowed to control the DID document. - verification_method: + verificationMethod: type: array items: type: object @@ -84,7 +84,7 @@ paths: Format: did:cheqd::# - verification_method_type: + verificationMethodType: type: string title: |- type is the type of the verification method. @@ -97,7 +97,7 @@ paths: Format: did:cheqd:: - verification_material: + verificationMaterial: type: string title: >- verification_material is the public key of the @@ -125,7 +125,7 @@ paths: can be used to authenticate as the DID subject. - assertion_method: + assertionMethod: type: array items: type: string @@ -134,7 +134,7 @@ paths: can be used to assert statements as the DID subject. - capability_invocation: + capabilityInvocation: type: array items: type: string @@ -143,7 +143,7 @@ paths: that can be used to invoke capabilities as the DID subject. - capability_delegation: + capabilityDelegation: type: array items: type: string @@ -152,7 +152,7 @@ paths: that can be used to delegate capabilities as the DID subject. - key_agreement: + keyAgreement: type: array items: type: string @@ -173,12 +173,12 @@ paths: Format: did:cheqd::# - service_type: + serviceType: type: string title: |- type is the type of the service. Example: LinkedResource - service_endpoint: + serviceEndpoint: type: array items: type: string @@ -194,7 +194,7 @@ paths: description: >- service is a list of services that can be used to interact with the DID subject. - also_known_as: + alsoKnownAs: type: array items: type: string @@ -237,7 +237,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -246,7 +246,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -255,7 +255,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -295,7 +295,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -315,7 +315,7 @@ paths: required: true type: string tags: - - Query + - DID module queries /cheqd/did/v2/{id}/version/{version}: get: summary: Fetch specific version of a DID Document for a given DID @@ -337,7 +337,7 @@ paths: requested version of the DID Document type: object properties: - did_doc: + didDoc: description: didDocument is the DID Document. type: object properties: @@ -362,7 +362,7 @@ paths: description: >- controller is a list of DIDs that are allowed to control the DID document. - verification_method: + verificationMethod: type: array items: type: object @@ -375,7 +375,7 @@ paths: Format: did:cheqd::# - verification_method_type: + verificationMethodType: type: string title: |- type is the type of the verification method. @@ -388,7 +388,7 @@ paths: Format: did:cheqd:: - verification_material: + verificationMaterial: type: string title: >- verification_material is the public key of the @@ -416,7 +416,7 @@ paths: can be used to authenticate as the DID subject. - assertion_method: + assertionMethod: type: array items: type: string @@ -425,7 +425,7 @@ paths: can be used to assert statements as the DID subject. - capability_invocation: + capabilityInvocation: type: array items: type: string @@ -434,7 +434,7 @@ paths: that can be used to invoke capabilities as the DID subject. - capability_delegation: + capabilityDelegation: type: array items: type: string @@ -443,7 +443,7 @@ paths: that can be used to delegate capabilities as the DID subject. - key_agreement: + keyAgreement: type: array items: type: string @@ -464,12 +464,12 @@ paths: Format: did:cheqd::# - service_type: + serviceType: type: string title: |- type is the type of the service. Example: LinkedResource - service_endpoint: + serviceEndpoint: type: array items: type: string @@ -485,7 +485,7 @@ paths: description: >- service is a list of services that can be used to interact with the DID subject. - also_known_as: + alsoKnownAs: type: array items: type: string @@ -528,7 +528,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -537,7 +537,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -546,7 +546,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -586,7 +586,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -617,7 +617,7 @@ paths: required: true type: string tags: - - Query + - DID module queries /cheqd/did/v2/{id}/versions: get: summary: Fetch list of all versions of DID Documents for a given DID @@ -660,7 +660,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -669,7 +669,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -678,7 +678,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -700,7 +700,7 @@ paths: description: pagination defines the pagination in the response. type: object properties: - next_key: + nextKey: type: string format: byte description: |- @@ -735,7 +735,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -785,7 +785,7 @@ paths: required: false type: string format: uint64 - - name: pagination.count_total + - name: pagination.countTotal description: >- count_total is set to true to indicate that the result set should include @@ -811,10 +811,10 @@ paths: required: false type: boolean tags: - - Query - /cheqd/resource/v2/{collection_id}/metadata: + - DID module queries + /cheqd/resource/v2/{collectionId}/metadata: get: - summary: Fetch all resource metadata from a collection with a given collection_id + summary: Fetch metadata for all resources in a collection operationId: CollectionResources responses: '200': @@ -827,14 +827,20 @@ paths: items: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -862,7 +868,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what @@ -871,7 +877,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -916,7 +922,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -941,7 +947,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version of @@ -951,7 +957,7 @@ paths: to determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -963,6 +969,25 @@ paths: Format: title: Metadata stores the metadata of a DID-Linked Resource title: resources is the requested collection of resource metadata + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + nextKey: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise title: >- QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method @@ -983,13 +1008,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1005,11 +1030,67 @@ paths: in: path required: true type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.countTotal + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean tags: - - Query - /cheqd/resource/v2/{collection_id}/resources/{id}: + - Resource module queries + /cheqd/resource/v2/{collectionId}/resources/{id}: get: - summary: Fetch a resource from a collection with a given collection_id and id + summary: Fetch data/payload for a specific resource (without metadata) operationId: Resource responses: '200': @@ -1038,14 +1119,20 @@ paths: metadata: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -1073,7 +1160,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what @@ -1082,7 +1169,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -1127,7 +1214,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -1152,7 +1239,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version @@ -1162,7 +1249,7 @@ paths: to determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -1193,13 +1280,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1223,12 +1310,10 @@ paths: required: true type: string tags: - - Query - /cheqd/resource/v2/{collection_id}/resources/{id}/metadata: + - Resource module queries + /cheqd/resource/v2/{collectionId}/resources/{id}/metadata: get: - summary: >- - Fetch a resource's metadata from a collection with a given collection_id - and id + summary: Fetch only metadata for a specific resource operationId: ResourceMetadata responses: '200': @@ -1239,14 +1324,20 @@ paths: resource: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -1274,7 +1365,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what the @@ -1283,7 +1374,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -1328,7 +1419,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -1353,7 +1444,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version of @@ -1363,7 +1454,7 @@ paths: determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -1394,13 +1485,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1424,4 +1515,4 @@ paths: required: true type: string tags: - - Query + - Resource module queries diff --git a/app/app.go b/app/app.go index fdaecfe17..99c2c6f0d 100644 --- a/app/app.go +++ b/app/app.go @@ -753,11 +753,11 @@ func New( } ctx.Logger().Info("Version map is populated. Running migrations.") - ctx.Logger().Debug(fmt.Sprintf("fromVm: %v", fromVM)) + ctx.Logger().Debug(fmt.Sprintf("Previous version map: %v", fromVM)) // Get current version map newVM := app.mm.GetVersionMap() - ctx.Logger().Debug(fmt.Sprintf("newVM: %v", newVM)) + ctx.Logger().Debug(fmt.Sprintf("Target version map: %v", newVM)) // Set cheqd/DID module to ConsensusVersion fromVM[didtypes.ModuleName] = newVM[didtypes.ModuleName] @@ -860,9 +860,9 @@ func New( } // Run all default migrations - ctx.Logger().Debug(fmt.Sprintf("fromVM (for default RunMigrations): %v", fromVM)) + ctx.Logger().Debug(fmt.Sprintf("Previous version map (for default RunMigrations): %v", fromVM)) toVM, err := app.mm.RunMigrations(ctx, app.configurator, fromVM) - ctx.Logger().Debug(fmt.Sprintf("toVM (version map after RunMigrations): %v", toVM)) + ctx.Logger().Debug(fmt.Sprintf("New version map (after default RunMigrations): %v", toVM)) return toVM, err }) diff --git a/app/migrations/migration_did_simple.go b/app/migrations/migration_did_simple.go index 37a946baa..b3542a3f8 100644 --- a/app/migrations/migration_did_simple.go +++ b/app/migrations/migration_did_simple.go @@ -26,7 +26,7 @@ func MigrateDidSimple(sctx sdk.Context, mctx MigrationContext, apply func(didDoc // Iterate and migrate did docs. We can use single loop for removing old values, migration // and writing new values because there is only one version of each diddoc in the store for _, version := range allDidDocVersions { - // Needs for preventing using variables with the same address + // Needed for preventing using variables with the same address version := version sctx.Logger().Debug("MigrateDidSimple: Starting migration for DIDDoc: " + version.DidDoc.Id) diff --git a/docker/localnet/mainnet-latest.env b/docker/localnet/mainnet-latest.env index 9299e2d07..7853bfb1f 100644 --- a/docker/localnet/mainnet-latest.env +++ b/docker/localnet/mainnet-latest.env @@ -4,6 +4,6 @@ ### REQUIRED: Node/network selection ### ############################################################### # Define cheqd-noded image source. Change if using your own build. -BUILD_IMAGE_VERSION="0.6.9" +BUILD_IMAGE_VERSION="0.6.10" BUILD_IMAGE="ghcr.io/cheqd/cheqd-node:$BUILD_IMAGE_VERSION" diff --git a/package-lock.json b/package-lock.json index 9e6435b2d..3080dd606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -297,14 +297,39 @@ } }, "node_modules/@octokit/types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", - "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.1.1.tgz", + "integrity": "sha512-7tjk+6DyhYAmei8FOEwPfGKc0VE1x56CKPJ+eE44zhDbOyMT+9yan8apfQFxo8oEFsy+0O7PiBtH8w0Yo0Y9Kw==", "dev": true, "dependencies": { "@octokit/openapi-types": "^14.0.0" } }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "dev": true, + "dependencies": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", @@ -388,22 +413,22 @@ } }, "node_modules/@semantic-release/npm": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.1.tgz", - "integrity": "sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", "dev": true, "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "execa": "^5.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "lodash": "^4.17.15", "nerf-dart": "^1.0.0", "normalize-url": "^6.0.0", "npm": "^8.3.0", "rc": "^1.2.8", "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", + "registry-auth-token": "^5.0.0", "semver": "^7.1.2", "tempy": "^1.0.0" }, @@ -414,20 +439,6 @@ "semantic-release": ">=19.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", @@ -787,6 +798,16 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -2106,9 +2127,9 @@ } }, "node_modules/marked": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.5.tgz", - "integrity": "sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -2304,9 +2325,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -5238,6 +5259,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -5407,15 +5434,15 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "dependencies": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=14" } }, "node_modules/require-directory": { diff --git a/proto/buf.gen.swagger.yaml b/proto/buf.gen.swagger.yaml index 0fe01d773..cf7b5e883 100644 --- a/proto/buf.gen.swagger.yaml +++ b/proto/buf.gen.swagger.yaml @@ -7,5 +7,7 @@ plugins: out: ../api/docs opt: - fqn_for_swagger_name=true + - include_package_in_tags=true + - json_names_for_fields=true - logtostderr=true - simple_operation_ids=true diff --git a/proto/buf.lock b/proto/buf.lock index 446ad1fdc..d4fd87e13 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -8,7 +8,7 @@ deps: - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: fe58c1d200724c37a5cbc5f70953f900 + commit: e06e2cfb5db24965bf7460c2d076e11f - remote: buf.build owner: cosmos repository: gogo-proto diff --git a/proto/cheqd/did/v2/diddoc.proto b/proto/cheqd/did/v2/diddoc.proto index 830826f7d..b2a2ed90e 100644 --- a/proto/cheqd/did/v2/diddoc.proto +++ b/proto/cheqd/did/v2/diddoc.proto @@ -61,7 +61,7 @@ message VerificationMethod { // type is the type of the verification method. // Example: Ed25519VerificationKey2020 - string verification_method_type = 2; + string verification_method_type = 2 [(gogoproto.jsontag) = "type,omitempty"]; // controller is the DID of the controller of the verification method. // Format: did:cheqd:: @@ -81,7 +81,7 @@ message Service { // type is the type of the service. // Example: LinkedResource - string service_type = 2; + string service_type = 2 [(gogoproto.jsontag) = "type,omitempty"]; // serviceEndpoint is the endpoint of the service. // Example: https://example.com/endpoint diff --git a/proto/cheqd/resource/v2/query.proto b/proto/cheqd/resource/v2/query.proto index b216cf233..fc511738b 100644 --- a/proto/cheqd/resource/v2/query.proto +++ b/proto/cheqd/resource/v2/query.proto @@ -3,23 +3,25 @@ syntax = "proto3"; package cheqd.resource.v2; import "cheqd/resource/v2/resource.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; // Query defines the gRPC querier service for the resource module service Query { - // Fetch a resource from a collection with a given collection_id and id + // Fetch data/payload for a specific resource (without metadata) rpc Resource(QueryResourceRequest) returns (QueryResourceResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/resources/{id}"; } - // Fetch a resource's metadata from a collection with a given collection_id and id + // Fetch only metadata for a specific resource rpc ResourceMetadata(QueryResourceMetadataRequest) returns (QueryResourceMetadataResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/resources/{id}/metadata"; } - // Fetch all resource metadata from a collection with a given collection_id + // Fetch metadata for all resources in a collection rpc CollectionResources(QueryCollectionResourcesRequest) returns (QueryCollectionResourcesResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/metadata"; } @@ -66,7 +68,7 @@ message QueryResourceMetadataRequest { // QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method message QueryResourceMetadataResponse { // resource is the requested resource metadata - Metadata resource = 1; + Metadata resource = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; } // QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method @@ -78,10 +80,16 @@ message QueryCollectionResourcesRequest { // - c82f2b02-bdab-4dd7-b833-3e143745d612 // - wGHEXrZvJxR8vw5P3UWH1j string collection_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; } // QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method message QueryCollectionResourcesResponse { // resources is the requested collection of resource metadata - repeated Metadata resources = 1; + repeated Metadata resources = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/cheqd/resource/v2/resource.proto b/proto/cheqd/resource/v2/resource.proto index e78a90f88..1fba1622e 100644 --- a/proto/cheqd/resource/v2/resource.proto +++ b/proto/cheqd/resource/v2/resource.proto @@ -7,12 +7,6 @@ import "google/protobuf/timestamp.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -message ResourceWithMetadata { - Resource resource = 1; - Metadata metadata = 2; -} - // Resource stores the contents of a DID-Linked Resource message Resource { // bytes is the raw data of the Resource @@ -23,30 +17,41 @@ message Resource { message Metadata { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource - string collection_id = 1; + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + string collection_id = 1 [(gogoproto.jsontag) = "resourceCollectionId"]; // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. // Format: - string id = 2; + string id = 2 [(gogoproto.jsontag) = "resourceId"]; // name is a human-readable name for the Resource. Defined client-side. // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - string name = 3; + string name = 3 [(gogoproto.jsontag) = "resourceName"]; // version is a human-readable semantic version for the Resource. Defined client-side. // Stored as a string. OPTIONAL. // Example: 1.0.0, v2.1.0 - string version = 4; + string version = 4 [ + (gogoproto.jsontag) = "resourceVersion", + (gogoproto.nullable) = true + ]; // resource_type is a Resource type that identifies what the Resource is. Defined client-side. // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - string resource_type = 5; + string resource_type = 5 [(gogoproto.jsontag) = "resourceType"]; // List of alternative URIs for the SAME Resource. - repeated AlternativeUri also_known_as = 6 [(gogoproto.nullable) = true]; + repeated AlternativeUri also_known_as = 6 [ + (gogoproto.jsontag) = "resourceAlternativeUri", + (gogoproto.nullable) = true + ]; // media_type is IANA media type of the Resource. Defined ledger-side. // Example: application/json, image/png @@ -94,3 +99,9 @@ message AlternativeUri { // - ipfs-uri string description = 2; } + +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +message ResourceWithMetadata { + Resource resource = 1 [(gogoproto.jsontag) = "linkedResource"]; + Metadata metadata = 2 [(gogoproto.jsontag) = "linkedResourceMetadata"]; +} diff --git a/proto/cheqd/resource/v2/tx.proto b/proto/cheqd/resource/v2/tx.proto index b5de043ae..4e24cb2a6 100644 --- a/proto/cheqd/resource/v2/tx.proto +++ b/proto/cheqd/resource/v2/tx.proto @@ -4,6 +4,7 @@ package cheqd.resource.v2; import "cheqd/did/v2/tx.proto"; import "cheqd/resource/v2/resource.proto"; +import "gogoproto/gogo.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; @@ -29,7 +30,7 @@ message MsgCreateResource { // it will be created. The resource will be created in the resource collection. // // If a resource with the given id, collection_id already exists, an error code 2200 will be returned. -// +// // A new version of the resource in an existing collection will be created, // if a resource in that collection with the same name, resource_type and empty next_version_id exists. // @@ -44,38 +45,44 @@ message MsgCreateResourcePayload { // Examples: // - c82f2b02-bdab-4dd7-b833-3e143745d612 // - wGHEXrZvJxR8vw5P3UWH1j - string collection_id = 2; + string collection_id = 2 [(gogoproto.jsontag) = "resourceCollectionId"]; // id is a unique id of the resource. // Format: - string id = 3; + string id = 3 [(gogoproto.jsontag) = "resourceId"]; // name is a human-readable name of the resource. // Format: // // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - string name = 4; + string name = 4 [(gogoproto.jsontag) = "resourceName"]; // version is a version of the resource. // Format: // Stored as a string. OPTIONAL. // // Example: 1.0.0, v2.1.0 - string version = 5; + string version = 5 [ + (gogoproto.jsontag) = "resourceVersion", + (gogoproto.nullable) = true + ]; // resource_type is a type of the resource. // Format: // // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - string resource_type = 6; + string resource_type = 6 [(gogoproto.jsontag) = "resourceType"]; // also_known_as is a list of URIs that can be used to get the resource. - repeated cheqd.resource.v2.AlternativeUri also_known_as = 7; + repeated AlternativeUri also_known_as = 7 [ + (gogoproto.jsontag) = "resourceAlternativeUri", + (gogoproto.nullable) = true + ]; } message MsgCreateResourceResponse { // Return the created resource metadata. - Metadata resource = 1; + Metadata resource = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; } diff --git a/scripts/protoc-swagger-gen.sh b/scripts/protoc-swagger-gen.sh index 601219223..fb6288868 100755 --- a/scripts/protoc-swagger-gen.sh +++ b/scripts/protoc-swagger-gen.sh @@ -30,7 +30,7 @@ cd .. # combine swagger files # uses nodejs package `swagger-combine`. # all the individual swagger files need to be configured in `config.yaml` for merging -swagger-combine ${SWAGGER_DIR}/config.json -o ${SWAGGER_DIR}/swagger.yaml -f yaml --continueOnConflictingPaths true +swagger-combine ${SWAGGER_DIR}/config.yaml -o ${SWAGGER_DIR}/swagger.yaml --format yaml --includceGlobalTags false # Remove individual swagger files rm -rf ${SWAGGER_DIR}/cheqd diff --git a/tests/integration/cli/config.go b/tests/integration/cli/config.go index 0f109a70e..672e84e7a 100644 --- a/tests/integration/cli/config.go +++ b/tests/integration/cli/config.go @@ -7,7 +7,7 @@ const ( OutputFormat = "json" Gas = "auto" GasAdjustment = "1.8" - GasPrices = "25ncheq" + GasPrices = "50ncheq" ) const ( diff --git a/tests/integration/cli/query.go b/tests/integration/cli/query.go index a90c3e4e8..bf12d7e8f 100644 --- a/tests/integration/cli/query.go +++ b/tests/integration/cli/query.go @@ -73,7 +73,7 @@ func QueryDidDoc(did string) (didtypes.QueryDidDocResponse, error) { } func QueryResource(collectionID string, resourceID string) (resourcetypes.QueryResourceResponse, error) { - res, err := Query("resource", "resource", collectionID, resourceID) + res, err := Query("resource", "specific-resource", collectionID, resourceID) if err != nil { return resourcetypes.QueryResourceResponse{}, err } @@ -88,7 +88,7 @@ func QueryResource(collectionID string, resourceID string) (resourcetypes.QueryR } func QueryResourceMetadata(collectionID string, resourceID string) (resourcetypes.QueryResourceMetadataResponse, error) { - res, err := Query("resource", "resource-metadata", collectionID, resourceID) + res, err := Query("resource", "metadata", collectionID, resourceID) if err != nil { return resourcetypes.QueryResourceMetadataResponse{}, err } @@ -103,7 +103,7 @@ func QueryResourceMetadata(collectionID string, resourceID string) (resourcetype } func QueryResourceCollection(collectionID string) (resourcetypes.QueryCollectionResourcesResponse, error) { - res, err := Query("resource", "collection-resources", collectionID) + res, err := Query("resource", "collection-metadata", collectionID) if err != nil { return resourcetypes.QueryCollectionResourcesResponse{}, err } diff --git a/tests/integration/cli/tx.go b/tests/integration/cli/tx.go index fa0990195..c538f9b20 100644 --- a/tests/integration/cli/tx.go +++ b/tests/integration/cli/tx.go @@ -7,10 +7,14 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/x/did/client/cli" "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" ) +const ( + FlagVersionID = "--version-id" +) + var CLITxParams = []string{ "--chain-id", network.ChainID, "--keyring-backend", KeyringBackend, @@ -65,8 +69,8 @@ func RevokeFeeGrant(granter, grantee string, feeParams []string) (sdk.TxResponse return Tx("feegrant", "revoke", granter, feeParams, granter, grantee) } -func CreateDidDoc(tmpDir string, payload types.MsgCreateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := helpers.Codec.MarshalJSON(&payload) +func CreateDidDoc(tmpDir string, payload cli.DIDDocument, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := json.Marshal(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -83,11 +87,15 @@ func CreateDidDoc(tmpDir string, payload types.MsgCreateDidDocPayload, signInput payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "create-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "create-did", from, feeParams, payloadFile) } -func UpdateDidDoc(tmpDir string, payload types.MsgUpdateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := helpers.Codec.MarshalJSON(&payload) +func UpdateDidDoc(tmpDir string, payload cli.DIDDocument, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := json.Marshal(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -104,10 +112,14 @@ func UpdateDidDoc(tmpDir string, payload types.MsgUpdateDidDocPayload, signInput payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "update-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "update-did", from, feeParams, payloadFile) } -func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { +func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { payloadJSON, err := helpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err @@ -125,11 +137,15 @@ func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, s payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "deactivate-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "deactivate-did", from, feeParams, payloadFile) } -func CreateResource(tmpDir string, options resourcecli.CreateResourceOptions, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := json.Marshal(&options) +func CreateResource(tmpDir string, payload resourcetypes.MsgCreateResourcePayload, signInputs []cli.SignInput, dataFile, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := helpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -146,5 +162,5 @@ func CreateResource(tmpDir string, options resourcecli.CreateResourceOptions, si payloadFile := helpers.MustWriteTmpFile("", payloadWithSignInputsJSON) - return Tx("resource", "create", from, feeParams, payloadFile) + return Tx("resource", "create", from, feeParams, payloadFile, dataFile) } diff --git a/tests/integration/cli_diddoc_negative_test.go b/tests/integration/cli_diddoc_negative_test.go index a9e15f51d..21cd4732b 100644 --- a/tests/integration/cli_diddoc_negative_test.go +++ b/tests/integration/cli_diddoc_negative_test.go @@ -10,9 +10,9 @@ import ( helpers "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - cli_types "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" + didtypes "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -20,9 +20,16 @@ import ( var _ = Describe("cheqd cli - negative did", func() { var tmpDir string + var feeParams didtypes.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) }) It("cannot create diddoc with missing cli arguments, sign inputs mismatch, non-supported VM type, already existing did", func() { @@ -35,28 +42,27 @@ var _ = Describe("cheqd cli - negative did", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -64,97 +70,96 @@ var _ = Describe("cheqd cli - negative did", func() { did2 := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId2 := did2 + "#key1" - pubKey2, privKey2, err := ed25519.GenerateKey(nil) + publicKey2, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey2) + publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey2) - payload2 := types.MsgCreateDidDocPayload{ - Id: did2, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId2, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + payload2 := didcli.DIDDocument{ + ID: did2, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId2, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }, }, Authentication: []string{keyId2}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with missing cli arguments")) // Fail to create a new DID Doc with missing cli arguments // a. missing payload, sign inputs and account - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // b. missing payload, sign inputs - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // c. missing payload, account - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, signInputs2, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs2, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) // d. missing sign inputs, account - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) // e. missing payload - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // f. missing sign inputs - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // g. missing account - _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with sign inputs mismatch")) // Fail to create a new DID Doc with sign inputs mismatch // a. sign inputs mismatch - _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // b. non-existing key id - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{ + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{ { VerificationMethodID: "non-existing-key-id", - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // c. non-matching private key - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{ + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{ { VerificationMethodID: keyId2, PrivKey: privKey, }, - }, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with non-supported VM type")) // Fail to create a new DID Doc with non-supported VM type payload3 := payload2 - payload3.VerificationMethod[0].VerificationMethodType = "NonSupportedVMType" - _, err = cli.CreateDidDoc(tmpDir, payload3, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + payload3.VerificationMethod[0]["type"] = "NonSupportedVMType" + _, err = cli.CreateDidDoc(tmpDir, payload3, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with already existing DID")) // Fail to create a new DID Doc with already existing DID - _, err = cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) }) - deepCopierUpdateDid := helpers.DeepCopyUpdateDid{} + deepCopierUpdateDid := helpers.DeepCopyDIDDocument{} It("cannot update a DID Doc with missing cli arguments, sign inputs mismatch, non-supported VM type, non-existing did, unchanged payload", func() { // Define a valid DID Doc to be updated @@ -166,49 +171,47 @@ var _ = Describe("cheqd cli - negative did", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, + payload := didcli.DIDDocument{ + ID: did, Controller: []string{did}, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) // Update the DID Doc - updatedPayload := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + updatedPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, AssertionMethod: []string{keyId}, - VersionId: uuid.NewString(), } - res, err = cli.UpdateDidDoc(tmpDir, updatedPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.UpdateDidDoc(tmpDir, updatedPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -217,34 +220,33 @@ var _ = Describe("cheqd cli - negative did", func() { keyId2 := did2 + "#key1" keyId2AsExtraController := did + "#key2" - pubKey2, privKey2, err := ed25519.GenerateKey(nil) + publicKey2, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey2) + publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey2) - payload2 := types.MsgCreateDidDocPayload{ - Id: did2, + payload2 := didcli.DIDDocument{ + ID: did2, Controller: []string{did2}, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId2, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId2, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }, }, Authentication: []string{keyId2}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } - res_, err := cli.CreateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + res_, err := cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res_.Code).To(BeEquivalentTo(0)) @@ -269,7 +271,7 @@ var _ = Describe("cheqd cli - negative did", func() { privKeyFuzzedExtra2 := testdata.GenerateByteEntropy() Expect(len(privKeyFuzzedExtra2)).NotTo(BeEquivalentTo(len(privKeyFuzzed2))) - signInputsFuzzed := []cli_types.SignInput{ + signInputsFuzzed := []didcli.SignInput{ { VerificationMethodID: keyIdFuzzed, PrivKey: privKeyFuzzed, @@ -283,131 +285,128 @@ var _ = Describe("cheqd cli - negative did", func() { // Following valid DID Doc to be updated followingUpdatedPayload := deepCopierUpdateDid.DeepCopy(updatedPayload) followingUpdatedPayload.Controller = []string{did, did2} - followingUpdatedPayload.VerificationMethod = append(followingUpdatedPayload.VerificationMethod, &types.VerificationMethod{ - Id: keyId2AsExtraController, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + followingUpdatedPayload.VerificationMethod = append(followingUpdatedPayload.VerificationMethod, didcli.VerificationMethod{ + "id": keyId2AsExtraController, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }) followingUpdatedPayload.Authentication = append(followingUpdatedPayload.Authentication, keyId2AsExtraController) followingUpdatedPayload.CapabilityDelegation = []string{keyId} followingUpdatedPayload.CapabilityInvocation = []string{keyId} - followingUpdatedPayload.VersionId = uuid.NewString() signInputsAugmented := append(signInputs, signInputs2...) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with missing cli arguments")) // Fail to update the DID Doc with missing cli arguments // a. missing payload, sign inputs and account - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // b. missing payload, sign inputs - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // c. missing payload, account - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // d. missing sign inputs, account - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // e. missing payload - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // f. missing sign inputs - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // g. missing account - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", "", helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with sign inputs mismatch")) // Fail to update the DID Doc with sign inputs mismatch // a. sign inputs total mismatch - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsFuzzed, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsFuzzed, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // b. sign inputs invalid length - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // c. non-existing key id - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, { VerificationMethodID: "non-existing-key-id", - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // d. non-matching private key - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId2AsExtraController, PrivKey: privKey, }, { VerificationMethodID: keyId, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // e. invalid private key - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKeyFuzzedExtra, }, { VerificationMethodID: keyId2AsExtraController, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with a non-supported VM type")) // Fail to update the DID Doc with a non-supported VM type invalidVmTypePayload := deepCopierUpdateDid.DeepCopy(followingUpdatedPayload) - invalidVmTypePayload.VerificationMethod = []*types.VerificationMethod{ + invalidVmTypePayload.VerificationMethod = []didcli.VerificationMethod{ followingUpdatedPayload.VerificationMethod[0], - { - Id: followingUpdatedPayload.VerificationMethod[1].Id, - VerificationMethodType: "NonSupportedVmType", - Controller: followingUpdatedPayload.VerificationMethod[1].Controller, - VerificationMaterial: "pretty-long-public-key-multibase", + map[string]any{ + "Id": followingUpdatedPayload.VerificationMethod[1]["id"], + "VerificationMethodType": "NonSupportedVmType", + "Controller": followingUpdatedPayload.VerificationMethod[1]["controller"], + "VerificationMaterial": "pretty-long-public-key-multibase", }, } - invalidVmTypePayload.VersionId = uuid.NewString() - _, err = cli.UpdateDidDoc(tmpDir, invalidVmTypePayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, invalidVmTypePayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with a non-existing DID")) // Fail to update a non-existing DID Doc nonExistingDid := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() nonExistingDidPayload := deepCopierUpdateDid.DeepCopy(followingUpdatedPayload) - nonExistingDidPayload.Id = nonExistingDid - _, err = cli.UpdateDidDoc(tmpDir, nonExistingDidPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + nonExistingDidPayload.ID = nonExistingDid + _, err = cli.UpdateDidDoc(tmpDir, nonExistingDidPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // Finally, update the DID Doc - res, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with an unchanged payload")) // Fail to update the DID Doc with an unchanged payload - followingUpdatedPayload.VersionId = uuid.NewString() - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) // TODO: Decide if this should be an error, if the DID Doc is unchanged }) diff --git a/tests/integration/cli_diddoc_pricing_negative_test.go b/tests/integration/cli_diddoc_pricing_negative_test.go index 264b470c1..ee9614d58 100644 --- a/tests/integration/cli_diddoc_pricing_negative_test.go +++ b/tests/integration/cli_diddoc_pricing_negative_test.go @@ -9,7 +9,7 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -27,9 +27,6 @@ import ( // 4. fixed fee - invalid fee amount create // 5. fixed fee - invalid fee amount update // 6. fixed fee - invalid fee amount deactivate -// 7. gas auto - insufficient funds create -// 8. gas auto - insufficient funds update -// 9. gas auto - insufficient funds deactivate // 10. fixed fee - charge only tax if fee is more than tax create // 11. fixed fee - charge only tax if fee is more than tax update // 12. fixed fee - charge only tax if fee is more than tax deactivate @@ -40,8 +37,8 @@ import ( var _ = Describe("cheqd cli - negative diddoc pricing", func() { var tmpDir string var feeParams types.FeeParams - var payload types.MsgCreateDidDocPayload - var signInputs []clitypes.SignInput + var payload didcli.DIDDocument + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() @@ -56,29 +53,28 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload = types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload = didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } }) @@ -86,55 +82,53 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not succeed in create diddoc message - case: fixed fee, invalid denom", func() { By("submitting create diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.CreateDid.Amount.Int64())) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) It("should not succeed in update diddoc message - case: fixed fee, invalid denom", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.GetUpdateDid().Amount.Int64())) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) It("should not succeed in deactivate diddoc message - case: fixed fee, invalid denom", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.GetDeactivateDid().Amount.Int64())) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -142,112 +136,57 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not fail in create diddoc message - case: fixed fee, lower amount than required", func() { By("submitting create diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.CreateDid.Denom, sdk.NewInt(feeParams.CreateDid.Amount.Int64()-1)) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) It("should not fail in update diddoc message - case: fixed fee, lower amount than required", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.UpdateDid.Denom, sdk.NewInt(feeParams.UpdateDid.Amount.Int64()-1)) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) It("should not fail in deactivate diddoc message - case: fixed fee, lower amount than required", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.DeactivateDid.Denom, sdk.NewInt(feeParams.DeactivateDid.Amount.Int64()-1)) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) - It("should not succeed in create diddoc message - case: gas auto, insufficient funds", func() { - By("submitting create diddoc message with insufficient funds") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in update diddoc message - case: gas auto, insufficient funds", func() { - By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, - }, - }, - Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed - } - - By("submitting update diddoc message with insufficient funds") - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in deactivate diddoc message - case: gas auto, insufficient funds", func() { - By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("preparing the deactivate diddoc message") - payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), - } - - By("submitting deactivate diddoc message with insufficient funds") - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - It("should not charge more than tax for create diddoc message - case: fixed fee", func() { By("querying the fee payer account balance before the transaction") balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_5_ADDR, types.BaseMinimalDenom) @@ -256,7 +195,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the create diddoc message with double the tax") tax := feeParams.CreateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -271,24 +210,23 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not charge more than tax for update diddoc message - case: fixed fee", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("querying the fee payer account balance before the transaction") @@ -298,7 +236,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the update diddoc message with double the tax") tax := feeParams.UpdateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -313,13 +251,13 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not charge more than tax for deactivate diddoc message - case: fixed fee", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, + Id: payload.ID, VersionId: uuid.NewString(), } @@ -330,7 +268,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the deactivate diddoc message with double the tax") tax := feeParams.DeactivateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -346,55 +284,53 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not succeed in create diddoc create message - case: fixed fee, insufficient funds", func() { By("submitting create diddoc message with insufficient funds") tax := feeParams.CreateDid - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) It("should not succeed in update diddoc message - case: fixed fee, insufficient funds", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with insufficient funds") tax := feeParams.UpdateDid - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) It("should not succeed in deactivate diddoc message - case: fixed fee, insufficient funds", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with insufficient funds") tax := feeParams.DeactivateDid - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) diff --git a/tests/integration/cli_diddoc_pricing_test.go b/tests/integration/cli_diddoc_pricing_test.go index cf312a346..3c3796060 100644 --- a/tests/integration/cli_diddoc_pricing_test.go +++ b/tests/integration/cli_diddoc_pricing_test.go @@ -9,7 +9,7 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -21,8 +21,8 @@ import ( var _ = Describe("cheqd cli - positive diddoc pricing", func() { var tmpDir string var feeParams types.FeeParams - var payload types.MsgCreateDidDocPayload - var signInputs []clitypes.SignInput + var payload didcli.DIDDocument + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() @@ -37,29 +37,28 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload = types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload = didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } }) @@ -72,7 +71,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting a create diddoc message") tax := feeParams.CreateDid - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -125,87 +124,25 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { )) }) - It("should tax create diddoc message - case: gas auto", func() { - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting a create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.CreateDid - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - It("should tax update diddoc message - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("querying the fee payer account balance before the transaction") @@ -215,89 +152,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting an update diddoc message") tax := feeParams.UpdateDid - res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax update diddoc message - case: gas auto", func() { - By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(resp.Code).To(BeEquivalentTo(0)) - - By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, - }, - }, - Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed - } - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting an update diddoc message") - tax := feeParams.UpdateDid - res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -352,14 +207,13 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax deactivate diddoc message - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("querying the fee payer account balance before the transaction") @@ -369,7 +223,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting an deactivate diddoc message") tax := feeParams.DeactivateDid - res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -422,78 +276,6 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { )) }) - It("should tax deactivate diddoc message - case: gas auto", func() { - By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(resp.Code).To(BeEquivalentTo(0)) - - By("preparing the deactivate diddoc message") - payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), - } - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting an deactivate diddoc message") - res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.DeactivateDid - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - It("should tax create diddoc message with feegrant - case: fixed fee", func() { By("creating a feegrant") res, err := cli.GrantFees(testdata.BASE_ACCOUNT_4_ADDR, testdata.BASE_ACCOUNT_1_ADDR, cli.CliGasParams) @@ -509,7 +291,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.CreateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -537,24 +319,23 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax update diddoc message with feegrant - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("creating a feegrant") @@ -571,7 +352,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting an update diddoc message") - resp, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.UpdateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -599,14 +380,13 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax deactivate diddoc message with feegrant - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("creating a feegrant") @@ -623,7 +403,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting a deactivate diddoc message") - resp, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.DeactivateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) diff --git a/tests/integration/cli_diddoc_test.go b/tests/integration/cli_diddoc_test.go index b9f9e4fe2..bb4742678 100644 --- a/tests/integration/cli_diddoc_test.go +++ b/tests/integration/cli_diddoc_test.go @@ -7,9 +7,10 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - cli_types "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -20,9 +21,16 @@ import ( var _ = Describe("cheqd cli - positive did", func() { var tmpDir string + var feeParams types.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query fee params + res, err := cli.QueryParams(types.ModuleName, string(types.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) }) It("can create diddoc, update it and query the result (Ed25519VerificationKey2020)", func() { @@ -31,69 +39,71 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (Ed25519VerificationKey2020)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newPubKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(newPubKey) + newPublicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(newPublicKey) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: newPubKeyMultibase, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": newPublicKeyMultibase, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -110,7 +120,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("Ed25519VerificationKey2020")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPubKeyMultibase)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyMultibase)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -118,18 +128,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (Ed25519VerificationKey2020)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) @@ -152,69 +163,75 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateJSONWebKey2020VerificationMaterial(pubKey) + publicKeyJwkJSON := testsetup.GenerateJSONWebKey2020VerificationMaterial(publicKey) + publicKeyJwk, err := testsetup.ParseJSONToMap(publicKeyJwkJSON) + Expect(err).To(BeNil()) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "JsonWebKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "JsonWebKey2020", + "controller": did, + "publicKeyJwk": publicKeyJwk, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (JsonWebKey2020)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newPubKeyMultibase := testsetup.GenerateJSONWebKey2020VerificationMaterial(newPubKey) + newPublicKeyJwkJSON := testsetup.GenerateJSONWebKey2020VerificationMaterial(newPublicKey) + newPublicKeyJwk, err := testsetup.ParseJSONToMap(newPublicKeyJwkJSON) + Expect(err).To(BeNil()) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "JsonWebKey2020", - Controller: did, - VerificationMaterial: newPubKeyMultibase, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "JsonWebKey2020", + "controller": did, + "publicKeyJwk": newPublicKeyJwk, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -231,7 +248,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("JsonWebKey2020")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPubKeyMultibase)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyJwkJSON)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -239,18 +256,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (JsonWebKey2020)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) @@ -273,69 +291,71 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - pubKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(pubKey) + publicKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2018", - Controller: did, - VerificationMaterial: pubKeyBase58, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2018", + "controller": did, + "publicKeyBase58": publicKeyBase58, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (Ed25519VerificationKey2018)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newpubKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(newPubKey) + newPublicKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(newPublicKey) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2018", - Controller: did, - VerificationMaterial: newpubKeyBase58, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2018", + "controller": did, + "publicKeyBase58": newPublicKeyBase58, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -352,7 +372,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("Ed25519VerificationKey2018")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newpubKeyBase58)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyBase58)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -360,18 +380,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (Ed25519VerificationKey2018)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) diff --git a/tests/integration/cli_resource_negative_test.go b/tests/integration/cli_resource_negative_test.go index f1f505806..6cf5de9a7 100644 --- a/tests/integration/cli_resource_negative_test.go +++ b/tests/integration/cli_resource_negative_test.go @@ -7,12 +7,13 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + didtypes "github.com/cheqd/cheqd-node/x/did/types" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -21,52 +22,64 @@ import ( var _ = Describe("cheqd cli - negative resource", func() { var collectionID string var did string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput var resourceID string var resourceName string - + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var tmpDir string BeforeEach(func() { // Initialize tmpDir tmpDir = GinkgoT().TempDir() + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) + // Create a new DID Doc collectionID = uuid.NewString() did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) + Expect(resp.Code).To(BeEquivalentTo(0)) - // Initialize shared resourceID + // Initialize shared values resourceID = uuid.NewString() resourceName = "TestName" }) @@ -77,12 +90,12 @@ var _ = Describe("cheqd cli - negative resource", func() { // Generate extra sign inputs keyId2 := did + "#key2" - _, privKey2, err := ed25519.GenerateKey(nil) + _, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - signInputs2 := []clitypes.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } @@ -93,161 +106,147 @@ var _ = Describe("cheqd cli - negative resource", func() { resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionId2, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionId2, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create resource with missing cli arguments")) // Fail to create a resource with missing cli arguments // a. missing collection id - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) // b. missing resource id - works because it is generated by the cli - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) // c. missing resource name - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) - // c. missing resource version - ok - // d. missing resource type - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // e. missing resource file - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // f. missing sign inputs - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{}, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // g. missing account - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, "", cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, "", helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create resource with sign inputs mismatch")) // Fail to create a resource with sign inputs mismatch // a. sign inputs mismatch - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs2, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // b. non-existing key id - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: "non-existing-key-id", PrivKey: signInputs[0].PrivKey, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // c. non-matching private key - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: signInputs[0].VerificationMethodID, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // d. invalid private key - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: signInputs[0].VerificationMethodID, PrivKey: testdata.GenerateByteEntropy(), }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // Finally, create the resource - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) diff --git a/tests/integration/cli_resource_pricing_negative_test.go b/tests/integration/cli_resource_pricing_negative_test.go index eda790f57..188114af7 100644 --- a/tests/integration/cli_resource_pricing_negative_test.go +++ b/tests/integration/cli_resource_pricing_negative_test.go @@ -9,10 +9,9 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" didtypes "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" @@ -33,23 +32,27 @@ import ( // 10. fixed fee - charge only tax if fee is more than tax image // 11. fixed fee - charge only tax if fee is more than tax json // 12. fixed fee - charge only tax if fee is more than tax default -// 13. gas auto - insufficient funds image -// 14. gas auto - insufficient funds json -// 15. gas auto - insufficient funds default var _ = Describe("cheqd cli - negative resource pricing", func() { var tmpDir string - var feeParams resourcetypes.FeeParams + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var collectionID string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() - // Query fee params - res, err := cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) Expect(err).To(BeNil()) - err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) Expect(err).To(BeNil()) // Create a new DID Doc @@ -57,26 +60,25 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - didPayload := didtypes.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*didtypes.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + didPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, @@ -84,7 +86,7 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { } // Submit the DID Doc - resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) }) @@ -99,15 +101,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Json.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Json.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -122,15 +123,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Image.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Image.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -145,15 +145,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Default.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Default.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -168,15 +167,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Json.Denom, sdk.NewInt(feeParams.Json.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Json.Denom, sdk.NewInt(resourceFeeParams.Json.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -191,15 +189,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Image.Denom, sdk.NewInt(feeParams.Image.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Image.Denom, sdk.NewInt(resourceFeeParams.Image.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -214,15 +211,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Default.Denom, sdk.NewInt(feeParams.Default.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Default.Denom, sdk.NewInt(resourceFeeParams.Default.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -237,15 +233,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with insufficient funds") - tax := feeParams.Json - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Json + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -260,15 +255,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with insufficient funds") - tax := feeParams.Image - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Image + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -283,81 +277,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with insufficient funds") - tax := feeParams.Default - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource json - case: gas auto, insufficient funds", func() { - By("preparing the create resource json message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the json resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource image - case: gas auto, insufficient funds", func() { - By("preparing the create resource image message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestImage(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the image resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource default - case: gas auto, insufficient funds", func() { - By("preparing the create resource default message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestDefault(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the default resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) + tax := resourceFeeParams.Default + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -376,16 +303,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with double the tax") - tax := feeParams.Json + tax := resourceFeeParams.Json doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") @@ -410,16 +336,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with double the tax") - tax := feeParams.Image + tax := resourceFeeParams.Image doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") @@ -444,16 +369,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with double the tax") - tax := feeParams.Default + tax := resourceFeeParams.Default doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") diff --git a/tests/integration/cli_resource_pricing_test.go b/tests/integration/cli_resource_pricing_test.go index c5628ea5a..78640f5c7 100644 --- a/tests/integration/cli_resource_pricing_test.go +++ b/tests/integration/cli_resource_pricing_test.go @@ -9,10 +9,9 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" didtypes "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" @@ -21,17 +20,24 @@ import ( var _ = Describe("cheqd cli - positive resource pricing", func() { var tmpDir string - var feeParams resourcetypes.FeeParams + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var collectionID string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() - // Query fee params - res, err := cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) Expect(err).To(BeNil()) - err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) Expect(err).To(BeNil()) // Create a new DID Doc @@ -44,21 +50,20 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - didPayload := didtypes.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*didtypes.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + didPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, @@ -66,7 +71,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { } // Submit the DID Doc - resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) }) @@ -86,15 +91,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the json resource message") - tax := feeParams.Json - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Json + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -122,83 +126,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax json resource message - case: gas auto", func() { - By("preparing the json resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the json resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Json - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -238,15 +166,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the image resource message") - tax := feeParams.Image - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Image + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -274,83 +201,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax image resource message - case: gas auto", func() { - By("preparing the image resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestImage(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the image resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Image - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -390,15 +241,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the default resource message") - tax := feeParams.Default - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Default + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -426,83 +276,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax default resource message - case: gas auto", func() { - By("preparing the default resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestDefault(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the default resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Default - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(BeEquivalentTo(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -550,14 +324,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource json message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Json + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -570,7 +344,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Json diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) @@ -606,14 +379,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource image message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Image + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -626,7 +399,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Image diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) @@ -662,14 +434,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource default message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Default + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -682,7 +454,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Default diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) diff --git a/tests/integration/cli_resource_test.go b/tests/integration/cli_resource_test.go index cd6abf80f..35dbf842a 100644 --- a/tests/integration/cli_resource_test.go +++ b/tests/integration/cli_resource_test.go @@ -7,12 +7,13 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + didtypes "github.com/cheqd/cheqd-node/x/did/types" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -20,9 +21,23 @@ import ( var _ = Describe("cheqd cli - positive resource", func() { var tmpDir string + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) }) It("can create diddoc, create resource, query it, query all resource versions of the same resource name, query resource collection", func() { @@ -32,33 +47,34 @@ var _ = Describe("cheqd cli - positive resource", func() { did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]interface{}{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []clitypes.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -72,14 +88,13 @@ var _ = Describe("cheqd cli - positive resource", func() { resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -91,6 +106,7 @@ var _ = Describe("cheqd cli - positive resource", func() { Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(collectionID)) Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(resourceID)) Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(resourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(resourceVersion)) Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(resourceType)) Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) @@ -103,6 +119,7 @@ var _ = Describe("cheqd cli - positive resource", func() { Expect(res3.Resource.CollectionId).To(BeEquivalentTo(collectionID)) Expect(res3.Resource.Id).To(BeEquivalentTo(resourceID)) Expect(res3.Resource.Name).To(BeEquivalentTo(resourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(resourceVersion)) Expect(res3.Resource.ResourceType).To(BeEquivalentTo(resourceType)) Expect(res3.Resource.MediaType).To(Equal("application/json")) @@ -114,49 +131,74 @@ var _ = Describe("cheqd cli - positive resource", func() { nextResourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: nextResourceId, - ResourceName: nextResourceName, - ResourceVersion: nextResourceVersion, - ResourceType: nextResourceType, - ResourceFile: nextResourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: nextResourceId, + Name: nextResourceName, + Version: nextResourceVersion, + ResourceType: nextResourceType, + }, signInputs, nextResourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource next version")) + // Query the Resource's next version + res2, err = cli.QueryResource(collectionID, nextResourceId) + Expect(err).To(BeNil()) + + Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(collectionID)) + Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(nextResourceId)) + Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(nextResourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(nextResourceVersion)) + Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(nextResourceType)) + Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) + Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) + + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource metadata")) + // Query the Resource's next version Metadata + res3, err = cli.QueryResourceMetadata(collectionID, nextResourceId) + Expect(err).To(BeNil()) + + Expect(res3.Resource.CollectionId).To(BeEquivalentTo(collectionID)) + Expect(res3.Resource.Id).To(BeEquivalentTo(nextResourceId)) + Expect(res3.Resource.Name).To(BeEquivalentTo(nextResourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(nextResourceVersion)) + Expect(res3.Resource.ResourceType).To(BeEquivalentTo(nextResourceType)) + Expect(res3.Resource.MediaType).To(Equal("application/json")) + // Create a second DID Doc secondCollectionId := uuid.NewString() secondDid := "did:cheqd:" + network.DidNamespace + ":" + secondCollectionId secondKeyId := secondDid + "#key1" - secondPubKey, secondPrivKey, err := ed25519.GenerateKey(nil) + secondPublicKey, secondPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - secondpubKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(secondPubKey) + secondPublicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(secondPublicKey) - secondPayload := types.MsgCreateDidDocPayload{ - Id: secondDid, - VerificationMethod: []*types.VerificationMethod{ - { - Id: secondKeyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: secondDid, - VerificationMaterial: secondpubKeyMultibase, + secondPayload := didcli.DIDDocument{ + ID: secondDid, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": secondKeyId, + "type": "Ed25519VerificationKey2020", + "controller": secondDid, + "publicKeyMultibase": secondPublicKeyMultibase, }, }, Authentication: []string{secondKeyId}, - VersionId: uuid.NewString(), } - secondSignInputs := []clitypes.SignInput{ + secondSignInputs := []didcli.SignInput{ { VerificationMethodID: secondKeyId, - PrivKey: secondPrivKey, + PrivKey: secondPrivateKey, }, } - res, err = cli.CreateDidDoc(tmpDir, secondPayload, secondSignInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + versionID = uuid.NewString() + + res, err = cli.CreateDidDoc(tmpDir, secondPayload, secondSignInputs, versionID, testdata.BASE_ACCOUNT_2, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -168,17 +210,41 @@ var _ = Describe("cheqd cli - positive resource", func() { secondResourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: secondCollectionId, - ResourceID: secondResourceId, - ResourceName: secondResourceName, - ResourceVersion: secondResourceVersion, - ResourceType: secondResourceType, - ResourceFile: secondResourceFile, - }, secondSignInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: secondCollectionId, + Id: secondResourceId, + Name: secondResourceName, + Version: secondResourceVersion, + ResourceType: secondResourceType, + }, secondSignInputs, secondResourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource")) + // Query the Resource + res2, err = cli.QueryResource(secondCollectionId, secondResourceId) + Expect(err).To(BeNil()) + + Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(secondCollectionId)) + Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(secondResourceId)) + Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(secondResourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(secondResourceVersion)) + Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(secondResourceType)) + Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) + Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) + + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource metadata")) + // Query the Resource Metadata + res3, err = cli.QueryResourceMetadata(secondCollectionId, secondResourceId) + Expect(err).To(BeNil()) + + Expect(res3.Resource.CollectionId).To(BeEquivalentTo(secondCollectionId)) + Expect(res3.Resource.Id).To(BeEquivalentTo(secondResourceId)) + Expect(res3.Resource.Name).To(BeEquivalentTo(secondResourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(secondResourceVersion)) + Expect(res3.Resource.ResourceType).To(BeEquivalentTo(secondResourceType)) + Expect(res3.Resource.MediaType).To(Equal("application/json")) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource collection")) // Query Resource Collection res4, err := cli.QueryResourceCollection(collectionID) diff --git a/tests/integration/helpers/deep_copy.go b/tests/integration/helpers/deep_copy.go index 4645f38c5..291b53be3 100644 --- a/tests/integration/helpers/deep_copy.go +++ b/tests/integration/helpers/deep_copy.go @@ -3,6 +3,7 @@ package helpers import ( "reflect" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" didtypes "github.com/cheqd/cheqd-node/x/did/types" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" ) @@ -37,6 +38,14 @@ func (d *DeepCopyUpdateDid) DeepCopy(src didtypes.MsgUpdateDidDocPayload) didtyp return deepCopy(src).(didtypes.MsgUpdateDidDocPayload) } +type DeepCopyDIDDocument struct { + TDeepCopy +} + +func (d *DeepCopyDIDDocument) DeepCopy(src didcli.DIDDocument) didcli.DIDDocument { + return deepCopy(src).(didcli.DIDDocument) +} + // DeepCopyCreateResource is a decorator for deep copy of type MsgCreateResource. type DeepCopyCreateResource struct { TDeepCopy @@ -46,7 +55,6 @@ func (d *DeepCopyCreateResource) DeepCopy(src resourcetypes.MsgCreateResource) r return deepCopy(src).(resourcetypes.MsgCreateResource) } -// TODO: Add generics after bumping to Go 1.18 and remove this workaround. func deepCopy(src interface{}) interface{} { var reflection interface{} var dst reflect.Value @@ -85,6 +93,17 @@ func deepCopy(src interface{}) interface{} { reflect.Copy(dst, reflect.ValueOf(slc)) // Return the destination value from the reflection slice return dst.Index(0).Interface().(resourcetypes.MsgCreateResource) + case didcli.DIDDocument: + // Create a reflection slice of the same length as the source slice + reflection = reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(actualSrc)), 1, 1).Interface() + // Extract destination value as definition + dst = reflect.ValueOf(reflection) + // Define source value as slice + slc := []didcli.DIDDocument{actualSrc} + // Copy the source value into the destination + reflect.Copy(dst, reflect.ValueOf(slc)) + // Return the destination value from the reflection slice + return dst.Index(0).Interface().(didcli.DIDDocument) default: panic("Unsupported type") } diff --git a/tests/integration/helpers/fee.go b/tests/integration/helpers/fee.go index bf21d6f84..db395ca6f 100644 --- a/tests/integration/helpers/fee.go +++ b/tests/integration/helpers/fee.go @@ -7,7 +7,8 @@ import ( func GenerateFees(amount string) []string { return []string{ "--fees", amount, - "--gas", "400000", + "--gas", "auto", + "--gas-adjustment", "1.8", } } diff --git a/tests/integration/testdata/accounts.go b/tests/integration/testdata/accounts.go index 10f2524e7..8078ba566 100644 --- a/tests/integration/testdata/accounts.go +++ b/tests/integration/testdata/accounts.go @@ -24,7 +24,7 @@ const ( PERIODIC_VESTING_ACCOUNT_ADDR = "cheqd1uyngr0l3xtyj07js9sdew9mk50tqeq8lghhcfr" //? Module accounts can be safely hardcoded, as they are generated per module name - //? and the hex bytes are deterministicly generated from that module name. + //? and the hex bytes are deterministically generated from the module name. FEE_COLLECTOR_ADDR = "cheqd17xpfvakm2amg962yls6f84z3kell8c5l7m0qqv" DID_MODULE_ACCOUNT_ADDR = "cheqd1neus3an933cxp7ewuxw6jcuf6j8ka777h32p64" ) diff --git a/tests/upgrade/integration/cli/config.go b/tests/upgrade/integration/cli/config.go index 02c7b9448..ebcd8d9fb 100644 --- a/tests/upgrade/integration/cli/config.go +++ b/tests/upgrade/integration/cli/config.go @@ -7,16 +7,11 @@ import ( ) const ( - CLIBinaryName = integrationcli.CliBinaryName + CliBinaryName = integrationcli.CliBinaryName Green = integrationcli.Green Purple = integrationcli.Purple ) -const ( - CLIBinaryNamePrevious = CLIBinaryName + "-previous" - CLIBinaryNameNext = CLIBinaryName + "-next" -) - const ( KeyringBackend = integrationcli.KeyringBackend OutputFormat = integrationcli.OutputFormat @@ -37,13 +32,15 @@ const ( var ( TXParams = []string{ - "--gas", Gas, - "--gas-adjustment", GasAdjustment, - "--gas-prices", GasPrices, "--keyring-backend", KeyringBackend, "--chain-id", integrationnetwork.ChainID, "-y", } + GasParams = []string{ + "--gas", Gas, + "--gas-adjustment", GasAdjustment, + "--gas-prices", GasPrices, + } QueryParamsConst = []string{ "--chain-id", integrationnetwork.ChainID, "--output", OutputFormat, diff --git a/tests/upgrade/integration/cli/query.go b/tests/upgrade/integration/cli/query.go index 3255799db..01c7f4e04 100644 --- a/tests/upgrade/integration/cli/query.go +++ b/tests/upgrade/integration/cli/query.go @@ -28,7 +28,7 @@ func Query(container string, binary string, module, query string, queryArgs ...s func QueryModuleVersionMap(container string) (upgradetypes.QueryModuleVersionsResponse, error) { fmt.Println("Querying module version map from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "upgrade", "module_versions", }, QueryParamsConst...) @@ -52,7 +52,7 @@ func QueryModuleVersionMap(container string) (upgradetypes.QueryModuleVersionsRe func QueryParams(container, subspace, key string) (paramproposal.ParamChange, error) { fmt.Println("Querying params from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "params", "subspace", subspace, key, }, QueryParamsConst...) @@ -108,7 +108,7 @@ func QueryResourceFeeParams(container, subspace, key string) (resourcetypes.FeeP func QueryProposalLegacy(container, id string) (govtypesv1beta1.Proposal, error) { fmt.Println("Querying proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "gov", "proposal", id, }, QueryParamsConst...) @@ -131,7 +131,7 @@ func QueryProposalLegacy(container, id string) (govtypesv1beta1.Proposal, error) func QueryProposal(container, id string) (govtypesv1.Proposal, error) { fmt.Println("Querying proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "gov", "proposal", id, }, QueryParamsConst...) diff --git a/tests/upgrade/integration/cli/query_did.go b/tests/upgrade/integration/cli/query_did.go index a3bee9060..4ed9f8fa6 100644 --- a/tests/upgrade/integration/cli/query_did.go +++ b/tests/upgrade/integration/cli/query_did.go @@ -7,7 +7,7 @@ import ( ) func QueryDidLegacy(did string, container string) (didtypesv1.QueryGetDidResponse, error) { - res, err := Query(container, CLIBinaryName, "cheqd", "did", did) + res, err := Query(container, CliBinaryName, "cheqd", "did", did) if err != nil { return didtypesv1.QueryGetDidResponse{}, err } @@ -22,7 +22,7 @@ func QueryDidLegacy(did string, container string) (didtypesv1.QueryGetDidRespons } func QueryDid(did string, container string) (didtypesv2.QueryDidDocResponse, error) { - res, err := Query(container, CLIBinaryName, "cheqd", "did-document", did) + res, err := Query(container, CliBinaryName, "cheqd", "did-document", did) if err != nil { return didtypesv2.QueryDidDocResponse{}, err } diff --git a/tests/upgrade/integration/cli/query_resource.go b/tests/upgrade/integration/cli/query_resource.go index c4c56c21b..d02da5532 100644 --- a/tests/upgrade/integration/cli/query_resource.go +++ b/tests/upgrade/integration/cli/query_resource.go @@ -7,7 +7,7 @@ import ( ) func QueryResourceLegacy(collectionID string, resourceID string, container string) (resourcetypesv1.QueryResourceResponse, error) { - res, err := Query(container, CLIBinaryName, "resource", "resource", collectionID, resourceID) + res, err := Query(container, CliBinaryName, "resource", "resource", collectionID, resourceID) if err != nil { return resourcetypesv1.QueryResourceResponse{}, err } @@ -22,7 +22,7 @@ func QueryResourceLegacy(collectionID string, resourceID string, container strin } func QueryResource(collectionID string, resourceID string, container string) (resourcetypesv2.QueryResourceResponse, error) { - res, err := Query(container, CLIBinaryName, "resource", "resource", collectionID, resourceID) + res, err := Query(container, CliBinaryName, "resource", "specific-resource", collectionID, resourceID) if err != nil { return resourcetypesv2.QueryResourceResponse{}, err } diff --git a/tests/upgrade/integration/cli/tx.go b/tests/upgrade/integration/cli/tx.go index aa027a697..674230fcd 100644 --- a/tests/upgrade/integration/cli/tx.go +++ b/tests/upgrade/integration/cli/tx.go @@ -47,11 +47,13 @@ func Tx(container string, binary string, module, tx, from string, txArgs ...stri func SubmitParamChangeProposal(container string, pathToDir ...string) (sdk.TxResponse, error) { fmt.Println("Submitting param change proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "submit-legacy-proposal", "param-change", filepath.Join(pathToDir...), "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { fmt.Println("Error on submitting ParamChangeProposal", err) @@ -76,7 +78,7 @@ func SubmitParamChangeProposal(container string, pathToDir ...string) (sdk.TxRes func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxResponse, error) { fmt.Println("Submitting upgrade proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "submit-proposal", "software-upgrade", UpgradeName, "--title", "Upgrade Title", @@ -86,6 +88,8 @@ func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxRespons "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err @@ -107,11 +111,13 @@ func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxRespons func DepositGov(container string) (sdk.TxResponse, error) { fmt.Println("Depositing from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "deposit", "1", DepositAmount, "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err @@ -132,11 +138,13 @@ func DepositGov(container string) (sdk.TxResponse, error) { func VoteProposal(container, id, option string) (sdk.TxResponse, error) { fmt.Println("Voting from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "vote", id, option, "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err diff --git a/tests/upgrade/integration/cli/tx_did.go b/tests/upgrade/integration/cli/tx_did.go index d7672210b..33de521b1 100644 --- a/tests/upgrade/integration/cli/tx_did.go +++ b/tests/upgrade/integration/cli/tx_did.go @@ -25,11 +25,16 @@ func CreateDidLegacy(payload didtypesv1.MsgCreateDidPayload, signInputs []cli.Si args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) } -func CreateDid(payload didtypesv2.MsgCreateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { - innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) +func CreateDid(payload cli.DIDDocument, signInputs []cli.SignInput, container, versionID, fees string) (sdk.TxResponse, error) { + innerPayloadJSON, err := json.Marshal(&payload) + if err != nil { + return sdk.TxResponse{}, err + } outerPayload := cli.PayloadWithSignInputs{ Payload: innerPayloadJSON, @@ -50,7 +55,13 @@ func CreateDid(payload didtypesv2.MsgCreateDidDocPayload, signInputs []cli.SignI args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + if versionID != "" { + args = append(args, versionID) + } + + return Tx(container, CliBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) } func UpdateDidLegacy(payload didtypesv1.MsgUpdateDidPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { @@ -66,11 +77,16 @@ func UpdateDidLegacy(payload didtypesv1.MsgUpdateDidPayload, signInputs []cli.Si args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) } -func UpdateDid(payload didtypesv2.MsgUpdateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { - innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) +func UpdateDid(payload cli.DIDDocument, signInputs []cli.SignInput, container, versionID, fees string) (sdk.TxResponse, error) { + innerPayloadJSON, err := json.Marshal(&payload) + if err != nil { + return sdk.TxResponse{}, err + } outerPayload := cli.PayloadWithSignInputs{ Payload: innerPayloadJSON, @@ -91,7 +107,13 @@ func UpdateDid(payload didtypesv2.MsgUpdateDidDocPayload, signInputs []cli.SignI args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + if versionID != "" { + args = append(args, versionID) + } + + return Tx(container, CliBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) } func DeactivateDidLegacy(payload didtypesv1.MsgDeactivateDidPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { @@ -107,10 +129,12 @@ func DeactivateDidLegacy(payload didtypesv1.MsgDeactivateDidPayload, signInputs args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) } -func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { +func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, container string, fees string) (sdk.TxResponse, error) { innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) outerPayload := cli.PayloadWithSignInputs{ @@ -132,5 +156,7 @@ func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []c args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + return Tx(container, CliBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) } diff --git a/tests/upgrade/integration/cli/tx_resource.go b/tests/upgrade/integration/cli/tx_resource.go index c67d8c25f..ace9eafb9 100644 --- a/tests/upgrade/integration/cli/tx_resource.go +++ b/tests/upgrade/integration/cli/tx_resource.go @@ -5,23 +5,12 @@ import ( "encoding/json" "path/filepath" - // integrationhelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" + integrationhelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/x/did/client/cli" types "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" - // . "github.com/onsi/ginkgo/v2" ) -type CreateResourceOptions struct { - CollectionID string `json:"collection_id"` - ResourceID string `json:"resource_id"` - ResourceName string `json:"resource_name"` - ResourceVersion string `json:"resource_version"` - ResourceType string `json:"resource_type"` - ResourceFile string `json:"resource_file"` - AlsoKnownAs []*types.AlternativeUri `json:"also_known_as"` -} - func CreateResourceLegacy(collectionID string, resourceID string, resourceName string, resourceType string, resourceFile string, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { args := []string{ "--collection-id", collectionID, @@ -36,24 +25,16 @@ func CreateResourceLegacy(collectionID string, resourceID string, resourceName s args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "resource", "create-resource", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "resource", "create-resource", OperatorAccounts[container], args...) } -func CreateResource(msg types.MsgCreateResourcePayload, resourceFile string, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { +func CreateResource(payload types.MsgCreateResourcePayload, resourceFile string, signInputs []cli.SignInput, container, fees string) (sdk.TxResponse, error) { resourceFileName := filepath.Base(resourceFile) payloadFileName := "payload.json" - resourceOptions := CreateResourceOptions{ - CollectionID: msg.CollectionId, - ResourceID: msg.Id, - ResourceName: msg.Name, - ResourceVersion: msg.Version, - ResourceType: msg.ResourceType, - ResourceFile: resourceFileName, - AlsoKnownAs: msg.AlsoKnownAs, - } - - payloadJSON, err := json.Marshal(&resourceOptions) + payloadJSON, err := integrationhelpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -73,10 +54,13 @@ func CreateResource(msg types.MsgCreateResourcePayload, resourceFile string, sig return sdk.TxResponse{}, err } - _, err = LocalnetExecExec(container, "/bin/bash", "-c", "echo '"+string(msg.Data)+"' > "+resourceFileName) + _, err = LocalnetExecExec(container, "/bin/bash", "-c", "echo '"+string(payload.Data)+"' > "+resourceFileName) if err != nil { return sdk.TxResponse{}, err } + args := []string{payloadFileName} + args = append(args, resourceFileName) + args = append(args, integrationhelpers.GenerateFees(fees)...) - return Tx(container, CLIBinaryName, "resource", "create", OperatorAccounts[container], payloadFileName) + return Tx(container, CliBinaryName, "resource", "create", OperatorAccounts[container], args...) } diff --git a/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json b/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json index 4d6fdea2d..83186f6ab 100644 --- a/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json +++ b/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json @@ -1,12 +1,12 @@ { "payload": { "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=", - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "9fbb1b86-91f8-4942-97b9-725b7714131c", "name": "Test Resource After Upgrade Name Indy Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.1-indy", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" diff --git a/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json b/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json index 85457fa65..dc7a5c8e1 100644 --- a/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json +++ b/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json @@ -1,12 +1,12 @@ { "payload": { "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=", - "collection_id": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", + "collectionId": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", "id": "54cb8b4d-af33-4606-bc54-0f035ee30e0f", "name": "Test Resource After Upgrade Name UUID Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.2-uuid", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json index d9e220b8b..9f1e9b59a 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json @@ -8,57 +8,57 @@ "controller": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" + "verificationMaterial": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" + "verificationMaterial": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" + "verificationMaterial": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" } ], "authentication": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4" ], "service": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-2", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-3" ] } diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json index 58f05c605..16a8a3f8b 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6Mkt1M9dWKQMSUjE7VXxidhXpah8JGuebU6Pox7mU7iY8mW" + "verificationMaterial": "z6Mkt1M9dWKQMSUjE7VXxidhXpah8JGuebU6Pox7mU7iY8mW" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkoMnWWviQr7EKDe3CNKeUqWzyzQ3yMwqDuEGm3Vpp3Rq8" + "verificationMaterial": "z6MkoMnWWviQr7EKDe3CNKeUqWzyzQ3yMwqDuEGm3Vpp3Rq8" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkrEqEdWVB1b8ENt7VjStKnDtyiUK8vBXB9WnRN49VKXPx" + "verificationMaterial": "z6MkrEqEdWVB1b8ENt7VjStKnDtyiUK8vBXB9WnRN49VKXPx" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkeZENiP78isxXtk1AwusrLSGTH74LU48SkQJEmUpFCxFK" + "verificationMaterial": "z6MkeZENiP78isxXtk1AwusrLSGTH74LU48SkQJEmUpFCxFK" } ], "authentication": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3" ], "capability_invocation": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json index 9cf3b8454..db89eedf2 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json @@ -9,30 +9,30 @@ "controller": [ "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" + "verificationMaterial": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" + "verificationMaterial": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" + "verificationMaterial": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" + "verificationMaterial": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" } ], "authentication": [ @@ -44,19 +44,19 @@ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-2", "serviceType": "type-2", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3" diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json index fb45f05b4..897e1c295 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json @@ -8,65 +8,65 @@ "controller": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkfgridKfm6jqXYpNtRwLZ8w9JuZ6UaMs6ZLtGk2z1jRdS" + "verificationMaterial": "z6MkfgridKfm6jqXYpNtRwLZ8w9JuZ6UaMs6ZLtGk2z1jRdS" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkgBK3i3hWjXC392A1kXWiXHU8if679zXbv1W8RhShUtPU" + "verificationMaterial": "z6MkgBK3i3hWjXC392A1kXWiXHU8if679zXbv1W8RhShUtPU" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkkuYh8wsibknFcMWMsSsNptyK9YTR6pd6D5JUAJ3d9xni" + "verificationMaterial": "z6MkkuYh8wsibknFcMWMsSsNptyK9YTR6pd6D5JUAJ3d9xni" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6Mkf13qp3mXH9gnMKwG6ziGu8HiW7jHefNa4w8iM3NbZ7eg" + "verificationMaterial": "z6Mkf13qp3mXH9gnMKwG6ziGu8HiW7jHefNa4w8iM3NbZ7eg" } ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-3" ], "capability_invocation": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-1" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-4" ], "service": [ { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-2", "serviceType": "type-2", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-3", "serviceType": "type-3", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-3" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3", diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json index b911b59d3..fa1ff0ce0 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json @@ -8,36 +8,36 @@ "controller": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" + "verificationMaterial": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" + "verificationMaterial": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" + "verificationMaterial": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" + "verificationMaterial": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" } ], "authentication": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", @@ -48,7 +48,7 @@ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2" ], @@ -56,11 +56,11 @@ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [] + "alsoKnownAs": [] } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json b/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json index 014144ae3..d6b002533 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json @@ -4,21 +4,21 @@ "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, "metadata": { - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Indy 16 symbols resource", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg/resources/7f2589aa-1279-4bd7-b704-f868772b460a", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json b/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json index b0030dae3..2b62f349f 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json @@ -4,12 +4,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0K" }, "metadata": { - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "9fbb1b86-91f8-4942-97b9-725b7714131c", "name": "Test Resource After Upgrade Name Indy Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.1-indy", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -23,10 +23,10 @@ "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "d9c6f336c5edfc5034bc66aab9277daac01e1e85b41e49e6bf1b7a8f2a81c04f", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json b/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json index 040d2547c..2b0afd349 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json @@ -4,12 +4,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0K" }, "metadata": { - "collection_id": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", + "collectionId": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", "id": "54cb8b4d-af33-4606-bc54-0f035ee30e0f", "name": "Test Resource After Upgrade Name UUID Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.2-uuid", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -23,10 +23,10 @@ "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "d9c6f336c5edfc5034bc66aab9277daac01e1e85b41e49e6bf1b7a8f2a81c04f", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json index 0c6e8a616..44003040d 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json @@ -8,17 +8,17 @@ "id": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", "name": "UUID lowercase", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554/resources/b1c9406d-568c-4a41-9ed3-133fdf3e4974", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "9011d912-258e-4c76-93a8-200c2031685e" + "previousVersionId": "", + "nextVersionId": "9011d912-258e-4c76-93a8-200c2031685e" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json index 62c462b24..a03b14e0e 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json @@ -8,17 +8,17 @@ "id": "9011d912-258e-4c76-93a8-200c2031685e", "name": "UUID lowercase", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554/resources/9011d912-258e-4c76-93a8-200c2031685e", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", - "next_version_id": "" + "previousVersionId": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json index adf27339c..0658adc78 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json @@ -8,17 +8,17 @@ "id": "f2f985da-62b5-457b-8167-54a0a739bdc4", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed1", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed1", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/f2f985da-62b5-457b-8167-54a0a739bdc4", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json index 94b3dd3d3..c487078cd 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json @@ -8,17 +8,17 @@ "id": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed23", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed23", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "76ecedeb-225d-4164-90c2-a4857ac3c01a" + "previousVersionId": "", + "nextVersionId": "76ecedeb-225d-4164-90c2-a4857ac3c01a" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json index 63db2a3c7..477b96296 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json @@ -8,17 +8,17 @@ "id": "76ecedeb-225d-4164-90c2-a4857ac3c01a", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed23", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed23", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/76ecedeb-225d-4164-90c2-a4857ac3c01a", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", - "next_version_id": "" + "previousVersionId": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json index 1c9c7dbc8..87ee5d1c8 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json @@ -8,57 +8,57 @@ "controller": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" + "publicKeyMultibase": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" + "publicKeyMultibase": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" + "publicKeyMultibase": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" } ], "authentication": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4" ], "service": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-2", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-3" ] }, diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json index 5c3d835b3..127b2c12c 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json @@ -9,30 +9,30 @@ "controller": [ "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" + "publicKeyMultibase": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" + "publicKeyMultibase": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" + "publicKeyMultibase": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-4", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" + "publicKeyMultibase": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" } ], "authentication": [ @@ -43,20 +43,20 @@ "service": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-2", - "serviceType": "type-2", - "service_endpoint": [ + "type": "type-2", + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3" diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json index 9da847232..b362ebeb2 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json @@ -8,60 +8,60 @@ "controller": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" + "publicKeyMultibase": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" + "publicKeyMultibase": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" + "publicKeyMultibase": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" + "publicKeyMultibase": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" } ], "authentication": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2" ], "service": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [] + "alsoKnownAs": [] }, "signInputs": [ { diff --git a/tests/upgrade/integration/param_change_proposal_test.go b/tests/upgrade/integration/param_change_proposal_test.go index d78eaf20c..8b410c727 100644 --- a/tests/upgrade/integration/param_change_proposal_test.go +++ b/tests/upgrade/integration/param_change_proposal_test.go @@ -16,13 +16,13 @@ import ( var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for node catching up", func() { By("pinging the node status until catching up is flagged as false") - err := cli.WaitForCaughtUp(cli.Validator0, cli.CLIBinaryName, cli.VotingPeriod*6) + err := cli.WaitForCaughtUp(cli.Validator0, cli.CliBinaryName, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) It("should submit a parameter change proposal for did module", func() { By("passing the proposal file to the container") - _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, "proposal", "existing", "param_change_did.json"), cli.DockerHome, cli.Validator0) + _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "existing", "param_change_did.json"), cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) By("sending a SubmitParamChangeProposal transaction from `validator0` container") @@ -61,11 +61,11 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for the proposal to pass", func() { By("getting the current block height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for the proposal to pass") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+20, cli.VotingPeriod*3) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+20, cli.VotingPeriod*3) Expect(err).To(BeNil()) }) @@ -83,14 +83,14 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { By("checking against the expected fee params") var expectedFeeParams didtypes.FeeParams - _, err = Loader(filepath.Join(GeneratedJSONDir, "proposal", "expected", "param_change_did.json"), &expectedFeeParams) + _, err = Loader(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "expected", "param_change_did.json"), &expectedFeeParams) Expect(err).To(BeNil()) Expect(feeParams).To(Equal(expectedFeeParams)) }) It("should submit a parameter change proposal for resource module", func() { By("passing the proposal file to the container") - _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, "proposal", "existing", "param_change_resource.json"), cli.DockerHome, cli.Validator0) + _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "existing", "param_change_resource.json"), cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) By("sending a SubmitParamChangeProposal transaction from `validator0` container") @@ -129,11 +129,11 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for the proposal to pass", func() { By("getting the current block height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for the proposal to pass") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+20, cli.VotingPeriod*3) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+20, cli.VotingPeriod*3) Expect(err).To(BeNil()) }) @@ -151,7 +151,7 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { By("checking against the expected fee params") var expectedFeeParams resourcetypes.FeeParams - _, err = Loader(filepath.Join(GeneratedJSONDir, "proposal", "expected", "param_change_resource.json"), &expectedFeeParams) + _, err = Loader(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "expected", "param_change_resource.json"), &expectedFeeParams) Expect(err).To(BeNil()) Expect(feeParams).To(Equal(expectedFeeParams)) }) diff --git a/tests/upgrade/integration/post_test.go b/tests/upgrade/integration/post_test.go index fb7ae55cf..fc968eebd 100644 --- a/tests/upgrade/integration/post_test.go +++ b/tests/upgrade/integration/post_test.go @@ -1,4 +1,4 @@ -//go:build upgrade_integration +// go:build upgrade_integration package integration @@ -6,6 +6,7 @@ import ( "fmt" "path/filepath" + clihelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" cli "github.com/cheqd/cheqd-node/tests/upgrade/integration/cli" didcli "github.com/cheqd/cheqd-node/x/did/client/cli" didtypesv2 "github.com/cheqd/cheqd-node/x/did/types" @@ -16,20 +17,36 @@ import ( ) var _ = Describe("Upgrade - Post", func() { + var feeParams didtypesv2.FeeParams + var resourceFeeParams resourcetypesv2.FeeParams + + BeforeEach(func() { + // Query fee params + res, err := cli.QueryParams(cli.Validator0, didtypesv2.ModuleName, string(didtypesv2.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = clihelpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) + + res, err = cli.QueryParams(cli.Validator0, resourcetypesv2.ModuleName, string(resourcetypesv2.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = clihelpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) + }) + Context("After a software upgrade execution has concluded", func() { It("should wait for node catching up", func() { By("pinging the node status until catching up is flagged as false") - err := cli.WaitForCaughtUp(cli.Validator0, cli.CLIBinaryName, cli.VotingPeriod*6) + err := cli.WaitForCaughtUp(cli.Validator0, cli.CliBinaryName, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) It("should wait for a certain number of blocks to be produced", func() { By("fetching the current chain height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for 10 blocks to be produced on top, after the upgrade") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+10, cli.VotingPeriod*6) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+10, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) @@ -52,7 +69,7 @@ var _ = Describe("Upgrade - Post", func() { Expect(err).To(BeNil()) for _, payload := range DidDocUpdatePayloads { - var DidDocUpdatePayload didtypesv2.MsgUpdateDidDocPayload + var DidDocUpdatePayload didcli.DIDDocument var DidDocUpdateSignInput []didcli.SignInput testCase := GetCaseName(payload) @@ -63,7 +80,8 @@ var _ = Describe("Upgrade - Post", func() { DidDocUpdateSignInput, err = Loader(payload, &DidDocUpdatePayload) Expect(err).To(BeNil()) - res, err := cli.UpdateDid(DidDocUpdatePayload, DidDocUpdateSignInput, cli.Validator0) + tax := feeParams.UpdateDid.String() + res, err := cli.UpdateDid(DidDocUpdatePayload, DidDocUpdateSignInput, cli.Validator0, "", tax) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) } @@ -86,7 +104,8 @@ var _ = Describe("Upgrade - Post", func() { DidDocDeactivateSignInput, err = Loader(payload, &DidDocDeacctivatePayload) Expect(err).To(BeNil()) - res, err := cli.DeactivateDid(DidDocDeacctivatePayload, DidDocDeactivateSignInput, cli.Validator0) + tax := feeParams.DeactivateDid.String() + res, err := cli.DeactivateDid(DidDocDeacctivatePayload, DidDocDeactivateSignInput, cli.Validator0, tax) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) } @@ -115,6 +134,7 @@ var _ = Describe("Upgrade - Post", func() { ResourceFile, signInputs, cli.Validator0, + resourceFeeParams.Json.String(), ) Expect(err).To(BeNil()) @@ -194,7 +214,7 @@ var _ = Describe("Upgrade - Post", func() { Expect(res.Resource.Metadata.ResourceType).To(Equal(ResourceCreateRecord.Metadata.ResourceType)) Expect(res.Resource.Metadata.AlsoKnownAs).To(Equal(ResourceCreateRecord.Metadata.AlsoKnownAs)) Expect(res.Resource.Metadata.MediaType).To(Equal(ResourceCreateRecord.Metadata.MediaType)) - // Created fills while creating. We just ignoring it while checking. + // Created is populated on successful creation. We are ignoring it here. // Expect(res.Resource.Metadata.Created).To(Equal(ResourceCreateRecord.Metadata.Created)) Expect(res.Resource.Metadata.Checksum).To(Equal(ResourceCreateRecord.Metadata.Checksum)) Expect(res.Resource.Metadata.PreviousVersionId).To(Equal(ResourceCreateRecord.Metadata.PreviousVersionId)) diff --git a/tests/upgrade/integration/pre_test.go b/tests/upgrade/integration/pre_test.go index 4576a011f..fc1fb2a70 100644 --- a/tests/upgrade/integration/pre_test.go +++ b/tests/upgrade/integration/pre_test.go @@ -11,7 +11,6 @@ import ( didtypesv1 "github.com/cheqd/cheqd-node/x/did/types/v1" resourcetypesv1 "github.com/cheqd/cheqd-node/x/resource/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - // upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" <-- TODO: uncomment when whole sequence of upgrade tests is ready . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) @@ -20,24 +19,10 @@ var _ = Describe("Upgrade - Pre", func() { Context("Before a softare upgrade execution is initiated", func() { It("should wait for chain to bootstrap", func() { By("pinging the node status until the dvoting end height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, cli.BootstrapHeight, cli.BootstrapPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, cli.BootstrapHeight, cli.BootstrapPeriod) Expect(err).To(BeNil()) }) - // TODO: uncomment when whole sequence of upgrade tests is ready - // It("should match the expected module version map", func() { - // By("loading the expected module version map") - // var expected upgradetypes.QueryModuleVersionsResponse - // _, err := Loader(filepath.Join(GeneratedJSONDir, "pre", "query - module-version-map", "v069.json"), &expected) - // Expect(err).To(BeNil()) - - // By("matching the expected module version map") - // actual, err := cli.QueryModuleVersionMap(cli.Validator0) - // Expect(err).To(BeNil()) - - // Expect(actual.ModuleVersions).To(Equal(expected.ModuleVersions), "module version map mismatch") - // }) - It("should load and run existing diddoc payloads - case: create", func() { By("matching the glob pattern for existing diddoc payloads") ExistingDidDocCreatePayloads, err := RelGlob(GeneratedJSONDir, "pre", "create - diddoc", "*.json") @@ -112,7 +97,6 @@ var _ = Describe("Upgrade - Pre", func() { _, err = cli.LocalnetExecCopyAbsoluteWithPermissions(ResourceFile, cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) - // TODO: Add resource file. Right now, it is not possible to create a resource without a file. So we need to copy a file to the container home directory. res, err := cli.CreateResourceLegacy( ResourceCreatePayload.CollectionId, ResourceCreatePayload.Id, @@ -132,7 +116,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should calculate the upgrade height", func() { By("getting the current block height and calculating the voting end height") var err error - UPGRADE_HEIGHT, VOTING_END_HEIGHT, err = cli.CalculateUpgradeHeight(cli.Validator0, cli.CLIBinaryName) + UPGRADE_HEIGHT, VOTING_END_HEIGHT, err = cli.CalculateUpgradeHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) fmt.Printf("Upgrade height: %d\n", UPGRADE_HEIGHT) fmt.Printf("Voting end height: %d\n", VOTING_END_HEIGHT) @@ -182,7 +166,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should wait for the voting end height to be reached", func() { By("pinging the node status until the voting end height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, VOTING_END_HEIGHT, cli.VotingPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, VOTING_END_HEIGHT, cli.VotingPeriod) Expect(err).To(BeNil()) }) @@ -195,7 +179,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should wait for the upgrade height to be reached", func() { By("pinging the node status until the upgrade height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, UPGRADE_HEIGHT, cli.VotingPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, UPGRADE_HEIGHT, cli.VotingPeriod) Expect(err).To(BeNil()) }) }) diff --git a/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json b/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json index ab9b1c224..0b24a9eda 100644 --- a/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [], "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "controller": [ @@ -8,17 +8,17 @@ "authentication": [ "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1" ], - "assertion_method": [], - "capability_invocation": [], - "capability_delegation": [], - "key_agreement": [], - "also_known_as": [], - "verification_method": [ + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ { "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "verification_material": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" + "verificationMaterial": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" } ], "service": [] @@ -26,9 +26,9 @@ "metadata": { "created": "2021-09-14T13:00:00Z", "updated": "2021-09-14T13:00:00Z", - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", "deactivated": false, - "next_version_id": "", - "previous_version_id": "" + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json b/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json index 6ccd6f415..7878c66f2 100644 --- a/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json index ab9b1c224..0b24a9eda 100644 --- a/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [], "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "controller": [ @@ -8,17 +8,17 @@ "authentication": [ "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1" ], - "assertion_method": [], - "capability_invocation": [], - "capability_delegation": [], - "key_agreement": [], - "also_known_as": [], - "verification_method": [ + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ { "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "verification_material": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" + "verificationMaterial": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" } ], "service": [] @@ -26,9 +26,9 @@ "metadata": { "created": "2021-09-14T13:00:00Z", "updated": "2021-09-14T13:00:00Z", - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", "deactivated": false, - "next_version_id": "", - "previous_version_id": "" + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json index 878591935..833e3e69b 100644 --- a/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json @@ -1,16 +1,16 @@ { - "Resource": { - "Data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" + "resource": { + "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, - "Metadata": { - "Collection_Id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "Id": "7f2589aa-1279-4bd7-b704-f868772b460a", - "Name": "Test Resource", - "Resource_Type": "test-resource-type", - "Media_Type": "application/json", - "Created": "2022-11-01T10:54:01Z", - "Checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "Previous_Version_Id": null, - "Next_Version_Id": null + "metadata": { + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "id": "7f2589aa-1279-4bd7-b704-f868772b460a", + "name": "Test Resource", + "resourceType": "test-resource-type", + "mediaType": "application/json", + "created": "2022-11-01T10:54:01Z", + "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", + "previousVersionId": null, + "nextVersionId": null } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json index 48a9d544b..6546c44f4 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" + "verificationMaterial": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" + "verificationMaterial": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" + "verificationMaterial": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" + "verificationMaterial": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" } ], "authentication": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", - "next_version_id": "", - "previous_version_id": "" + "versionId": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json index 81f879fce..799aaea43 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" + "verificationMaterial": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" + "verificationMaterial": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" + "verificationMaterial": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" + "verificationMaterial": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" } ], "authentication": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "7c69f199-f71b-48b3-a570-950fa5e70ded", - "next_version_id": "", - "previous_version_id": "" + "versionId": "7c69f199-f71b-48b3-a570-950fa5e70ded", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json index c4e496c5c..fc33ff2c9 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "xcWigjiDhDTaBGRX", + "collectionId": "xcWigjiDhDTaBGRX", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json index d8ade8d1e..03521af87 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "SWFYv4aPjJtxZ1q2", + "collectionId": "SWFYv4aPjJtxZ1q2", "id": "406855d8-546b-4446-b72a-2614c7d0c0d5", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json index 31f865bfb..20aec7cc1 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" + "verificationMaterial": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" + "verificationMaterial": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" + "verificationMaterial": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" + "verificationMaterial": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" } ], "authentication": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", - "next_version_id": "", - "previous_version_id": "" + "versionId": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json index 5391aa302..4fab24741 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" + "verificationMaterial": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" + "verificationMaterial": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" + "verificationMaterial": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" + "verificationMaterial": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" } ], "authentication": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "7c69f199-f71b-48b3-a570-950fa5e70ded", - "next_version_id": "", - "previous_version_id": "" + "versionId": "7c69f199-f71b-48b3-a570-950fa5e70ded", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json index 5c80dcc41..1eae5c4a8 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "7Hty8uGafcEsU7EpJEAPUC", + "collectionId": "7Hty8uGafcEsU7EpJEAPUC", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json index f0efd8115..01ba95d87 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "5aayeuitt5VD2VWbL2zopg", + "collectionId": "5aayeuitt5VD2VWbL2zopg", "id": "406855d8-546b-4446-b72a-2614c7d0c0d5", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json index 09d8954fd..e7fd0e1e2 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MknmnJvvx4xK3EQQsbBS7DuMvsvKG7wF9GBXFxSVsVmYzV" + "verificationMaterial": "z6MknmnJvvx4xK3EQQsbBS7DuMvsvKG7wF9GBXFxSVsVmYzV" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MkotEbRMNwstgbk41M11yEBzSgVSnD5imzmQD83vvZGDur" + "verificationMaterial": "z6MkotEbRMNwstgbk41M11yEBzSgVSnD5imzmQD83vvZGDur" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MknTEAYV9n61NZyqZdBF565j8YoXUzpBbvy4frDWtNuiAW" + "verificationMaterial": "z6MknTEAYV9n61NZyqZdBF565j8YoXUzpBbvy4frDWtNuiAW" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6Mkjt4a7XEZrZTY2MSL1myF8bfez6szk5BRrHVGEKjVvfWT" + "verificationMaterial": "z6Mkjt4a7XEZrZTY2MSL1myF8bfez6szk5BRrHVGEKjVvfWT" } ], "authentication": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", - "next_version_id": "", - "previous_version_id": "" + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json index bd73053bb..56ab7c3f4 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6Mkkc6v4z1jVWHBdaXR9TRSU9N9PSt1PK5czryfCCeYQ2pT" + "verificationMaterial": "z6Mkkc6v4z1jVWHBdaXR9TRSU9N9PSt1PK5czryfCCeYQ2pT" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6MkhvhXhLy9KbcVeXRoViiBMPUR6qUrPaz9yJCqLY4AjPe2" + "verificationMaterial": "z6MkhvhXhLy9KbcVeXRoViiBMPUR6qUrPaz9yJCqLY4AjPe2" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6Mkfd2VEesedDybq5UPhGfSqDQABcDTz1hraLbQcRHavP8v" + "verificationMaterial": "z6Mkfd2VEesedDybq5UPhGfSqDQABcDTz1hraLbQcRHavP8v" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6MkhpM45nn2SvgyUBrRoQop7rqSHH43n8c7tSBib7cCc1jK" + "verificationMaterial": "z6MkhpM45nn2SvgyUBrRoQop7rqSHH43n8c7tSBib7cCc1jK" } ], "authentication": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "c57cb7a2-2b35-4d0d-b453-eda463ae58ef", - "next_version_id": "", - "previous_version_id": "" + "versionId": "c57cb7a2-2b35-4d0d-b453-eda463ae58ef", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json index 27c197cbd..aeecfee58 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json @@ -1,16 +1,16 @@ { - "Resource": { + "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, - "Metadata": { - "Collection_Id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "Id": "7f2589aa-1279-4bd7-b704-f868772b460a", - "Name": "Test Resource", - "Resource_Type": "test-resource-type", - "Media_Type": "application/json", - "Created": "2022-11-01T10:54:01Z", - "Checksum": "7b76f4738e36f7c7dcd5cd78f5a7db7f873cf7de9f6fddb8dbb69ee357b8eb8f5bf77e1c6b8f79f7dd5befce766fce797b20226d657373616765223a202268656c6c6f20776f726c64227d", - "Previous_Version_Id": null, - "Next_Version_Id": null + "metadata": { + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "id": "7f2589aa-1279-4bd7-b704-f868772b460a", + "name": "Test Resource", + "resourceType": "test-resource-type", + "mediaType": "application/json", + "created": "2022-11-01T10:54:01Z", + "checksum": "7b76f4738e36f7c7dcd5cd78f5a7db7f873cf7de9f6fddb8dbb69ee357b8eb8f5bf77e1c6b8f79f7dd5befce766fce797b20226d657373616765223a202268656c6c6f20776f726c64227d", + "previousVersionId": null, + "nextVersionId": null } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json index d63c02b90..10f4349d6 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "0c3bc512-a55d-4815-8479-a7d43116f254", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "Ba6ogb568jBvvPUrKLH7cn" + "previousVersionId": "", + "nextVersionId": "Ba6ogb568jBvvPUrKLH7cn" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json index d150b0e05..9416c049b 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-02T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "0c3bc512-a55d-4815-8479-a7d43116f254", - "next_version_id": "c69b316e-0ca0-4885-a8d9-40cedf885c56" + "previousVersionId": "0c3bc512-a55d-4815-8479-a7d43116f254", + "nextVersionId": "c69b316e-0ca0-4885-a8d9-40cedf885c56" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json index 68f2f636a..b6616afea 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "c69b316e-0ca0-4885-a8d9-40cedf885c56", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_3", - "also_known_as": [ + "resourceType": "CL-Schema_3", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-03T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", - "next_version_id": "" + "previousVersionId": "91e0cb40-da1c-46b6-b497-c8aab06198f7", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json index b85fce99d..97d41d0b6 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "0c3bc512-a55d-4815-8479-a7d43116f254", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "91e0cb40-da1c-46b6-b497-c8aab06198f7" + "previousVersionId": "", + "nextVersionId": "91e0cb40-da1c-46b6-b497-c8aab06198f7" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json index 2d13249fe..8464275de 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-02T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "0c3bc512-a55d-4815-8479-a7d43116f254", - "next_version_id": "" + "previousVersionId": "0c3bc512-a55d-4815-8479-a7d43116f254", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json index 723c69dfa..3bdab0c69 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "c69b316e-0ca0-4885-a8d9-40cedf885c56", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_3", - "also_known_as": [ + "resourceType": "CL-Schema_3", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-03T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json index cc38c72ef..f760e83fd 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", - "next_version_id": "", - "previous_version_id": "" + "versionId": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json index 8e0dcb6f9..a3088740e 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" + "verificationMaterial": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" + "verificationMaterial": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" + "verificationMaterial": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" + "verificationMaterial": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" } ], "authentication": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", - "next_version_id": "", - "previous_version_id": "" + "versionId": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json index 1bf03c3f9..1da8da26d 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" + "verificationMaterial": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" + "verificationMaterial": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" + "verificationMaterial": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" + "verificationMaterial": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" } ], "authentication": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "efcd0b4f-9b24-4718-b596-50ccab40aabf", - "next_version_id": "", - "previous_version_id": "" + "versionId": "efcd0b4f-9b24-4718-b596-50ccab40aabf", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json index becb7f90b..d990353ad 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "e77cc679-ada0-4a71-8738-918f388fcbb5", + "collectionId": "e77cc679-ada0-4a71-8738-918f388fcbb5", "id": "58a4f59a-bddf-41b4-ab54-d7a9e7ad90ff", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json index c2f6a8898..f7773ddeb 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "C1594E93-dEd6-4244-9CC4-74af38dab09d", + "collectionId": "C1594E93-dEd6-4244-9CC4-74af38dab09d", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json index 1ca422ef1..c19229c71 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", + "collectionId": "FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json index cc38c72ef..f760e83fd 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", - "next_version_id": "", - "previous_version_id": "" + "versionId": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json index 3b1c42bd6..65ae076d1 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" + "verificationMaterial": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" + "verificationMaterial": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" + "verificationMaterial": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" + "verificationMaterial": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" } ], "authentication": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", - "next_version_id": "", - "previous_version_id": "" + "versionId": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json index c299227cd..ff26461da 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" + "verificationMaterial": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" + "verificationMaterial": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" + "verificationMaterial": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" + "verificationMaterial": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" } ], "authentication": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "efcd0b4f-9b24-4718-b596-50ccab40aabf", - "next_version_id": "", - "previous_version_id": "" + "versionId": "efcd0b4f-9b24-4718-b596-50ccab40aabf", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json index becb7f90b..d990353ad 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "e77cc679-ada0-4a71-8738-918f388fcbb5", + "collectionId": "e77cc679-ada0-4a71-8738-918f388fcbb5", "id": "58a4f59a-bddf-41b4-ab54-d7a9e7ad90ff", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json index 360dfe93e..c3f60c7c3 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "a35d7486-1749-55bf-96d4-683958a9a884", + "collectionId": "a35d7486-1749-55bf-96d4-683958a9a884", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json index 59c5bbffe..4633bba79 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "d87f512c-cbfc-58d1-b995-f526589ad808", + "collectionId": "d87f512c-cbfc-58d1-b995-f526589ad808", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json b/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json index c68a908e0..6f8004fea 100644 --- a/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json +++ b/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "EDEAD35C83E20A72872ACD3C36B7BA42300712FC8E3EEE1340E47E2F1B216B2D", - "next_version_id": "", - "previous_version_id": "" + "versionId": "EDEAD35C83E20A72872ACD3C36B7BA42300712FC8E3EEE1340E47E2F1B216B2D", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json b/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json index 656708ea9..64d327604 100644 --- a/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json +++ b/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "b459d3a4-5f02-565b-b137-d9f8436edc5b", - "next_version_id": "", - "previous_version_id": "" + "versionId": "b459d3a4-5f02-565b-b137-d9f8436edc5b", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/setup/loader.go b/tests/upgrade/unit/setup/loader.go index f88daca89..ed6e309c8 100644 --- a/tests/upgrade/unit/setup/loader.go +++ b/tests/upgrade/unit/setup/loader.go @@ -76,7 +76,7 @@ func (l Loader) LoadFile( case *didtypes.DidDocWithMetadata: err = setup.Cdc.UnmarshalJSON(file, dataChunk) case *resourcetypes.ResourceWithMetadata: - err = json.Unmarshal(file, dataChunk) + err = setup.Cdc.UnmarshalJSON(file, dataChunk) default: err = json.Unmarshal(file, dataChunk) } diff --git a/x/did/client/cli/tx.go b/x/did/client/cli/tx.go index 05ac7af56..e7d2d4c4e 100644 --- a/x/did/client/cli/tx.go +++ b/x/did/client/cli/tx.go @@ -8,12 +8,40 @@ import ( "github.com/cheqd/cheqd-node/x/did/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/spf13/cobra" + tmcli "github.com/tendermint/tendermint/libs/cli" ) +const ( + FlagVersionID = "version-id" +) + +type DIDDocument struct { + Context []string `json:"context"` + ID string `json:"id"` + Controller []string `json:"controller,omitempty"` + VerificationMethod []VerificationMethod `json:"verificationMethod,omitempty"` + Authentication []string `json:"authentication,omitempty"` + AssertionMethod []string `json:"assertionMethod,omitempty"` + CapabilityInvocation []string `json:"capabilityInvocation,omitempty"` + CapabilityDelegation []string `json:"capabilityDelegation,omitempty"` + KeyAgreement []string `json:"keyAgreement,omitempty"` + Service []Service `json:"service,omitempty"` + AlsoKnownAs []string `json:"alsoKnownAs,omitempty"` +} + +type VerificationMethod map[string]any + +type Service struct { + ID string `json:"id"` + Type string `json:"type"` + ServiceEndpoint []string `json:"serviceEndpoint"` +} + type PayloadWithSignInputs struct { Payload json.RawMessage SignInputs []SignInput @@ -24,6 +52,37 @@ type SignInput struct { PrivKey ed25519.PrivateKey } +// AddTxFlagsToCmd adds common flags to a module tx command. +func AddTxFlagsToCmd(cmd *cobra.Command) { + cmd.Flags().StringP(tmcli.OutputFlag, "o", "json", "Output format (text|json)") + cmd.Flags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used") + cmd.Flags().String(flags.FlagFrom, "", "Name or address of private key with which to sign") + cmd.Flags().Uint64P(flags.FlagAccountNumber, "a", 0, "The account number of the signing account (offline mode only)") + cmd.Flags().Uint64P(flags.FlagSequence, "s", 0, "The sequence number of the signing account (offline mode only)") + cmd.Flags().String(flags.FlagNote, "", "Note to add a description to the transaction (previously --memo)") + cmd.Flags().String(flags.FlagGasPrices, "", "Gas prices in decimal format to determine the transaction fee (e.g. 50ncheq)") + cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", ": to tendermint rpc interface for this chain") + cmd.Flags().Bool(flags.FlagUseLedger, false, "Use a connected Ledger device") + cmd.Flags().StringP(flags.FlagBroadcastMode, "b", flags.BroadcastSync, "Transaction broadcasting mode (sync|async|block)") + cmd.Flags().Bool(flags.FlagDryRun, false, "ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)") + cmd.Flags().Bool(flags.FlagGenerateOnly, false, "Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)") + cmd.Flags().Bool(flags.FlagOffline, false, "Offline mode (does not allow any online functionality)") + cmd.Flags().BoolP(flags.FlagSkipConfirmation, "y", false, "Skip tx broadcasting prompt confirmation") + cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test|memory)") + cmd.Flags().String(flags.FlagSignMode, "", "Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature") + cmd.Flags().Uint64(flags.FlagTimeoutHeight, 0, "Set a block timeout height to prevent the tx from being committed past a certain height") + cmd.Flags().String(flags.FlagFeePayer, "", "Fee payer pays fees for the transaction instead of deducting from the signer") + cmd.Flags().String(flags.FlagFeeGranter, "", "Fee granter grants fees for the transaction") + cmd.Flags().String(flags.FlagTip, "", "Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator") + cmd.Flags().Bool(flags.FlagAux, false, "Generate aux signer data instead of sending a tx") + + // overrides + cmd.Flags().String(flags.FlagGas, flags.GasFlagAuto, fmt.Sprintf("Gas limit to set per-transaction; set to %q to calculate sufficient gas automatically", flags.GasFlagAuto)) + cmd.Flags().Float64(flags.FlagGasAdjustment, 1.8, "adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored ") + + // flags --fees added by each module's tx command +} + // GetTxCmd returns the transaction commands for this module func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ @@ -103,3 +162,72 @@ func ReadPayloadWithSignInputsFromFile(filePath string) (json.RawMessage, []Sign return payloadWithSignInputs.Payload, payloadWithSignInputs.SignInputs, nil } + +func GetFromSpecCompliantPayload(specPayload DIDDocument) ([]*types.VerificationMethod, []*types.Service, error) { + verificationMethod := make([]*types.VerificationMethod, 0, len(specPayload.VerificationMethod)) + for i, vm := range specPayload.VerificationMethod { + var verificationMethodType string + if value, ok := vm["type"].(string); !ok { + return nil, nil, fmt.Errorf("%d: verification method type is not specified", i) + } else { + verificationMethodType = value + } + + switch verificationMethodType { + case "Ed25519VerificationKey2020": + _, ok := vm["publicKeyMultibase"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyMultibase is not specified", i) + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: vm["publicKeyMultibase"].(string), + }) + case "Ed25519VerificationKey2018": + _, ok := vm["publicKeyBase58"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyBase58 is not specified", i) + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: vm["publicKeyBase58"].(string), + }) + case "JsonWebKey2020": + _, ok := vm["publicKeyJwk"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyJwk is not specified", i) + } + + jwk, err := json.Marshal(vm["publicKeyJwk"]) + if err != nil { + return nil, nil, err + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: string(jwk), + }) + default: + return nil, nil, fmt.Errorf("%d: verification method type is not supported", i) + } + } + + service := make([]*types.Service, 0, len(specPayload.Service)) + for _, s := range specPayload.Service { + service = append(service, &types.Service{ + Id: s.ID, + ServiceType: s.Type, + ServiceEndpoint: s.ServiceEndpoint, + }) + } + + return verificationMethod, service, nil +} diff --git a/x/did/client/cli/tx_create_diddoc.go b/x/did/client/cli/tx_create_diddoc.go index 182b324ea..e6f6ba9fb 100644 --- a/x/did/client/cli/tx_create_diddoc.go +++ b/x/did/client/cli/tx_create_diddoc.go @@ -1,20 +1,74 @@ package cli import ( + "encoding/json" + "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdCreateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "create-did [payload-file]", + Use: "create-did [payload-file] --version-id [version-id]", Short: "Create a new DID and associated DID Document.", - Long: "Creates a new DID and associated DID Document. " + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Long: `Creates a new DID and associated DID Document. +[payload-file] is JSON encoded DID Document alongside with sign inputs. +Version ID is optional and is determined by the '--version-id' flag. +If not provided, a random UUID will be used as version-id. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document creation, REGARDLESS of what value is passed in '--fees' flag. +2. Payload file should be a JSON file containing properties specified in the DID Core Specification. Rules from DID Core spec are followed on which properties are mandatory and which ones are optional. +3. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "context": [ "https://www.w3.org/ns/did/v1" ], + "id": "did:cheqd::", + "controller": [ + "did:cheqd::" + ], + "authentication": [ + "did:cheqd::#" + ], + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ + { + "id": "did:cheqd::#", + "type": "", + "controller": "did:cheqd::", + "publicKeyMultibase": "" + } + ], + "service": [ + { + "id": "did:cheqd::#", + "type": "", + "serviceEndpoint": [ + "" + ] + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,28 +76,53 @@ func CmdCreateDidDoc() *cobra.Command { return err } - // 1. Add utility-fee as 2nd arg - // 2. Short - // 3. Long - // 4. Show example to query the actual params `cheqd-noded query params subspace cheqd` - payloadFile := args[0] + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - // Unmarshal payload - var payload types.MsgCreateDidDocPayload - err = clientCtx.Codec.UnmarshalJSON([]byte(payloadJSON), &payload) + // Unmarshal spec-compliant payload + var specPayload DIDDocument + err = json.Unmarshal([]byte(payloadJSON), &specPayload) + if err != nil { + return err + } + + // Validate spec-compliant payload & get verification methods + verificationMethod, service, err := GetFromSpecCompliantPayload(specPayload) if err != nil { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() + // Construct MsgCreateDidDocPayload + payload := types.MsgCreateDidDocPayload{ + Context: specPayload.Context, + Id: specPayload.ID, + Controller: specPayload.Controller, + VerificationMethod: verificationMethod, + Authentication: specPayload.Authentication, + AssertionMethod: specPayload.AssertionMethod, + CapabilityInvocation: specPayload.CapabilityInvocation, + CapabilityDelegation: specPayload.CapabilityDelegation, + KeyAgreement: specPayload.KeyAgreement, + Service: service, + AlsoKnownAs: specPayload.AlsoKnownAs, + VersionId: versionID, } // Build identity message @@ -65,7 +144,16 @@ func CmdCreateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultCreateDidTxFee)).String(), "Fixed fee for DID creation, e.g., 50000000000ncheq. Please check what the current fees are by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/client/cli/tx_deactivate_diddoc.go b/x/did/client/cli/tx_deactivate_diddoc.go index cf2503bcc..3c5c9ccd5 100644 --- a/x/did/client/cli/tx_deactivate_diddoc.go +++ b/x/did/client/cli/tx_deactivate_diddoc.go @@ -2,19 +2,41 @@ package cli import ( "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdDeactivateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "deactivate-did [payload-file]", + Use: "deactivate-did [payload-file] --version-id [version-id]", Short: "Deactivate a DID.", - Long: "Deactivates a DID and its associated DID Document." + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Long: `Deactivates a DID and its associated DID Document. +[payload-file] is JSON encoded MsgDeactivateDidDocPayload alongside with sign inputs. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document deactivation, REGARDLESS of what value is passed in '--fees' flag. +2. A new DID Document version is created when deactivating a DID Document so that the operation timestamp can be recorded. Version ID is optional and is determined by the '--version-id' flag. If not provided, a random UUID will be used as version-id. +3. Payload file should be a JSON file containing the properties given in example below. +4. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "id": "did:cheqd::" + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,8 +44,24 @@ func CmdDeactivateDidDoc() *cobra.Command { return err } + // Read payload file arg payloadFile := args[0] + // Read version-id flag + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } + payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err @@ -36,10 +74,8 @@ func CmdDeactivateDidDoc() *cobra.Command { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() - } + // Set version id from flag or random + payload.VersionId = versionID // Build identity message signBytes := payload.GetSignBytes() @@ -60,7 +96,16 @@ func CmdDeactivateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultDeactivateDidTxFee)).String(), "Fixed fee for DID deactivation, e.g., 10000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/client/cli/tx_update_diddoc.go b/x/did/client/cli/tx_update_diddoc.go index 537c35814..4bccfceb0 100644 --- a/x/did/client/cli/tx_update_diddoc.go +++ b/x/did/client/cli/tx_update_diddoc.go @@ -1,20 +1,74 @@ package cli import ( + "encoding/json" + "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdUpdateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "update-did [payload-file]", - Short: "Update DID Document associated with a DID.", - Long: "Update DID Document associated with a given DID. " + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Use: "update-did [payload-file] --version-id [version-id]", + Short: "Updates a DID and its associated DID Document.", + Long: `Update DID Document associated with a given DID. +[payload-file] is JSON encoded DID Document alongside with sign inputs. +Version ID is optional and is determined by the '--version-id' flag. +If not provided, a random UUID will be used as version-id. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document update, REGARDLESS of what value is passed in '--fees' flag. +2. DID update operations require the FULL new DID Document to be provided. Specifying just the changes/diff is not supported. +3. Payload file should be a JSON file containing properties specified in the DID Core Specification. Rules from DID Core spec are followed on which properties are mandatory and which ones are optional. +4. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "context": [ "https://www.w3.org/ns/did/v1" ], + "id": "did:cheqd::", + "controller": [ + "did:cheqd::" + ], + "authentication": [ + "did:cheqd::#" + ], + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ + { + "id": "did:cheqd::#", + "type": "", + "controller": "did:cheqd::", + "publicKeyMultibase": "" + } + ], + "service": [ + { + "id": "did:cheqd::#", + "type": "", + "serviceEndpoint": [ + "" + ] + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +}`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,23 +76,56 @@ func CmdUpdateDidDoc() *cobra.Command { return err } + // Read payload file arg payloadFile := args[0] + // Read version-id flag + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } + payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - // Unmarshal payload - var payload types.MsgUpdateDidDocPayload - err = clientCtx.Codec.UnmarshalJSON([]byte(payloadJSON), &payload) + // Unmarshal spec-compliant payload + var specPayload DIDDocument + err = json.Unmarshal([]byte(payloadJSON), &specPayload) if err != nil { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() + // Validate spec-compliant payload & get verification methods + verificationMethod, service, err := GetFromSpecCompliantPayload(specPayload) + if err != nil { + return err + } + + // Construct MsgUpdateDidDocPayload + payload := types.MsgUpdateDidDocPayload{ + Context: specPayload.Context, + Id: specPayload.ID, + Controller: specPayload.Controller, + VerificationMethod: verificationMethod, + Authentication: specPayload.Authentication, + AssertionMethod: specPayload.AssertionMethod, + CapabilityInvocation: specPayload.CapabilityInvocation, + CapabilityDelegation: specPayload.CapabilityDelegation, + KeyAgreement: specPayload.KeyAgreement, + Service: service, + AlsoKnownAs: specPayload.AlsoKnownAs, + VersionId: versionID, // Set version id, from flag or random } // Build identity message @@ -60,7 +147,16 @@ func CmdUpdateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultUpdateDidTxFee)).String(), "Fixed fee for DID update, e.g., 25000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/tests/setup/utils.go b/x/did/tests/setup/utils.go index b8d2914ad..9c5f1a39a 100644 --- a/x/did/tests/setup/utils.go +++ b/x/did/tests/setup/utils.go @@ -42,6 +42,16 @@ func randSeq(n int) string { return string(b) } +func ParseJSONToMap(jsonStr string) (map[string]any, error) { + var result map[string]any + err := json.Unmarshal([]byte(jsonStr), &result) + if err != nil { + return nil, err + } + + return result, nil +} + func GenerateDID(idtype IDType) string { prefix := "did:cheqd:" + DidNamespace + ":" mathrand.Seed(time.Now().UnixNano()) diff --git a/x/did/types/diddoc.pb.go b/x/did/types/diddoc.pb.go index 727d15b64..8d0a51773 100644 --- a/x/did/types/diddoc.pb.go +++ b/x/did/types/diddoc.pb.go @@ -180,7 +180,7 @@ type VerificationMethod struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // type is the type of the verification method. // Example: Ed25519VerificationKey2020 - VerificationMethodType string `protobuf:"bytes,2,opt,name=verification_method_type,json=verificationMethodType,proto3" json:"verification_method_type,omitempty"` + VerificationMethodType string `protobuf:"bytes,2,opt,name=verification_method_type,json=verificationMethodType,proto3" json:"type,omitempty"` // controller is the DID of the controller of the verification method. // Format: did:cheqd:: Controller string `protobuf:"bytes,3,opt,name=controller,proto3" json:"controller,omitempty"` @@ -258,7 +258,7 @@ type Service struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // type is the type of the service. // Example: LinkedResource - ServiceType string `protobuf:"bytes,2,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` + ServiceType string `protobuf:"bytes,2,opt,name=service_type,json=serviceType,proto3" json:"type,omitempty"` // serviceEndpoint is the endpoint of the service. // Example: https://example.com/endpoint ServiceEndpoint []string `protobuf:"bytes,3,rep,name=service_endpoint,json=serviceEndpoint,proto3" json:"service_endpoint,omitempty"` @@ -488,52 +488,53 @@ func init() { func init() { proto.RegisterFile("cheqd/did/v2/diddoc.proto", fileDescriptor_b7b058eff1719454) } var fileDescriptor_b7b058eff1719454 = []byte{ - // 707 bytes of a gzipped FileDescriptorProto + // 722 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x4e, 0xdb, 0x4a, - 0x18, 0x8d, 0x13, 0xc8, 0xcf, 0x18, 0x08, 0x77, 0x08, 0x5c, 0x5f, 0xa4, 0x9b, 0xe4, 0xe6, 0x4a, - 0x2d, 0x48, 0xad, 0x2d, 0x85, 0x2e, 0xba, 0xaa, 0x44, 0x44, 0x17, 0x08, 0xb1, 0xa8, 0x8b, 0xa8, - 0xd4, 0x8d, 0x35, 0xf1, 0x7c, 0x38, 0x23, 0x12, 0x8f, 0x6b, 0x4f, 0x5c, 0xf2, 0x16, 0xbc, 0x42, - 0x9f, 0xa0, 0x8b, 0xbe, 0x04, 0x4b, 0x96, 0x5d, 0x54, 0xb4, 0x82, 0x1d, 0x4f, 0x51, 0x79, 0x3c, - 0x76, 0x9d, 0xa4, 0x8b, 0x6e, 0x12, 0xcf, 0xf9, 0xce, 0x39, 0xf3, 0x79, 0xce, 0x37, 0x46, 0xff, - 0xb8, 0x23, 0xf8, 0x40, 0x2d, 0xca, 0xa8, 0x15, 0xf7, 0x93, 0x3f, 0xca, 0x5d, 0x33, 0x08, 0xb9, - 0xe0, 0x78, 0x4d, 0x96, 0x4c, 0xca, 0xa8, 0x19, 0xf7, 0x77, 0x5b, 0x1e, 0xf7, 0xb8, 0x2c, 0x58, - 0xc9, 0x53, 0xca, 0xd9, 0xed, 0x78, 0x9c, 0x7b, 0x63, 0xb0, 0xe4, 0x6a, 0x38, 0xbd, 0xb0, 0x04, - 0x9b, 0x40, 0x24, 0xc8, 0x24, 0x48, 0x09, 0xbd, 0x6f, 0x15, 0x54, 0x3d, 0x62, 0xf4, 0x88, 0xbb, - 0xd8, 0x40, 0x35, 0x97, 0xfb, 0x02, 0xae, 0x84, 0xa1, 0x75, 0x2b, 0x7b, 0x0d, 0x3b, 0x5b, 0xe2, - 0x0d, 0x54, 0x66, 0xd4, 0x28, 0x77, 0xb5, 0xbd, 0x86, 0x5d, 0x66, 0x14, 0xb7, 0x11, 0x4a, 0x4a, - 0x21, 0x1f, 0x8f, 0x21, 0x34, 0x2a, 0x92, 0x5c, 0x40, 0xf0, 0x1b, 0xb4, 0x15, 0x43, 0xc8, 0x2e, - 0x98, 0x4b, 0x04, 0xe3, 0xbe, 0x33, 0x01, 0x31, 0xe2, 0xd4, 0x58, 0xe9, 0x56, 0xf6, 0xf4, 0x7e, - 0xd7, 0x2c, 0xf6, 0x6d, 0x9e, 0x17, 0x88, 0xa7, 0x92, 0x67, 0xe3, 0x78, 0x09, 0xc3, 0x4f, 0xd0, - 0x06, 0x99, 0x8a, 0x11, 0xf8, 0x42, 0xe1, 0xc6, 0xaa, 0xdc, 0x76, 0x01, 0xc5, 0xfb, 0x68, 0x93, - 0x44, 0x11, 0x84, 0xc5, 0x7d, 0xab, 0x92, 0xd9, 0xcc, 0x71, 0x65, 0x79, 0x80, 0xb6, 0x5d, 0x12, - 0x90, 0x21, 0x1b, 0x33, 0x31, 0x73, 0x98, 0x1f, 0x73, 0xe5, 0x5c, 0x93, 0xfc, 0xd6, 0xaf, 0xe2, - 0x71, 0x5e, 0x5b, 0x10, 0x51, 0x18, 0x83, 0x97, 0x8a, 0xea, 0x8b, 0xa2, 0xa3, 0xbc, 0x86, 0xff, - 0x47, 0xeb, 0x97, 0x30, 0x73, 0x88, 0x17, 0x02, 0x4c, 0xc0, 0x17, 0x46, 0x43, 0x92, 0xd7, 0x2e, - 0x61, 0x76, 0x98, 0x61, 0xd8, 0x42, 0xb5, 0x08, 0xc2, 0x98, 0xb9, 0x60, 0x20, 0x79, 0x50, 0xdb, - 0xf3, 0x07, 0xf5, 0x36, 0x2d, 0xda, 0x19, 0x0b, 0xf7, 0xd0, 0x3a, 0x19, 0x47, 0xdc, 0xb9, 0xf4, - 0xf9, 0x47, 0xdf, 0x21, 0x91, 0xa1, 0x4b, 0x57, 0x3d, 0x01, 0x4f, 0x12, 0xec, 0x30, 0xea, 0x7d, - 0xd1, 0x10, 0x5e, 0x3e, 0x61, 0x15, 0xa8, 0x96, 0x07, 0xfa, 0x12, 0x19, 0xbf, 0x09, 0xcc, 0x11, - 0xb3, 0x00, 0x54, 0xec, 0x3b, 0xcb, 0x99, 0x9c, 0xcd, 0x02, 0x58, 0x1a, 0x05, 0x6d, 0x61, 0x14, - 0x0e, 0xd0, 0xf6, 0xbc, 0x33, 0x11, 0x10, 0x32, 0x32, 0x36, 0x56, 0x24, 0xb5, 0x35, 0x67, 0xab, - 0x6a, 0x3d, 0x0f, 0xd5, 0xd4, 0xdb, 0x2e, 0x75, 0xfa, 0x1f, 0x5a, 0x53, 0xef, 0x5f, 0xec, 0x4e, - 0x57, 0x98, 0x6c, 0x69, 0x1f, 0x6d, 0x66, 0x14, 0xf0, 0x69, 0xc0, 0x99, 0x2f, 0xd4, 0x8c, 0x36, - 0x15, 0xfe, 0x5a, 0xc1, 0xbd, 0x4f, 0x1a, 0xc2, 0xe9, 0xf4, 0xbf, 0x63, 0x62, 0x74, 0x0a, 0x82, - 0x50, 0x22, 0x08, 0x7e, 0x85, 0x6a, 0x94, 0x51, 0x87, 0x72, 0x57, 0xee, 0xac, 0xf7, 0x5b, 0xf3, - 0x51, 0xa4, 0x92, 0x41, 0xf3, 0xf1, 0xae, 0xa3, 0x53, 0xf9, 0x3c, 0x4d, 0x22, 0xb4, 0xab, 0xe9, - 0x02, 0x9f, 0xa0, 0xfa, 0x44, 0x79, 0xc9, 0x06, 0xf5, 0xfe, 0xce, 0xbc, 0x41, 0xb6, 0xd3, 0xe0, - 0xef, 0xc7, 0xbb, 0xce, 0x56, 0xc1, 0x22, 0x2b, 0xd8, 0xb9, 0x41, 0xef, 0x73, 0x19, 0xd5, 0x8b, - 0x9d, 0xb9, 0x21, 0x10, 0x01, 0x54, 0x75, 0xb6, 0x6b, 0xa6, 0x37, 0xdc, 0xcc, 0x6e, 0xb8, 0x79, - 0x96, 0xdd, 0xf0, 0x41, 0xfd, 0xe6, 0xae, 0x53, 0xba, 0xfe, 0xde, 0xd1, 0xec, 0x4c, 0x94, 0xe8, - 0xa7, 0x01, 0x95, 0xfa, 0xf2, 0x1f, 0xe9, 0xb5, 0x54, 0xaf, 0x44, 0xb8, 0x8b, 0x74, 0x0a, 0xc4, - 0x15, 0x2c, 0x96, 0x1e, 0x49, 0xde, 0x75, 0xbb, 0x08, 0xe1, 0x7f, 0x11, 0x8a, 0x21, 0x8c, 0x92, - 0xac, 0x19, 0x55, 0x29, 0x37, 0x14, 0x72, 0x4c, 0xf1, 0x33, 0xd4, 0xf4, 0xe1, 0x4a, 0x38, 0x05, - 0xce, 0x6a, 0xc2, 0x19, 0xac, 0x24, 0x9b, 0xd9, 0xeb, 0x49, 0xf1, 0x3c, 0x67, 0xbf, 0x40, 0x5b, - 0x41, 0x08, 0x31, 0xe3, 0xd3, 0xa8, 0xa8, 0xa8, 0x16, 0x14, 0x7f, 0x65, 0x84, 0x5c, 0x35, 0x38, - 0xbc, 0xb9, 0x6f, 0x6b, 0xb7, 0xf7, 0x6d, 0xed, 0xc7, 0x7d, 0x5b, 0xbb, 0x7e, 0x68, 0x97, 0x6e, - 0x1f, 0xda, 0xa5, 0xaf, 0x0f, 0xed, 0xd2, 0xfb, 0xa7, 0x1e, 0x13, 0xa3, 0xe9, 0xd0, 0x74, 0xf9, - 0xc4, 0x4a, 0x3f, 0xac, 0xf2, 0xf7, 0xb9, 0xcf, 0x29, 0x58, 0x57, 0xf2, 0x2b, 0x9b, 0x4c, 0x55, - 0x34, 0xac, 0xca, 0xe3, 0x38, 0xf8, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xa3, 0x36, 0x8d, 0x7f, - 0x05, 0x00, 0x00, + 0x14, 0x8e, 0x13, 0xc8, 0xcf, 0x18, 0x08, 0x77, 0x08, 0x5c, 0x5f, 0xa4, 0x9b, 0x44, 0xb9, 0xd2, + 0xbd, 0x20, 0x71, 0x6d, 0x29, 0xb4, 0xdb, 0x4a, 0x44, 0x74, 0x81, 0x28, 0x8b, 0xba, 0x88, 0x4a, + 0xdd, 0x58, 0x13, 0xcf, 0x21, 0x19, 0x11, 0x7b, 0x5c, 0x7b, 0xe2, 0x12, 0xf5, 0x25, 0x78, 0x85, + 0x3e, 0x41, 0x1f, 0xa3, 0x2c, 0x59, 0x76, 0x51, 0xa5, 0x15, 0xec, 0x78, 0x8a, 0xca, 0xe3, 0x71, + 0xea, 0x24, 0x95, 0xda, 0x0d, 0x78, 0xbe, 0x9f, 0x33, 0x47, 0xe7, 0x9b, 0x1c, 0xf4, 0x97, 0x3b, + 0x84, 0xb7, 0xd4, 0xa2, 0x8c, 0x5a, 0x71, 0x37, 0xf9, 0x47, 0xb9, 0x6b, 0x06, 0x21, 0x17, 0x1c, + 0xaf, 0x49, 0xca, 0xa4, 0x8c, 0x9a, 0x71, 0x77, 0xb7, 0x31, 0xe0, 0x03, 0x2e, 0x09, 0x2b, 0xf9, + 0x4a, 0x35, 0xbb, 0xad, 0x01, 0xe7, 0x83, 0x11, 0x58, 0xf2, 0xd4, 0x1f, 0x5f, 0x5a, 0x82, 0x79, + 0x10, 0x09, 0xe2, 0x05, 0xa9, 0xa0, 0xf3, 0xa5, 0x84, 0xca, 0xc7, 0x8c, 0x1e, 0x73, 0x17, 0x1b, + 0xa8, 0xe2, 0x72, 0x5f, 0xc0, 0xb5, 0x30, 0xb4, 0x76, 0x69, 0xaf, 0x66, 0x67, 0x47, 0xbc, 0x81, + 0x8a, 0x8c, 0x1a, 0xc5, 0xb6, 0xb6, 0x57, 0xb3, 0x8b, 0x8c, 0xe2, 0x26, 0x42, 0x09, 0x15, 0xf2, + 0xd1, 0x08, 0x42, 0xa3, 0x24, 0xc5, 0x39, 0x04, 0xbf, 0x44, 0x5b, 0x31, 0x84, 0xec, 0x92, 0xb9, + 0x44, 0x30, 0xee, 0x3b, 0x1e, 0x88, 0x21, 0xa7, 0xc6, 0x4a, 0xbb, 0xb4, 0xa7, 0x77, 0xdb, 0x66, + 0xbe, 0x6f, 0xf3, 0x22, 0x27, 0x3c, 0x93, 0x3a, 0x1b, 0xc7, 0x4b, 0x18, 0xfe, 0x17, 0x6d, 0x90, + 0xb1, 0x18, 0x82, 0x2f, 0x14, 0x6e, 0xac, 0xca, 0x6b, 0x17, 0x50, 0xbc, 0x8f, 0x36, 0x49, 0x14, + 0x41, 0x98, 0xbf, 0xb7, 0x2c, 0x95, 0xf5, 0x19, 0xae, 0x4a, 0x1e, 0xa2, 0x6d, 0x97, 0x04, 0xa4, + 0xcf, 0x46, 0x4c, 0x4c, 0x1c, 0xe6, 0xc7, 0x5c, 0x55, 0xae, 0x48, 0x7d, 0xe3, 0x07, 0x79, 0x32, + 0xe3, 0x16, 0x4c, 0x14, 0x46, 0x30, 0x48, 0x4d, 0xd5, 0x45, 0xd3, 0xf1, 0x8c, 0xc3, 0xff, 0xa0, + 0xf5, 0x2b, 0x98, 0x38, 0x64, 0x10, 0x02, 0x78, 0xe0, 0x0b, 0xa3, 0x26, 0xc5, 0x6b, 0x57, 0x30, + 0x39, 0xca, 0x30, 0x6c, 0xa1, 0x4a, 0x04, 0x61, 0xcc, 0x5c, 0x30, 0x90, 0x1c, 0xd4, 0xf6, 0xfc, + 0xa0, 0x5e, 0xa5, 0xa4, 0x9d, 0xa9, 0x70, 0x07, 0xad, 0x93, 0x51, 0xc4, 0x9d, 0x2b, 0x9f, 0xbf, + 0xf3, 0x1d, 0x12, 0x19, 0xba, 0xac, 0xaa, 0x27, 0xe0, 0x69, 0x82, 0x1d, 0x45, 0x9d, 0x4f, 0x1a, + 0xc2, 0xcb, 0x13, 0x56, 0x81, 0x6a, 0xb3, 0x40, 0x5f, 0x20, 0xe3, 0x27, 0x81, 0x39, 0x62, 0x12, + 0x40, 0x1a, 0x7b, 0x0f, 0x3f, 0x4e, 0x5b, 0x1b, 0xc9, 0xf9, 0x80, 0x7b, 0x4c, 0x80, 0x17, 0x88, + 0x89, 0xbd, 0xb3, 0x9c, 0xd3, 0xf9, 0x24, 0x80, 0xa5, 0xe7, 0xa1, 0x2d, 0x3c, 0x8f, 0x43, 0xb4, + 0x3d, 0x7f, 0x1b, 0x11, 0x10, 0x32, 0x32, 0x32, 0x56, 0xa4, 0xb4, 0x31, 0x57, 0x56, 0x71, 0x9d, + 0xf7, 0xa8, 0xa2, 0x26, 0xb0, 0xd4, 0xfd, 0x53, 0xb4, 0xa6, 0x66, 0xf2, 0xab, 0x8e, 0x75, 0xa5, + 0x93, 0x6d, 0xee, 0xa3, 0xcd, 0xcc, 0x06, 0x3e, 0x0d, 0x38, 0xf3, 0x85, 0x7a, 0xcb, 0x75, 0x85, + 0x3f, 0x57, 0x70, 0xe7, 0x83, 0x86, 0x70, 0xfa, 0x2b, 0x79, 0xcd, 0xc4, 0xf0, 0x0c, 0x04, 0xa1, + 0x44, 0x10, 0xfc, 0x0c, 0x55, 0x28, 0xa3, 0x0e, 0xe5, 0xae, 0xec, 0x46, 0xef, 0x36, 0xe6, 0x23, + 0x4b, 0x2d, 0xbd, 0xfa, 0xe3, 0xb4, 0xa5, 0x53, 0xf9, 0x3d, 0x4e, 0xa2, 0xb6, 0xcb, 0xe9, 0x01, + 0x9f, 0xa2, 0xaa, 0xa7, 0x6a, 0xc9, 0xa6, 0xf5, 0xee, 0xce, 0x7c, 0x81, 0xec, 0xa6, 0xde, 0x9f, + 0x8f, 0xd3, 0xd6, 0x56, 0xae, 0x44, 0x46, 0xd8, 0xb3, 0x02, 0x9d, 0x8f, 0x45, 0x54, 0xcd, 0x77, + 0xe6, 0x86, 0x40, 0x04, 0x50, 0xd5, 0xd9, 0xae, 0x99, 0x6e, 0x02, 0x33, 0xdb, 0x04, 0xe6, 0x79, + 0xb6, 0x09, 0x7a, 0xd5, 0xdb, 0x69, 0xab, 0x70, 0xf3, 0xb5, 0xa5, 0xd9, 0x99, 0x29, 0xf1, 0x8f, + 0x03, 0x2a, 0xfd, 0xc5, 0xdf, 0xf2, 0x6b, 0xa9, 0x5f, 0x99, 0x70, 0x1b, 0xe9, 0x14, 0x88, 0x2b, + 0x58, 0x2c, 0x6b, 0x24, 0x6f, 0xa0, 0x6a, 0xe7, 0x21, 0xfc, 0x37, 0x42, 0x31, 0x84, 0x51, 0x92, + 0x3f, 0xa3, 0x2a, 0xf9, 0x9a, 0x42, 0x4e, 0x28, 0x3e, 0x40, 0x75, 0x1f, 0xae, 0x85, 0x93, 0xd3, + 0xac, 0xca, 0x58, 0x57, 0x92, 0xcb, 0xec, 0xf5, 0x84, 0xbc, 0x98, 0xa9, 0x9f, 0xa0, 0xad, 0x20, + 0x84, 0x98, 0xf1, 0x71, 0x94, 0x77, 0x94, 0x73, 0x8e, 0x3f, 0x32, 0xc1, 0xcc, 0xd5, 0x3b, 0xba, + 0xbd, 0x6f, 0x6a, 0x77, 0xf7, 0x4d, 0xed, 0xdb, 0x7d, 0x53, 0xbb, 0x79, 0x68, 0x16, 0xee, 0x1e, + 0x9a, 0x85, 0xcf, 0x0f, 0xcd, 0xc2, 0x9b, 0xff, 0x06, 0x4c, 0x0c, 0xc7, 0x7d, 0xd3, 0xe5, 0x9e, + 0x95, 0x2e, 0x60, 0xf9, 0xf7, 0x7f, 0x9f, 0x53, 0xb0, 0xae, 0xe5, 0x36, 0x4e, 0x5e, 0x56, 0xd4, + 0x2f, 0xcb, 0x71, 0x1c, 0x7e, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x79, 0x85, 0xfa, 0x40, 0xa7, 0x05, + 0x00, 0x00, } func (m *DidDoc) Marshal() (dAtA []byte, err error) { diff --git a/x/did/utils/proto.go b/x/did/utils/proto.go deleted file mode 100644 index e25f37e8a..000000000 --- a/x/did/utils/proto.go +++ /dev/null @@ -1,8 +0,0 @@ -package utils - -import "github.com/gogo/protobuf/proto" - -// MsgTypeURL returns the TypeURL of a `proto.Message`. -func MsgTypeURL(msg proto.Message) string { - return "/" + proto.MessageName(msg) -} diff --git a/x/did/utils/proto_test.go b/x/did/utils/proto_test.go deleted file mode 100644 index e1d338ae8..000000000 --- a/x/did/utils/proto_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils_test - -import ( - . "github.com/cheqd/cheqd-node/x/did/utils" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" -) - -var _ = Describe("Proto", func() { - Describe("Check that DenomUnit from bank type has expected value", func() { - Context("Denom Unit from cosmos-sdk", func() { - It("should return expected value", func() { - Expect(MsgTypeURL(&bank_types.DenomUnit{})).To(Equal("/cosmos.bank.v1beta1.DenomUnit")) - }) - }) - }) -}) diff --git a/x/did/utils/str_test.go b/x/did/utils/str_test.go index f52ce8a78..f06083c3f 100644 --- a/x/did/utils/str_test.go +++ b/x/did/utils/str_test.go @@ -16,14 +16,14 @@ var _ = Describe("Str utils functionality", func() { Expect(actual).To(Equal(expectedResult)) }, - Entry("Emty array, Empty element, Expected: -1", []string{}, "", 0, -1), + Entry("Empty array, Empty element, Expected: -1", []string{}, "", 0, -1), Entry("Nil as array, Empty element, Expected: -1", nil, "", 0, -1), Entry("Desired element is the first. Expected: 0", []string{"1", "2"}, "1", 0, 0), Entry("Desired element is the latest one. Expected: 2", []string{"1", "2", "3"}, "3", 0, 2), Entry("Desired element is absent. Expected: -1", []string{"1", "2", "3"}, "4", 0, -1), - Entry("There are more then 1 such elements but search should be started from the beginning. Expected: 0", []string{"4", "1", "6", "2", "3", "4"}, "4", 0, 0), - Entry("There are more then 1 such elements but search should be started from the index 1. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 1, 5), - Entry("There are more then 1 such elements but search should be started from the index 3. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 3, 5), + Entry("There are more than 1 such elements but search should be started from the beginning. Expected: 0", []string{"4", "1", "6", "2", "3", "4"}, "4", 0, 0), + Entry("There are more than 1 such elements but search should be started from the index 1. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 1, 5), + Entry("There are more than 1 such elements but search should be started from the index 3. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 3, 5), ) DescribeTable("Contains function", diff --git a/x/resource/client/cli/query_collection_resources.go b/x/resource/client/cli/query_collection_resources.go index 3e5138502..7e85be8ee 100644 --- a/x/resource/client/cli/query_collection_resources.go +++ b/x/resource/client/cli/query_collection_resources.go @@ -11,9 +11,13 @@ import ( func CmdGetCollectionResources() *cobra.Command { cmd := &cobra.Command{ - Use: "collection-resources [collectionId]", - Short: "Query all resource of a specific collection", - Args: cobra.ExactArgs(1), + Use: "collection-metadata [collection-id] [resource-id]", + Short: "Query metadata for an entire Collection", + Long: `Query metadata for an entire Collection by Collection ID. This will return the metadata for all Resources in the Collection. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc.`, + Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/query_resource.go b/x/resource/client/cli/query_resource.go index 181618aa6..c67488372 100644 --- a/x/resource/client/cli/query_resource.go +++ b/x/resource/client/cli/query_resource.go @@ -11,9 +11,16 @@ import ( func CmdGetResource() *cobra.Command { cmd := &cobra.Command{ - Use: "resource [collectionId] [id]", - Short: "Query a resource", - Args: cobra.ExactArgs(2), + Use: "specific-resource [collection-id] [resource-id]", + Short: "Query a specific resource", + Long: `Query a specific resource by Collection ID and Resource ID. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc. + + Resource ID is the UUID of the specific resource. + Example: 6e8bc430-9c3a-11d9-9669-0800200c9a66, 6e8bc430-9c3a-11d9-9669-0800200c9a67, etc.`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/query_resource_metadata.go b/x/resource/client/cli/query_resource_metadata.go index 6797dd454..0d00ec7db 100644 --- a/x/resource/client/cli/query_resource_metadata.go +++ b/x/resource/client/cli/query_resource_metadata.go @@ -11,9 +11,16 @@ import ( func CmdGetResourceMetadata() *cobra.Command { cmd := &cobra.Command{ - Use: "resource-metadata [collectionId] [id]", - Short: "Query a resource", - Args: cobra.ExactArgs(2), + Use: "metadata [collection-id] [resource-id]", + Short: "Query metadata for a specific resource", + Long: `Query metadata for a specific resource by Collection ID and Resource ID. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc. + + Resource ID is the UUID of the specific resource. + Example: 6e8bc430-9c3a-11d9-9669-0800200c9a66, 6e8bc430-9c3a-11d9-9669-0800200c9a67, etc.`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/tx.go b/x/resource/client/cli/tx.go index ff2c56f1c..a651b1b76 100644 --- a/x/resource/client/cli/tx.go +++ b/x/resource/client/cli/tx.go @@ -5,9 +5,42 @@ import ( "github.com/cheqd/cheqd-node/x/resource/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" + tmcli "github.com/tendermint/tendermint/libs/cli" ) +// AddTxFlagsToCmd adds common flags to a module tx command. +func AddTxFlagsToCmd(cmd *cobra.Command) { + cmd.Flags().StringP(tmcli.OutputFlag, "o", "json", "Output format (text|json)") + cmd.Flags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used") + cmd.Flags().String(flags.FlagFrom, "", "Name or address of private key with which to sign") + cmd.Flags().Uint64P(flags.FlagAccountNumber, "a", 0, "The account number of the signing account (offline mode only)") + cmd.Flags().Uint64P(flags.FlagSequence, "s", 0, "The sequence number of the signing account (offline mode only)") + cmd.Flags().String(flags.FlagNote, "", "Note to add a description to the transaction (previously --memo)") + cmd.Flags().String(flags.FlagGasPrices, "", "Gas prices in decimal format to determine the transaction fee (e.g. 50ncheq)") + cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", ": to tendermint rpc interface for this chain") + cmd.Flags().Bool(flags.FlagUseLedger, false, "Use a connected Ledger device") + cmd.Flags().StringP(flags.FlagBroadcastMode, "b", flags.BroadcastSync, "Transaction broadcasting mode (sync|async|block)") + cmd.Flags().Bool(flags.FlagDryRun, false, "ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)") + cmd.Flags().Bool(flags.FlagGenerateOnly, false, "Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)") + cmd.Flags().Bool(flags.FlagOffline, false, "Offline mode (does not allow any online functionality)") + cmd.Flags().BoolP(flags.FlagSkipConfirmation, "y", false, "Skip tx broadcasting prompt confirmation") + cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test|memory)") + cmd.Flags().String(flags.FlagSignMode, "", "Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature") + cmd.Flags().Uint64(flags.FlagTimeoutHeight, 0, "Set a block timeout height to prevent the tx from being committed past a certain height") + cmd.Flags().String(flags.FlagFeePayer, "", "Fee payer pays fees for the transaction instead of deducting from the signer") + cmd.Flags().String(flags.FlagFeeGranter, "", "Fee granter grants fees for the transaction") + cmd.Flags().String(flags.FlagTip, "", "Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator") + cmd.Flags().Bool(flags.FlagAux, false, "Generate aux signer data instead of sending a tx") + + // overrides + cmd.Flags().String(flags.FlagGas, flags.GasFlagAuto, fmt.Sprintf("Gas limit to set per-transaction; set to %q to calculate sufficient gas automatically", flags.GasFlagAuto)) + cmd.Flags().Float64(flags.FlagGasAdjustment, 2.5, "adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored ") + + // flags --fees added by each module's tx command +} + // GetTxCmd returns the transaction commands for this module func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ diff --git a/x/resource/client/cli/tx_create_resource.go b/x/resource/client/cli/tx_create_resource.go index d85c5132d..1571bd8c5 100644 --- a/x/resource/client/cli/tx_create_resource.go +++ b/x/resource/client/cli/tx_create_resource.go @@ -1,7 +1,6 @@ package cli import ( - "encoding/json" "os" didcli "github.com/cheqd/cheqd-node/x/did/client/cli" @@ -9,62 +8,87 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) -type CreateResourceOptions struct { - CollectionID string `json:"collection_id"` - ResourceID string `json:"resource_id"` - ResourceName string `json:"resource_name"` - ResourceVersion string `json:"resource_version"` - ResourceType string `json:"resource_type"` - ResourceFile string `json:"resource_file"` - AlsoKnownAs []*types.AlternativeUri `json:"also_known_as"` -} - func CmdCreateResource() *cobra.Command { cmd := &cobra.Command{ - Use: "create [payload-file]", + Use: "create [payload-file] [resource-data-file]", Short: "Create a new Resource.", - Long: "Create a new Resource within a DID Resource Collection. " + - "[payload-file] is JSON encoded MsgCreateResourcePayload alongside with sign inputs.", - Args: cobra.ExactArgs(1), + Long: `Create a new Resource within a DID Resource Collection. +[payload-file] is JSON encoded MsgCreateResourcePayload alongside with sign inputs. +[resource-data-file] is a path to the Resource data file. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for Resource creation, REGARDLESS of what value is passed in '--fees' flag. +2. Fixed fees for Resource creation is defined based on the IANA media type of the Resource data file. These parameters can be updated using governance proposals. Currently, there are three categories of media types with different fees: 'image', 'json', and 'default' (for all other media types). +2. Payload file should contain the properties given in example below. +3. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "collectionId": "", + "id": "", + "name": "", + "version": "", + "resourceType": "", + "alsoKnownAs": [ + { + "uri": "did:cheqd::/resource/", + "description": "did-url" + }, + { + "uri": "https://example.com/alternative-uri", + "description": "http-url" + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } + // Read payload file arg payloadFile := args[0] + // Read data file arg + dataFile := args[1] + payloadJSON, signInputs, err := didcli.ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - var options CreateResourceOptions - err = json.Unmarshal(payloadJSON, &options) + // Unmarshal payload + var payload types.MsgCreateResourcePayload + err = clientCtx.Codec.UnmarshalJSON(payloadJSON, &payload) if err != nil { return err } - data, err := os.ReadFile(options.ResourceFile) + // Read data file + data, err := os.ReadFile(dataFile) if err != nil { return err } // Prepare payload - payload := types.MsgCreateResourcePayload{ - CollectionId: options.CollectionID, - Id: options.ResourceID, - Name: options.ResourceName, - Version: options.ResourceVersion, - ResourceType: options.ResourceType, - AlsoKnownAs: options.AlsoKnownAs, - Data: data, - } + payload.Data = data + // Populate resource id if not set if payload.Id == "" { payload.Id = uuid.NewString() } @@ -88,7 +112,15 @@ func CmdCreateResource() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultCreateResourceImageFee)).String(), "Fixed fee for Resource creation, e.g., 10000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace resource feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/resource/types/query.pb.go b/x/resource/types/query.pb.go index f888b4a1c..d26048411 100644 --- a/x/resource/types/query.pb.go +++ b/x/resource/types/query.pb.go @@ -6,6 +6,8 @@ package types import ( context "context" fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -28,10 +30,17 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryResourceRequest is the request type for the Query/Resource RPC method type QueryResourceRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -82,7 +91,11 @@ func (m *QueryResourceRequest) GetId() string { return "" } +// QueryResourceResponse is the response type for the Query/Resource RPC method type QueryResourceResponse struct { + // Successful resolution of the resource returns the following: + // - resource is the requested resource + // - metadata is the resource metadata associated with the requested resource Resource *ResourceWithMetadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -126,10 +139,17 @@ func (m *QueryResourceResponse) GetResource() *ResourceWithMetadata { return nil } +// QueryResourceMetadataRequest is the request type for the Query/ResourceMetadata RPC method type QueryResourceMetadataRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -180,8 +200,10 @@ func (m *QueryResourceMetadataRequest) GetId() string { return "" } +// QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method type QueryResourceMetadataResponse struct { - Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // resource is the requested resource metadata + Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResourceMetadata"` } func (m *QueryResourceMetadataResponse) Reset() { *m = QueryResourceMetadataResponse{} } @@ -224,9 +246,17 @@ func (m *QueryResourceMetadataResponse) GetResource() *Metadata { return nil } +// QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method type QueryCollectionResourcesRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryCollectionResourcesRequest) Reset() { *m = QueryCollectionResourcesRequest{} } @@ -269,8 +299,19 @@ func (m *QueryCollectionResourcesRequest) GetCollectionId() string { return "" } +func (m *QueryCollectionResourcesRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method type QueryCollectionResourcesResponse struct { - Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + // resources is the requested collection of resource metadata + Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"linkedResourceMetadata"` + // pagination defines the pagination in the response. + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryCollectionResourcesResponse) Reset() { *m = QueryCollectionResourcesResponse{} } @@ -313,6 +354,13 @@ func (m *QueryCollectionResourcesResponse) GetResources() []*Metadata { return nil } +func (m *QueryCollectionResourcesResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + func init() { proto.RegisterType((*QueryResourceRequest)(nil), "cheqd.resource.v2.QueryResourceRequest") proto.RegisterType((*QueryResourceResponse)(nil), "cheqd.resource.v2.QueryResourceResponse") @@ -325,36 +373,42 @@ func init() { func init() { proto.RegisterFile("cheqd/resource/v2/query.proto", fileDescriptor_14284472e64722d9) } var fileDescriptor_14284472e64722d9 = []byte{ - // 449 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xce, 0x48, 0x2d, - 0x4c, 0xd1, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0xd5, 0x2f, 0x33, 0xd2, 0x2f, 0x2c, - 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0x4b, 0xeb, 0xc1, 0xa4, - 0xf5, 0xca, 0x8c, 0xa4, 0x14, 0x30, 0x75, 0xc0, 0xa5, 0xc1, 0x9a, 0xa4, 0x64, 0xd2, 0xf3, 0xf3, - 0xd3, 0x73, 0x52, 0xf5, 0x13, 0x0b, 0x32, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, - 0xf3, 0xf3, 0x8a, 0x21, 0xb2, 0x4a, 0xde, 0x5c, 0x22, 0x81, 0x20, 0x1b, 0x82, 0xa0, 0x9a, 0x82, - 0x52, 0x0b, 0x4b, 0x53, 0x8b, 0x4b, 0x84, 0x94, 0xb9, 0x78, 0x93, 0xf3, 0x73, 0x72, 0x52, 0x93, - 0x41, 0x8a, 0xe3, 0x33, 0x53, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x10, 0x82, 0x9e, - 0x29, 0x42, 0x7c, 0x5c, 0x4c, 0x99, 0x29, 0x12, 0x4c, 0x60, 0x19, 0xa6, 0xcc, 0x14, 0xa5, 0x18, - 0x2e, 0x51, 0x34, 0xc3, 0x8a, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0x85, 0x9c, 0xb9, 0x38, 0x60, 0xae, - 0x02, 0x1b, 0xc4, 0x6d, 0xa4, 0xae, 0x87, 0xe1, 0x17, 0x3d, 0x98, 0xb6, 0xf0, 0xcc, 0x92, 0x0c, - 0xdf, 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0xc4, 0x20, 0xb8, 0x46, 0xa5, 0x60, 0x2e, 0x19, 0x14, - 0xd3, 0xe1, 0x4a, 0x28, 0x71, 0x72, 0x04, 0x97, 0x2c, 0x0e, 0x43, 0xa1, 0x4e, 0x37, 0xc7, 0x70, - 0xba, 0x34, 0x16, 0xa7, 0x63, 0x71, 0xae, 0x1b, 0x97, 0x3c, 0xd8, 0x64, 0x67, 0xb8, 0xf5, 0x30, - 0x3b, 0x8a, 0x49, 0x71, 0xb1, 0x52, 0x2c, 0x97, 0x02, 0x6e, 0x73, 0xa0, 0x8e, 0xb4, 0xe4, 0xe2, - 0x84, 0xd9, 0x5b, 0x2c, 0xc1, 0xa8, 0xc0, 0x4c, 0xc8, 0x95, 0x08, 0xd5, 0x46, 0x53, 0x58, 0xb8, - 0x58, 0xc1, 0xe6, 0x0b, 0xcd, 0x60, 0xe4, 0xe2, 0x80, 0x19, 0x2d, 0x84, 0x2d, 0x7e, 0xb0, 0x25, - 0x14, 0x29, 0x0d, 0xc2, 0x0a, 0x21, 0x8e, 0x54, 0xb2, 0x6c, 0xba, 0xfc, 0x64, 0x32, 0x93, 0xb1, - 0x90, 0xa1, 0x3e, 0x66, 0x9a, 0xad, 0x46, 0x09, 0x87, 0x5a, 0xb8, 0x5c, 0xb1, 0x7e, 0x75, 0x66, - 0x4a, 0xad, 0xd0, 0x4e, 0x46, 0x2e, 0x01, 0xf4, 0x18, 0x12, 0xd2, 0x27, 0x64, 0x33, 0x5a, 0x02, - 0x91, 0x32, 0x20, 0x5e, 0x03, 0xd4, 0xc9, 0x4e, 0x60, 0x27, 0xdb, 0x08, 0x59, 0x91, 0xec, 0x64, - 0xfd, 0x5c, 0x98, 0x33, 0x37, 0x33, 0x72, 0x09, 0x63, 0x89, 0x3b, 0x21, 0x23, 0x5c, 0xae, 0xc1, - 0x9d, 0x60, 0xa4, 0x8c, 0x49, 0xd2, 0x03, 0xf5, 0x84, 0x31, 0xd8, 0x13, 0xba, 0x42, 0xda, 0x44, - 0x78, 0x02, 0xe6, 0x6a, 0x27, 0xb7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, - 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, - 0xd2, 0x49, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0x85, 0x1a, 0x08, 0x26, 0x75, - 0xf3, 0xf2, 0x53, 0x52, 0xf5, 0x2b, 0x10, 0xa6, 0x97, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, - 0x8b, 0x19, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, 0xf9, 0xe7, 0x82, 0xda, 0x04, 0x00, - 0x00, + // 549 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcf, 0x6b, 0x13, 0x41, + 0x18, 0xed, 0xc4, 0x1f, 0xb4, 0x53, 0x15, 0x1d, 0xab, 0x84, 0xb5, 0xdd, 0x86, 0x08, 0xb6, 0xa8, + 0x9d, 0x31, 0x9b, 0x93, 0xe2, 0x29, 0x85, 0x8a, 0x88, 0xa0, 0x5b, 0x44, 0x10, 0x41, 0x26, 0xbb, + 0xc3, 0x66, 0x30, 0xd9, 0xd9, 0x64, 0x26, 0xc1, 0x52, 0x7a, 0xf1, 0x0f, 0x10, 0x41, 0x0f, 0xfe, + 0x1f, 0x9e, 0xbc, 0x7a, 0xf2, 0x58, 0xf0, 0xe2, 0x49, 0x24, 0xf1, 0xe4, 0x5f, 0x21, 0x99, 0xdd, + 0xd9, 0x6d, 0xb3, 0x1b, 0xd2, 0xd0, 0x4b, 0x18, 0xe6, 0xfb, 0xde, 0xfb, 0xde, 0xfb, 0xe6, 0x65, + 0xe1, 0x9a, 0xd7, 0x62, 0x5d, 0x9f, 0xf4, 0x98, 0x14, 0xfd, 0x9e, 0xc7, 0xc8, 0xc0, 0x21, 0xdd, + 0x3e, 0xeb, 0xed, 0xe1, 0xa8, 0x27, 0x94, 0x40, 0x57, 0x74, 0x19, 0x9b, 0x32, 0x1e, 0x38, 0x56, + 0x25, 0x8f, 0x48, 0xcb, 0x1a, 0x64, 0xdd, 0xf6, 0x84, 0xec, 0x08, 0x49, 0x9a, 0x54, 0xb2, 0x98, + 0x8d, 0x0c, 0x6a, 0x4d, 0xa6, 0x68, 0x8d, 0x44, 0x34, 0xe0, 0x21, 0x55, 0x5c, 0x84, 0x49, 0xef, + 0x4a, 0x20, 0x02, 0xa1, 0x8f, 0x64, 0x7c, 0x4a, 0x6e, 0x57, 0x03, 0x21, 0x82, 0x36, 0x23, 0x34, + 0xe2, 0x84, 0x86, 0xa1, 0x50, 0x1a, 0x22, 0xe3, 0x6a, 0xf5, 0x09, 0x5c, 0x79, 0x3e, 0x66, 0x75, + 0x93, 0xb1, 0x2e, 0xeb, 0xf6, 0x99, 0x54, 0xe8, 0x26, 0xbc, 0xe8, 0x89, 0x76, 0x9b, 0x79, 0xe3, + 0xe6, 0x37, 0xdc, 0x2f, 0x83, 0x0a, 0xd8, 0x5c, 0x72, 0x2f, 0x64, 0x97, 0x8f, 0x7d, 0x74, 0x09, + 0x96, 0xb8, 0x5f, 0x2e, 0xe9, 0x4a, 0x89, 0xfb, 0xd5, 0xd7, 0xf0, 0xda, 0x04, 0x99, 0x8c, 0x44, + 0x28, 0x19, 0xda, 0x86, 0x8b, 0xc6, 0x97, 0x26, 0x5a, 0x76, 0x36, 0x70, 0x6e, 0x1b, 0xd8, 0xc0, + 0x5e, 0x72, 0xd5, 0x7a, 0xca, 0x14, 0xf5, 0xa9, 0xa2, 0x6e, 0x0a, 0xac, 0xee, 0xc2, 0xd5, 0x63, + 0xec, 0x69, 0xcb, 0x69, 0x24, 0x2b, 0xb8, 0x36, 0x85, 0x34, 0x91, 0xbe, 0x9b, 0x93, 0x7e, 0xa3, + 0x40, 0xba, 0x81, 0x35, 0xac, 0x7f, 0xbf, 0xd7, 0xaf, 0xb7, 0x79, 0xf8, 0x96, 0xf9, 0x39, 0xca, + 0xcc, 0xca, 0x07, 0x00, 0xd7, 0xf5, 0xd8, 0xed, 0x54, 0x9b, 0xe9, 0x96, 0x73, 0xd9, 0xd9, 0x81, + 0x30, 0x8b, 0x81, 0xb6, 0xb5, 0xec, 0xdc, 0xc2, 0x71, 0x66, 0xf0, 0x38, 0x33, 0x38, 0x4e, 0x60, + 0x92, 0x19, 0xfc, 0x8c, 0x06, 0xe6, 0x89, 0xdd, 0x23, 0xc8, 0xea, 0x77, 0x00, 0x2b, 0xd3, 0x05, + 0x25, 0xab, 0x78, 0x01, 0x97, 0x8c, 0x03, 0x59, 0x06, 0x95, 0x33, 0xa7, 0xd9, 0x45, 0xc6, 0x84, + 0x1e, 0x15, 0x78, 0xd8, 0x98, 0xe9, 0x21, 0xd6, 0x74, 0xd4, 0x84, 0xf3, 0xf9, 0x2c, 0x3c, 0xa7, + 0x4d, 0xa0, 0x2f, 0x00, 0x2e, 0x9a, 0x91, 0xa8, 0x28, 0x6a, 0x45, 0x99, 0xb7, 0x36, 0x67, 0x37, + 0xc6, 0x53, 0xab, 0xf7, 0xdf, 0xff, 0xfc, 0xfb, 0xa9, 0x54, 0x47, 0x35, 0x92, 0xff, 0x03, 0xef, + 0x1f, 0x7b, 0xb5, 0x83, 0xb4, 0x26, 0xc9, 0x3e, 0xf7, 0x0f, 0xd0, 0x37, 0x00, 0x2f, 0x4f, 0x6e, + 0x03, 0x91, 0x59, 0x93, 0x27, 0xb2, 0x6e, 0xdd, 0x3b, 0x39, 0x20, 0x91, 0xdc, 0xd0, 0x92, 0x1f, + 0xa2, 0x07, 0x73, 0x4b, 0x26, 0x1d, 0x23, 0xf3, 0x2b, 0x80, 0x57, 0x0b, 0x02, 0x82, 0x9c, 0x69, + 0x6a, 0xa6, 0xc7, 0xdb, 0xaa, 0xcf, 0x85, 0x49, 0x4c, 0xd4, 0xb5, 0x89, 0x2d, 0x74, 0xe7, 0x04, + 0x26, 0x8c, 0xea, 0xc6, 0xce, 0x8f, 0xa1, 0x0d, 0x0e, 0x87, 0x36, 0xf8, 0x33, 0xb4, 0xc1, 0xc7, + 0x91, 0xbd, 0x70, 0x38, 0xb2, 0x17, 0x7e, 0x8d, 0xec, 0x85, 0x57, 0x77, 0x03, 0xae, 0x5a, 0xfd, + 0x26, 0xf6, 0x44, 0x27, 0x21, 0xd4, 0xbf, 0x5b, 0xa1, 0xf0, 0x19, 0x79, 0x97, 0xb1, 0xab, 0xbd, + 0x88, 0xc9, 0xe6, 0x79, 0xfd, 0xc5, 0xac, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xb6, 0x8d, + 0x38, 0xe7, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -369,8 +423,11 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { + // Fetch data/payload for a specific resource (without metadata) Resource(ctx context.Context, in *QueryResourceRequest, opts ...grpc.CallOption) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(ctx context.Context, in *QueryResourceMetadataRequest, opts ...grpc.CallOption) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(ctx context.Context, in *QueryCollectionResourcesRequest, opts ...grpc.CallOption) (*QueryCollectionResourcesResponse, error) } @@ -411,8 +468,11 @@ func (c *queryClient) CollectionResources(ctx context.Context, in *QueryCollecti // QueryServer is the server API for Query service. type QueryServer interface { + // Fetch data/payload for a specific resource (without metadata) Resource(context.Context, *QueryResourceRequest) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(context.Context, *QueryResourceMetadataRequest) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(context.Context, *QueryCollectionResourcesRequest) (*QueryCollectionResourcesResponse, error) } @@ -673,6 +733,18 @@ func (m *QueryCollectionResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if len(m.CollectionId) > 0 { i -= len(m.CollectionId) copy(dAtA[i:], m.CollectionId) @@ -703,6 +775,18 @@ func (m *QueryCollectionResourcesResponse) MarshalToSizedBuffer(dAtA []byte) (in _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if len(m.Resources) > 0 { for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { { @@ -801,6 +885,10 @@ func (m *QueryCollectionResourcesRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -816,6 +904,10 @@ func (m *QueryCollectionResourcesResponse) Size() (n int) { n += 1 + l + sovQuery(uint64(l)) } } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -1286,6 +1378,42 @@ func (m *QueryCollectionResourcesRequest) Unmarshal(dAtA []byte) error { } m.CollectionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1370,6 +1498,42 @@ func (m *QueryCollectionResourcesResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/resource/types/query.pb.gw.go b/x/resource/types/query.pb.gw.go index 47f1996e3..bb8e07625 100644 --- a/x/resource/types/query.pb.gw.go +++ b/x/resource/types/query.pb.gw.go @@ -185,6 +185,10 @@ func local_request_Query_ResourceMetadata_0(ctx context.Context, marshaler runti } +var ( + filter_Query_CollectionResources_0 = &utilities.DoubleArray{Encoding: map[string]int{"collection_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + func request_Query_CollectionResources_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryCollectionResourcesRequest var metadata runtime.ServerMetadata @@ -207,6 +211,13 @@ func request_Query_CollectionResources_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "collection_id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CollectionResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.CollectionResources(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -234,6 +245,13 @@ func local_request_Query_CollectionResources_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "collection_id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CollectionResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.CollectionResources(ctx, &protoReq) return msg, metadata, err diff --git a/x/resource/types/resource.pb.go b/x/resource/types/resource.pb.go index dfdf3b2c2..b10d1116b 100644 --- a/x/resource/types/resource.pb.go +++ b/x/resource/types/resource.pb.go @@ -27,59 +27,6 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -type ResourceWithMetadata struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (m *ResourceWithMetadata) Reset() { *m = ResourceWithMetadata{} } -func (m *ResourceWithMetadata) String() string { return proto.CompactTextString(m) } -func (*ResourceWithMetadata) ProtoMessage() {} -func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{0} -} -func (m *ResourceWithMetadata) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ResourceWithMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResourceWithMetadata.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 *ResourceWithMetadata) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceWithMetadata.Merge(m, src) -} -func (m *ResourceWithMetadata) XXX_Size() int { - return m.Size() -} -func (m *ResourceWithMetadata) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceWithMetadata.DiscardUnknown(m) -} - -var xxx_messageInfo_ResourceWithMetadata proto.InternalMessageInfo - -func (m *ResourceWithMetadata) GetResource() *Resource { - if m != nil { - return m.Resource - } - return nil -} - -func (m *ResourceWithMetadata) GetMetadata() *Metadata { - if m != nil { - return m.Metadata - } - return nil -} - // Resource stores the contents of a DID-Linked Resource type Resource struct { // bytes is the raw data of the Resource @@ -90,7 +37,7 @@ func (m *Resource) Reset() { *m = Resource{} } func (m *Resource) String() string { return proto.CompactTextString(m) } func (*Resource) ProtoMessage() {} func (*Resource) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{1} + return fileDescriptor_abfe0b32f2a40f67, []int{0} } func (m *Resource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -130,25 +77,30 @@ func (m *Resource) GetData() []byte { type Metadata struct { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource - CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"resourceCollectionId"` // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. // Format: - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"resourceId"` // name is a human-readable name for the Resource. Defined client-side. // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"resourceName"` // version is a human-readable semantic version for the Resource. Defined client-side. // Stored as a string. OPTIONAL. // Example: 1.0.0, v2.1.0 - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"resourceVersion"` // resource_type is a Resource type that identifies what the Resource is. Defined client-side. // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resourceType"` // List of alternative URIs for the SAME Resource. - AlsoKnownAs []*AlternativeUri `protobuf:"bytes,6,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` + AlsoKnownAs []*AlternativeUri `protobuf:"bytes,6,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"resourceAlternativeUri"` // media_type is IANA media type of the Resource. Defined ledger-side. // Example: application/json, image/png MediaType string `protobuf:"bytes,7,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"` @@ -173,7 +125,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{2} + return fileDescriptor_abfe0b32f2a40f67, []int{1} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -302,7 +254,7 @@ func (m *AlternativeUri) Reset() { *m = AlternativeUri{} } func (m *AlternativeUri) String() string { return proto.CompactTextString(m) } func (*AlternativeUri) ProtoMessage() {} func (*AlternativeUri) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{3} + return fileDescriptor_abfe0b32f2a40f67, []int{2} } func (m *AlternativeUri) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -345,97 +297,108 @@ func (m *AlternativeUri) GetDescription() string { return "" } -func init() { - proto.RegisterType((*ResourceWithMetadata)(nil), "cheqd.resource.v2.ResourceWithMetadata") - proto.RegisterType((*Resource)(nil), "cheqd.resource.v2.Resource") - proto.RegisterType((*Metadata)(nil), "cheqd.resource.v2.Metadata") - proto.RegisterType((*AlternativeUri)(nil), "cheqd.resource.v2.AlternativeUri") +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +type ResourceWithMetadata struct { + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResource"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"linkedResourceMetadata"` } -func init() { proto.RegisterFile("cheqd/resource/v2/resource.proto", fileDescriptor_abfe0b32f2a40f67) } +func (m *ResourceWithMetadata) Reset() { *m = ResourceWithMetadata{} } +func (m *ResourceWithMetadata) String() string { return proto.CompactTextString(m) } +func (*ResourceWithMetadata) ProtoMessage() {} +func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_abfe0b32f2a40f67, []int{3} +} +func (m *ResourceWithMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceWithMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResourceWithMetadata.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 *ResourceWithMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceWithMetadata.Merge(m, src) +} +func (m *ResourceWithMetadata) XXX_Size() int { + return m.Size() +} +func (m *ResourceWithMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceWithMetadata.DiscardUnknown(m) +} -var fileDescriptor_abfe0b32f2a40f67 = []byte{ - // 514 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcf, 0x6e, 0xd3, 0x4c, - 0x10, 0x8f, 0x93, 0x7c, 0x8d, 0x33, 0x69, 0xfa, 0xd1, 0xa5, 0x07, 0x2b, 0x08, 0x27, 0x84, 0x4b, - 0x0f, 0xc5, 0x96, 0x02, 0x12, 0x37, 0xa4, 0x46, 0x08, 0xa9, 0xaa, 0xb8, 0x58, 0x05, 0x24, 0x2e, - 0x91, 0xe3, 0x1d, 0x92, 0x55, 0x63, 0xaf, 0xf1, 0xae, 0x4d, 0xfb, 0x06, 0x1c, 0xfb, 0x44, 0x9c, - 0x73, 0xec, 0x91, 0x53, 0x41, 0xc9, 0x8b, 0xa0, 0x5d, 0x7b, 0xdd, 0x20, 0xe0, 0x62, 0xcd, 0xfe, - 0xf6, 0xf7, 0x67, 0x3c, 0xa3, 0x85, 0x51, 0xb4, 0xc4, 0xcf, 0xd4, 0xcf, 0x50, 0xf0, 0x3c, 0x8b, - 0xd0, 0x2f, 0x26, 0x75, 0xed, 0xa5, 0x19, 0x97, 0x9c, 0x1c, 0x6a, 0x86, 0x57, 0xa3, 0xc5, 0x64, - 0x70, 0xb4, 0xe0, 0x0b, 0xae, 0x6f, 0x7d, 0x55, 0x95, 0xc4, 0xc1, 0x70, 0xc1, 0xf9, 0x62, 0x85, - 0xbe, 0x3e, 0xcd, 0xf3, 0x4f, 0xbe, 0x64, 0x31, 0x0a, 0x19, 0xc6, 0x69, 0x49, 0x18, 0x7f, 0xb5, - 0xe0, 0x28, 0xa8, 0x6c, 0x3e, 0x30, 0xb9, 0x7c, 0x8b, 0x32, 0xa4, 0xa1, 0x0c, 0xc9, 0x4b, 0xb0, - 0x8d, 0xbd, 0x63, 0x8d, 0xac, 0xe3, 0xde, 0xe4, 0x91, 0xf7, 0x47, 0xaa, 0x67, 0xa4, 0x41, 0x4d, - 0x56, 0xc2, 0xb8, 0x32, 0x71, 0x9a, 0xff, 0x14, 0x9a, 0x9c, 0xa0, 0x26, 0x8f, 0x5d, 0xb0, 0x8d, - 0x1d, 0x21, 0xd0, 0xd6, 0x06, 0x2a, 0x79, 0x3f, 0xd0, 0xf5, 0xf8, 0x5b, 0x0b, 0xec, 0xba, 0xbd, - 0xa7, 0xd0, 0x8f, 0xf8, 0x6a, 0x85, 0x91, 0x64, 0x3c, 0x99, 0x31, 0xaa, 0x99, 0xdd, 0x60, 0xff, - 0x1e, 0x3c, 0xa3, 0xe4, 0x00, 0x9a, 0x8c, 0xea, 0x26, 0xba, 0x41, 0x93, 0x51, 0xe5, 0x9a, 0x84, - 0x31, 0x3a, 0x2d, 0x8d, 0xe8, 0x9a, 0x38, 0xd0, 0x29, 0x30, 0x13, 0x8c, 0x27, 0x4e, 0x5b, 0xc3, - 0xe6, 0xa8, 0x22, 0x4c, 0xc7, 0x33, 0x79, 0x9d, 0xa2, 0xf3, 0x5f, 0x19, 0x61, 0xc0, 0x8b, 0xeb, - 0x14, 0xc9, 0x39, 0xf4, 0xc3, 0x95, 0xe0, 0xb3, 0xcb, 0x84, 0x7f, 0x49, 0x66, 0xa1, 0x70, 0xf6, - 0x46, 0xad, 0xe3, 0xde, 0xe4, 0xc9, 0x5f, 0x7e, 0xf9, 0x74, 0x25, 0x31, 0x4b, 0x42, 0xc9, 0x0a, - 0x7c, 0x97, 0xb1, 0x69, 0x7b, 0x7d, 0x37, 0xb4, 0x82, 0x9e, 0x52, 0x9f, 0x2b, 0xf1, 0xa9, 0x20, - 0x8f, 0x01, 0x62, 0xa4, 0x2c, 0x2c, 0xe3, 0x3a, 0x3a, 0xae, 0xab, 0x11, 0x9d, 0xf5, 0x0a, 0x3a, - 0x51, 0x86, 0xa1, 0x44, 0xea, 0xd8, 0x7a, 0xb0, 0x03, 0xaf, 0x5c, 0xaf, 0x67, 0xd6, 0xeb, 0x5d, - 0x98, 0xf5, 0x4e, 0xed, 0xf5, 0xdd, 0xb0, 0x71, 0xf3, 0x63, 0x68, 0x05, 0x46, 0x44, 0x06, 0x60, - 0x47, 0x4b, 0x8c, 0x2e, 0x45, 0x1e, 0x3b, 0x5d, 0x6d, 0x5e, 0x9f, 0xc9, 0x0b, 0x78, 0x98, 0x66, - 0x58, 0x30, 0x9e, 0x8b, 0x59, 0x35, 0x00, 0x35, 0x55, 0x50, 0xb4, 0xaa, 0xd5, 0x43, 0x43, 0x78, - 0x5f, 0xde, 0x9f, 0x51, 0x72, 0x02, 0xff, 0x27, 0x78, 0x25, 0x77, 0x15, 0xbd, 0x1d, 0x45, 0x5f, - 0x5d, 0xd6, 0xec, 0xf1, 0x6b, 0x38, 0xf8, 0x7d, 0x06, 0xe4, 0x01, 0xb4, 0xf2, 0x8c, 0x55, 0xbb, - 0x53, 0x25, 0x19, 0x41, 0x8f, 0xa2, 0x88, 0x32, 0x96, 0xaa, 0x1d, 0x56, 0xbb, 0xdb, 0x85, 0xa6, - 0x6f, 0xd6, 0x1b, 0xd7, 0xba, 0xdd, 0xb8, 0xd6, 0xcf, 0x8d, 0x6b, 0xdd, 0x6c, 0xdd, 0xc6, 0xed, - 0xd6, 0x6d, 0x7c, 0xdf, 0xba, 0x8d, 0x8f, 0x27, 0x0b, 0x26, 0x97, 0xf9, 0xdc, 0x8b, 0x78, 0xec, - 0x97, 0x4f, 0x48, 0x7f, 0x9f, 0x25, 0x9c, 0xa2, 0x7f, 0x75, 0xff, 0x9e, 0xd4, 0x74, 0xc5, 0x7c, - 0x4f, 0x0f, 0xed, 0xf9, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x6a, 0xda, 0x2f, 0x6e, 0x03, - 0x00, 0x00, +var xxx_messageInfo_ResourceWithMetadata proto.InternalMessageInfo + +func (m *ResourceWithMetadata) GetResource() *Resource { + if m != nil { + return m.Resource + } + return nil } -func (m *ResourceWithMetadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *ResourceWithMetadata) GetMetadata() *Metadata { + if m != nil { + return m.Metadata } - return dAtA[:n], nil + return nil } -func (m *ResourceWithMetadata) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func init() { + proto.RegisterType((*Resource)(nil), "cheqd.resource.v2.Resource") + proto.RegisterType((*Metadata)(nil), "cheqd.resource.v2.Metadata") + proto.RegisterType((*AlternativeUri)(nil), "cheqd.resource.v2.AlternativeUri") + proto.RegisterType((*ResourceWithMetadata)(nil), "cheqd.resource.v2.ResourceWithMetadata") } -func (m *ResourceWithMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Metadata != nil { - { - size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintResource(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintResource(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func init() { proto.RegisterFile("cheqd/resource/v2/resource.proto", fileDescriptor_abfe0b32f2a40f67) } + +var fileDescriptor_abfe0b32f2a40f67 = []byte{ + // 595 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x54, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0x8d, 0xdb, 0xfc, 0x5a, 0x77, 0xd2, 0xf4, 0xcf, 0xfe, 0x2a, 0xb0, 0x82, 0xb0, 0x43, 0xc4, + 0xa1, 0x87, 0x62, 0x8b, 0x00, 0x47, 0x90, 0x1a, 0x10, 0x52, 0x55, 0xc1, 0x61, 0x29, 0x20, 0x71, + 0x89, 0x5c, 0xef, 0x90, 0xac, 0x1a, 0x7b, 0x83, 0xbd, 0x0e, 0xed, 0xb7, 0xe8, 0xc7, 0xe1, 0xc6, + 0xb5, 0xc7, 0x1e, 0x39, 0x19, 0xd4, 0xdc, 0xf2, 0x29, 0xd0, 0xae, 0xb3, 0x26, 0x51, 0x7b, 0x89, + 0x66, 0xe6, 0xbd, 0x79, 0x1e, 0xcf, 0x9b, 0x18, 0xda, 0xd1, 0x10, 0xbf, 0xb1, 0x20, 0xc5, 0x4c, + 0xe4, 0x69, 0x84, 0xc1, 0xa4, 0x5b, 0xc5, 0xfe, 0x38, 0x15, 0x52, 0x90, 0x5d, 0xcd, 0xf0, 0xab, + 0xea, 0xa4, 0xdb, 0xda, 0x1b, 0x88, 0x81, 0xd0, 0x68, 0xa0, 0xa2, 0x92, 0xd8, 0xf2, 0x06, 0x42, + 0x0c, 0x46, 0x18, 0xe8, 0xec, 0x34, 0xff, 0x1a, 0x48, 0x1e, 0x63, 0x26, 0xc3, 0x78, 0x5c, 0x12, + 0x3a, 0x2e, 0xd8, 0x74, 0xae, 0x42, 0x08, 0xd4, 0x59, 0x28, 0x43, 0xc7, 0x6a, 0x5b, 0xfb, 0x9b, + 0x54, 0xc7, 0x9d, 0x9f, 0x75, 0xb0, 0xdf, 0xa1, 0x0c, 0x55, 0x42, 0x5e, 0x42, 0x33, 0x12, 0xa3, + 0x11, 0x46, 0x92, 0x8b, 0xa4, 0xcf, 0x99, 0x66, 0x6e, 0xf4, 0x9c, 0x59, 0xe1, 0xed, 0x99, 0x59, + 0x5e, 0x57, 0x84, 0x23, 0x46, 0x37, 0xa3, 0x85, 0x8c, 0xb8, 0xb0, 0xc2, 0x99, 0xb3, 0xa2, 0x7b, + 0xb6, 0x66, 0x85, 0x07, 0xa6, 0xe7, 0x88, 0xd1, 0x15, 0xce, 0xc8, 0x63, 0xa8, 0x27, 0x61, 0x8c, + 0xce, 0xaa, 0x66, 0xec, 0xcc, 0x0a, 0x6f, 0xd3, 0x30, 0xde, 0x87, 0x31, 0x52, 0x8d, 0x92, 0xa7, + 0xb0, 0x3e, 0xc1, 0x34, 0xe3, 0x22, 0x71, 0xea, 0x9a, 0x78, 0xff, 0xaa, 0xf0, 0xac, 0x59, 0xe1, + 0x6d, 0x1b, 0xf2, 0xa7, 0x12, 0xa6, 0x86, 0x47, 0x5e, 0x40, 0xd3, 0x60, 0x7d, 0x79, 0x31, 0x46, + 0xe7, 0xbf, 0xdb, 0x4f, 0x38, 0xb9, 0x18, 0x23, 0x5d, 0xca, 0x08, 0x42, 0x33, 0x1c, 0x65, 0xa2, + 0x7f, 0x96, 0x88, 0xef, 0x49, 0x3f, 0xcc, 0x9c, 0xb5, 0xf6, 0xea, 0x7e, 0xa3, 0xfb, 0xc8, 0xbf, + 0xb5, 0x7d, 0xff, 0x70, 0x24, 0x31, 0x4d, 0x42, 0xc9, 0x27, 0xf8, 0x31, 0xe5, 0x3d, 0x77, 0x3e, + 0xd2, 0x3d, 0xc3, 0x59, 0xc6, 0x69, 0x43, 0xe9, 0x1e, 0x2b, 0xd9, 0xc3, 0x8c, 0x3c, 0x04, 0x88, + 0x91, 0xf1, 0xb0, 0x1c, 0x6d, 0x5d, 0x8d, 0x46, 0x37, 0x74, 0x45, 0x4f, 0xf1, 0x0a, 0xd6, 0xa3, + 0x14, 0x43, 0x89, 0xcc, 0xb1, 0xdb, 0xd6, 0x7e, 0xa3, 0xdb, 0xf2, 0x4b, 0x53, 0x7d, 0x63, 0xaa, + 0x7f, 0x62, 0x4c, 0xed, 0xd9, 0x57, 0x85, 0x57, 0xbb, 0xfc, 0xed, 0x59, 0xd4, 0x34, 0x91, 0x16, + 0xd8, 0xd1, 0x10, 0xa3, 0xb3, 0x2c, 0x8f, 0x9d, 0x0d, 0x2d, 0x5e, 0xe5, 0xe4, 0x39, 0xfc, 0x3f, + 0x4e, 0x71, 0xc2, 0x45, 0x9e, 0xf5, 0xe7, 0xcb, 0x52, 0xb6, 0x82, 0x5e, 0x4f, 0x5d, 0xbd, 0x04, + 0xdd, 0x35, 0x84, 0xf9, 0x56, 0x8f, 0x18, 0x39, 0x80, 0xed, 0x04, 0xcf, 0xe5, 0x62, 0x47, 0x63, + 0xa1, 0xa3, 0xa9, 0xc0, 0x8a, 0xdd, 0x79, 0x03, 0x5b, 0xcb, 0x6f, 0x4f, 0x76, 0x60, 0x35, 0x4f, + 0x79, 0x79, 0x3c, 0x54, 0x85, 0xa4, 0x0d, 0x0d, 0x86, 0x59, 0x94, 0xf2, 0xb1, 0x3a, 0x95, 0xf2, + 0x44, 0xe8, 0x62, 0xa9, 0xf3, 0xc3, 0x82, 0x3d, 0x73, 0xa8, 0x9f, 0xb9, 0x1c, 0x56, 0x37, 0x79, + 0x0c, 0xb6, 0x59, 0xb2, 0x56, 0x6c, 0x74, 0x1f, 0xdc, 0xe1, 0x8f, 0x69, 0xed, 0x91, 0x59, 0xe1, + 0x6d, 0x8d, 0x78, 0x72, 0x86, 0xcc, 0xd4, 0x68, 0x25, 0x40, 0x3e, 0x80, 0x1d, 0xcf, 0x85, 0xf5, + 0x10, 0x77, 0x8b, 0x99, 0x67, 0xf7, 0x5a, 0xca, 0xe2, 0x65, 0x31, 0x83, 0xd1, 0x4a, 0xa8, 0xf7, + 0xf6, 0xea, 0xc6, 0xb5, 0xae, 0x6f, 0x5c, 0xeb, 0xcf, 0x8d, 0x6b, 0x5d, 0x4e, 0xdd, 0xda, 0xf5, + 0xd4, 0xad, 0xfd, 0x9a, 0xba, 0xb5, 0x2f, 0x07, 0x03, 0x2e, 0x87, 0xf9, 0xa9, 0x1f, 0x89, 0x38, + 0x28, 0xff, 0xf3, 0xfa, 0xf7, 0x49, 0x22, 0x18, 0x06, 0xe7, 0xff, 0x3e, 0x00, 0xea, 0x30, 0xb2, + 0xd3, 0x35, 0xed, 0xf7, 0xb3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xb4, 0xc8, 0xa0, 0x1f, + 0x04, 0x00, 0x00, } func (m *Resource) Marshal() (dAtA []byte, err error) { @@ -509,12 +472,12 @@ func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err3 != nil { - return 0, err3 + n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err1 != nil { + return 0, err1 } - i -= n3 - i = encodeVarintResource(dAtA, i, uint64(n3)) + i -= n1 + i = encodeVarintResource(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x42 if len(m.MediaType) > 0 { @@ -613,6 +576,53 @@ func (m *AlternativeUri) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ResourceWithMetadata) 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 *ResourceWithMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceWithMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Metadata != nil { + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintResource(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintResource(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintResource(dAtA []byte, offset int, v uint64) int { offset -= sovResource(v) base := offset @@ -624,23 +634,6 @@ func encodeVarintResource(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *ResourceWithMetadata) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovResource(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovResource(uint64(l)) - } - return n -} - func (m *Resource) Size() (n int) { if m == nil { return 0 @@ -724,134 +717,29 @@ func (m *AlternativeUri) Size() (n int) { return n } +func (m *ResourceWithMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovResource(uint64(l)) + } + if m.Metadata != nil { + l = m.Metadata.Size() + n += 1 + l + sovResource(uint64(l)) + } + return n +} + func sovResource(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozResource(x uint64) (n int) { return sovResource(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *ResourceWithMetadata) 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 ErrIntOverflowResource - } - 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: ResourceWithMetadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthResource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &Resource{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthResource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *Resource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1455,6 +1343,128 @@ func (m *AlternativeUri) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResourceWithMetadata) 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 ErrIntOverflowResource + } + 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: ResourceWithMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowResource + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthResource + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthResource + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &Resource{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowResource + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthResource + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthResource + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metadata == nil { + m.Metadata = &Metadata{} + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipResource(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthResource + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipResource(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/resource/types/tx.pb.go b/x/resource/types/tx.pb.go index c37b3b895..7a15d39d2 100644 --- a/x/resource/types/tx.pb.go +++ b/x/resource/types/tx.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cheqd/cheqd-node/x/did/types" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" @@ -28,10 +29,12 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgCreateResource defines the Msg/CreateResource request type. +// It describes the parameters of a request for creating a resource. type MsgCreateResource struct { - // Payload of the resource to be created + // Payload containing the resource to be created. Payload *MsgCreateResourcePayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // Signatures of the corresponding DID Document's controller(s) + // Signatures of the corresponding DID Document's controller(s). Signatures []*types.SignInfo `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` } @@ -82,21 +85,50 @@ func (m *MsgCreateResource) GetSignatures() []*types.SignInfo { return nil } +// MsgCreateResourcePayload defines the structure of the payload for creating a resource. +// +// If a resource with the given id does not exist already, +// it will be created. The resource will be created in the resource collection. +// +// If a resource with the given id, collection_id already exists, an error code 2200 will be returned. +// +// A new version of the resource in an existing collection will be created, +// if a resource in that collection with the same name, resource_type and empty next_version_id exists. +// +// An update operation is not possible, because the resource is immutable by design. type MsgCreateResourcePayload struct { - // data is a byte-representation of the actual Data the user wants to store + // data is a byte-representation of the actual Data the user wants to store. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // collection_id is an identifier of the DidDocument the resource belongs to - CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // id is an UUID of the resource - Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` - // name is a human-readable name of the resource - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // version is a version of the resource - Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` - // resource_type is a type of the resource - ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - // also_known_as is a list of URIs that can be used to get the resource - AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"resourceCollectionId"` + // id is a unique id of the resource. + // Format: + Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"resourceId"` + // name is a human-readable name of the resource. + // Format: + // + // Does not change between different versions. + // Example: PassportSchema, EducationTrustRegistry + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"resourceName"` + // version is a version of the resource. + // Format: + // Stored as a string. OPTIONAL. + // + // Example: 1.0.0, v2.1.0 + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"resourceVersion"` + // resource_type is a type of the resource. + // Format: + // + // This is NOT the same as the resource's media type. + // Example: AnonCredsSchema, StatusList2021 + ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resourceType"` + // also_known_as is a list of URIs that can be used to get the resource. + AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"resourceAlternativeUri"` } func (m *MsgCreateResourcePayload) Reset() { *m = MsgCreateResourcePayload{} } @@ -182,8 +214,8 @@ func (m *MsgCreateResourcePayload) GetAlsoKnownAs() []*AlternativeUri { } type MsgCreateResourceResponse struct { - // Metadata which was creted after applying to the ledger - Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // Return the created resource metadata. + Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResourceMetadata"` } func (m *MsgCreateResourceResponse) Reset() { *m = MsgCreateResourceResponse{} } @@ -235,34 +267,40 @@ func init() { func init() { proto.RegisterFile("cheqd/resource/v2/tx.proto", fileDescriptor_1d13b428c5ed4ca4) } var fileDescriptor_1d13b428c5ed4ca4 = []byte{ - // 429 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcf, 0x6b, 0xd4, 0x40, - 0x14, 0xde, 0xd9, 0xad, 0x5d, 0x9d, 0x6d, 0x0b, 0x1d, 0x50, 0xc6, 0x08, 0x21, 0xae, 0x1e, 0x16, - 0xac, 0x09, 0x44, 0xd0, 0x73, 0x15, 0x85, 0x22, 0x05, 0x19, 0xeb, 0xc5, 0x4b, 0x98, 0x66, 0x9e, - 0xe9, 0xd0, 0x74, 0x26, 0xce, 0xcc, 0xc6, 0xee, 0x7f, 0x21, 0xfe, 0x55, 0x1e, 0x7b, 0xf4, 0x28, - 0xbb, 0x7f, 0x87, 0x20, 0x99, 0x6c, 0xda, 0x62, 0x2a, 0xf4, 0x12, 0x26, 0xef, 0x7d, 0xdf, 0xf7, - 0x7e, 0x7c, 0x0f, 0x07, 0xf9, 0x09, 0x7c, 0x15, 0x89, 0x01, 0xab, 0xe7, 0x26, 0x87, 0xa4, 0x4e, - 0x13, 0x77, 0x1e, 0x57, 0x46, 0x3b, 0x4d, 0x76, 0x7d, 0x2e, 0xee, 0x72, 0x71, 0x9d, 0x06, 0xf7, - 0x5b, 0xb8, 0x90, 0xe2, 0x3a, 0x32, 0x88, 0xfa, 0x2a, 0x97, 0x2c, 0x8f, 0x98, 0xfe, 0x40, 0x78, - 0xf7, 0xd0, 0x16, 0x6f, 0x0c, 0x70, 0x07, 0x6c, 0x9d, 0x23, 0x6f, 0xf1, 0xb8, 0xe2, 0x8b, 0x52, - 0x73, 0x41, 0x51, 0x84, 0x66, 0x93, 0xf4, 0x59, 0xdc, 0xab, 0x19, 0xf7, 0x68, 0x1f, 0x5a, 0x0a, - 0xeb, 0xb8, 0xe4, 0x25, 0xc6, 0x56, 0x16, 0x8a, 0xbb, 0xb9, 0x01, 0x4b, 0x87, 0xd1, 0x68, 0x36, - 0x49, 0x1f, 0xac, 0x95, 0x84, 0x14, 0x8d, 0xc8, 0x47, 0x59, 0xa8, 0x03, 0xf5, 0x45, 0xb3, 0x6b, - 0xc8, 0xe9, 0x1f, 0x84, 0xe9, 0xff, 0xd4, 0x09, 0xc1, 0x1b, 0x82, 0x3b, 0xee, 0x1b, 0xdb, 0x62, - 0xfe, 0x4d, 0x9e, 0xe0, 0xed, 0x5c, 0x97, 0x25, 0xe4, 0x4e, 0x6a, 0x95, 0x49, 0x41, 0x87, 0x11, - 0x9a, 0xdd, 0x63, 0x5b, 0x57, 0xc1, 0x03, 0x41, 0x76, 0xf0, 0x50, 0x0a, 0x3a, 0xf2, 0x99, 0xa1, - 0xf4, 0x42, 0x8a, 0x9f, 0x01, 0xdd, 0xf0, 0x11, 0xff, 0x26, 0x14, 0x8f, 0x6b, 0x30, 0x56, 0x6a, - 0x45, 0xef, 0xf8, 0x70, 0xf7, 0xdb, 0x94, 0xe8, 0x86, 0xcf, 0xdc, 0xa2, 0x02, 0xba, 0xd9, 0x96, - 0xe8, 0x82, 0x47, 0x8b, 0xaa, 0xd9, 0xdb, 0x36, 0x2f, 0xad, 0xce, 0x4e, 0x95, 0xfe, 0xa6, 0x32, - 0x6e, 0xe9, 0xd8, 0xcf, 0xfc, 0xf8, 0x86, 0xed, 0xed, 0x97, 0x0e, 0x8c, 0xe2, 0x4e, 0xd6, 0xf0, - 0xc9, 0x48, 0x36, 0x69, 0x78, 0xef, 0x1b, 0xda, 0xbe, 0x9d, 0x1e, 0xe1, 0x87, 0xbd, 0xf1, 0x19, - 0xd8, 0x4a, 0x2b, 0x0b, 0xe4, 0x15, 0xbe, 0xdb, 0xe9, 0xac, 0xcd, 0x79, 0x74, 0x93, 0x39, 0xe0, - 0x78, 0xb3, 0x1a, 0x76, 0x09, 0x4e, 0x4f, 0xf1, 0xe8, 0xd0, 0x16, 0x44, 0xe0, 0x9d, 0x7f, 0xdc, - 0x7e, 0x7a, 0x1b, 0x73, 0x83, 0xbd, 0xdb, 0xa0, 0xba, 0x2e, 0x5f, 0xbf, 0xfb, 0xb9, 0x0c, 0xd1, - 0xc5, 0x32, 0x44, 0xbf, 0x97, 0x21, 0xfa, 0xbe, 0x0a, 0x07, 0x17, 0xab, 0x70, 0xf0, 0x6b, 0x15, - 0x0e, 0x3e, 0xef, 0x15, 0xd2, 0x9d, 0xcc, 0x8f, 0xe3, 0x5c, 0x9f, 0x25, 0xed, 0x79, 0xfa, 0xef, - 0x73, 0xa5, 0x05, 0x24, 0xe7, 0x57, 0xb7, 0xda, 0x2c, 0xd9, 0x1e, 0x6f, 0xfa, 0x33, 0x7d, 0xf1, - 0x37, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x0f, 0x8d, 0x06, 0x10, 0x03, 0x00, 0x00, + // 513 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x41, 0x6f, 0xd3, 0x30, + 0x18, 0x86, 0x9b, 0xb6, 0xac, 0xe0, 0xb6, 0x83, 0x59, 0x63, 0x98, 0x22, 0xa5, 0xa5, 0xda, 0xa1, + 0x12, 0x23, 0x11, 0x45, 0x70, 0xe3, 0xb0, 0x4e, 0x20, 0x55, 0x68, 0x08, 0x79, 0xc0, 0x81, 0x4b, + 0xe5, 0xc5, 0x26, 0xb3, 0x9a, 0xda, 0x21, 0x76, 0xcb, 0x7a, 0xe7, 0x07, 0x20, 0x7e, 0xd5, 0x8e, + 0x3b, 0x72, 0xaa, 0x50, 0x7b, 0xeb, 0xaf, 0x40, 0x71, 0xea, 0xd2, 0x91, 0x21, 0xed, 0x12, 0xd9, + 0x79, 0x9f, 0xf7, 0xf5, 0x97, 0x7c, 0x9f, 0x41, 0x23, 0x38, 0x63, 0x5f, 0xa9, 0x9f, 0x30, 0x25, + 0xc7, 0x49, 0xc0, 0xfc, 0x49, 0xd7, 0xd7, 0xe7, 0x5e, 0x9c, 0x48, 0x2d, 0xe1, 0x8e, 0xd1, 0x3c, + 0xab, 0x79, 0x93, 0x6e, 0xe3, 0x7e, 0x86, 0x53, 0x4e, 0x37, 0xc9, 0x46, 0x2b, 0x9f, 0xb2, 0x76, + 0x65, 0xc4, 0x6e, 0x28, 0x43, 0x69, 0x96, 0x7e, 0xba, 0xca, 0xde, 0xb6, 0x7f, 0x3a, 0x60, 0xe7, + 0x58, 0x85, 0x47, 0x09, 0x23, 0x9a, 0xe1, 0x95, 0x03, 0xbe, 0x06, 0x95, 0x98, 0x4c, 0x23, 0x49, + 0x28, 0x72, 0x5a, 0x4e, 0xa7, 0xda, 0x7d, 0xe2, 0xe5, 0x2a, 0xf1, 0x72, 0xb6, 0xf7, 0x99, 0x05, + 0x5b, 0x2f, 0x7c, 0x09, 0x80, 0xe2, 0xa1, 0x20, 0x7a, 0x9c, 0x30, 0x85, 0x8a, 0xad, 0x52, 0xa7, + 0xda, 0xdd, 0x5b, 0x25, 0x51, 0x4e, 0xd3, 0x90, 0x13, 0x1e, 0x8a, 0xbe, 0xf8, 0x22, 0xf1, 0x06, + 0xd9, 0xfe, 0x5e, 0x02, 0xe8, 0x7f, 0xe9, 0x10, 0x82, 0x32, 0x25, 0x9a, 0x98, 0xc2, 0x6a, 0xd8, + 0xac, 0xe1, 0x2b, 0x50, 0x0f, 0x64, 0x14, 0xb1, 0x40, 0x73, 0x29, 0x06, 0x9c, 0xa2, 0x62, 0xcb, + 0xe9, 0xdc, 0xe9, 0xa1, 0xe5, 0xac, 0xb9, 0x6b, 0x4b, 0x3e, 0x5a, 0x03, 0x7d, 0x8a, 0x6b, 0xc1, + 0xc6, 0x0e, 0xba, 0xa0, 0xc8, 0x29, 0x2a, 0x19, 0xcf, 0xf6, 0x72, 0xd6, 0x04, 0xd6, 0xd3, 0xa7, + 0xb8, 0xc8, 0x29, 0xdc, 0x07, 0x65, 0x41, 0x46, 0x0c, 0x95, 0x0d, 0x71, 0x6f, 0x39, 0x6b, 0xd6, + 0x2c, 0xf1, 0x8e, 0x8c, 0x18, 0x36, 0x2a, 0x7c, 0x06, 0x2a, 0x13, 0x96, 0x28, 0x2e, 0x05, 0xba, + 0x65, 0xc0, 0x07, 0x17, 0xb3, 0xa6, 0xb3, 0x9c, 0x35, 0xef, 0x5a, 0xf8, 0x53, 0x26, 0x63, 0xcb, + 0xc1, 0x17, 0xa0, 0x6e, 0xb5, 0x81, 0x9e, 0xc6, 0x0c, 0x6d, 0xe5, 0x4f, 0xf8, 0x30, 0x8d, 0x19, + 0xbe, 0xb2, 0x83, 0x0c, 0xd4, 0x49, 0xa4, 0xe4, 0x60, 0x28, 0xe4, 0x37, 0x31, 0x20, 0x0a, 0x55, + 0xcc, 0xaf, 0x7d, 0x7c, 0x4d, 0x93, 0x0e, 0x23, 0xcd, 0x12, 0x41, 0x34, 0x9f, 0xb0, 0x8f, 0x09, + 0xef, 0xb9, 0xab, 0x92, 0xf6, 0x2c, 0x73, 0x55, 0xc7, 0xd5, 0x34, 0xf7, 0x6d, 0x1a, 0x7b, 0xa8, + 0xda, 0x31, 0x78, 0x98, 0xeb, 0x02, 0x66, 0x2a, 0x96, 0x42, 0x31, 0x78, 0x02, 0x6e, 0xdb, 0x8c, + 0xd5, 0x8c, 0x3c, 0xba, 0x6e, 0x46, 0x98, 0x26, 0x69, 0x87, 0x7a, 0x8d, 0xf4, 0xd0, 0x88, 0x8b, + 0x21, 0xa3, 0x36, 0xca, 0x6a, 0x78, 0x1d, 0xd4, 0x1d, 0x82, 0xd2, 0xb1, 0x0a, 0x21, 0x05, 0xdb, + 0xff, 0x0c, 0xe4, 0xfe, 0x4d, 0xe6, 0xaf, 0x71, 0x70, 0x13, 0xca, 0x7e, 0x41, 0xef, 0xcd, 0xc5, + 0xdc, 0x75, 0x2e, 0xe7, 0xae, 0xf3, 0x7b, 0xee, 0x3a, 0x3f, 0x16, 0x6e, 0xe1, 0x72, 0xe1, 0x16, + 0x7e, 0x2d, 0xdc, 0xc2, 0xe7, 0x83, 0x90, 0xeb, 0xb3, 0xf1, 0xa9, 0x17, 0xc8, 0x91, 0x9f, 0xdd, + 0x2b, 0xf3, 0x7c, 0x2a, 0x24, 0x65, 0xfe, 0xf9, 0xdf, 0x4b, 0x96, 0xb6, 0x4c, 0x9d, 0x6e, 0x99, + 0x9b, 0xf4, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x6d, 0x3e, 0x2f, 0xc9, 0x03, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/resource/types/tx_msg_create_resource_payload.go b/x/resource/types/tx_msg_create_resource_payload.go index 094adc250..c5cf7c2f7 100644 --- a/x/resource/types/tx_msg_create_resource_payload.go +++ b/x/resource/types/tx_msg_create_resource_payload.go @@ -23,6 +23,7 @@ func (msg *MsgCreateResourcePayload) ToResource() ResourceWithMetadata { CollectionId: msg.CollectionId, Id: msg.Id, Name: msg.Name, + Version: msg.Version, ResourceType: msg.ResourceType, AlsoKnownAs: msg.AlsoKnownAs, }, diff --git a/x/resource/types/tx_msg_create_resource_payload_test.go b/x/resource/types/tx_msg_create_resource_payload_test.go index 2edc6dc07..06c158d9b 100644 --- a/x/resource/types/tx_msg_create_resource_payload_test.go +++ b/x/resource/types/tx_msg_create_resource_payload_test.go @@ -40,7 +40,7 @@ var _ = Describe("TxMsgCreateResourcePayload", func() { ResourceType: "", Data: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, } - Expect(msg.Validate().Error()).To(Equal("resource_type: cannot be blank.")) + Expect(msg.Validate().Error()).To(Equal("resourceType: cannot be blank.")) }) }) }) From c4491a5a934bfe3ffbea46c32d7a5eb58d074e39 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 16:55:26 +0000 Subject: [PATCH 3/9] feat: Get resource protobufs inline with DID protobufs [DEV-2148] (#516) * Update package-lock.json * Update diddoc.proto * Update .openapirc.yml * Update JSON tags for DIDDocs * proto-gen after resource proto changes * proto-gen after resource query update * proto-gen for resource tx * swagger gen * Update statik.go * Update fee to gas auto * Update .openapirc.yml * Remove Swagger gitignorex * Switch back to config.yaml * Update protoc-swagger-gen.sh * playing with buf options * Swagger combine update * Initialise all * Update buf.gen.swagger.yaml * Swagger tag replace * Revert gitignore * Added did & resource CLI payload spec-compliant changes & protobuf based resource payload & various textual fixes * Fixed stylecheck namings * Makes all the fields in unit tests in camelCase * Make fields in camelCase for integration tests also * Added consistent uuid as flag & pricing flags * make swagger * Bump buf * Update .goreleaser.yml * Added default flag behavior * Update .openapirc.yml * Update config.yaml * Exclude via super-linter paths * Update logging statements * Aligned integration cli * Fixed namings * Added consistent queries * Add fees param for upgrade integration tests * Makes linter happy * Fix upgrade tests (resources are left) * Makes linter happy * Change Marshaller for cheqd-noded CLI * Fix upgrade integration tests * Update fee.go * Added module flag overrides per transaction * Removed redundant def * Added as pairs * fix(resource): Fix resource version persistence (#517) * Fix problem with save version field in Resource * Add integration tests for testing last commit changes * Last version of mainnet should be 0.6.10 Co-authored-by: abdulla-ashurov * Fixed field construction * Add fixes for CLI and upgrade tests * Added resource version integration tests * Remove duplicates * Add versions to the resources * Polishes * Fixed structure * Removed redundant * Cleanup * Add gas price * Add example payload file to create DID command * Clarified fee flag for create and deactivate * Update tx_update_diddoc.go - Added example payload file - Clarified fees * Revert "Add gas price" This reverts commit 149d22d5a2108f0c8d6bb045f92820de002279ea. * Update tx.go * Update tx.go * Add signInputs to DID create and update * Update tx_create_resource.go * Correct typos in flag description * make swagger * Set default tx gas to default persistent * Update payload examples * Set Gas adjustment back to 1.8 * Remove resource ID flag * Update resource proto comment for collections * Rename resource-metadata subcommand * Rename collection-resources and resource subcommands * make proto-all * Update help text for tx commands * Aligned resource id traces * Typo fix, triggering fresh run * Removed redundant arg * Switched to match command naming * Fix linter exclude Co-authored-by: Tasos Derisiotis <50984242+Eengineer1@users.noreply.github.com> Co-authored-by: Andrew Nikitin Co-authored-by: abdulla-ashurov --- .github/linters/.openapirc.yml | 11 - .github/workflows/lint.yml | 1 + .github/workflows/test.yml | 2 +- .gitignore | 2 +- .goreleaser.yml | 2 +- api/cheqd/did/v2/diddoc.pulsar.go | 116 +- api/cheqd/resource/v2/query.pulsar.go | 415 ++- api/cheqd/resource/v2/query_grpc.pb.go | 6 + api/cheqd/resource/v2/resource.pulsar.go | 2812 +++++++++-------- api/cheqd/resource/v2/tx.pulsar.go | 166 +- api/docs/config.json | 44 - api/docs/config.yaml | 40 + api/docs/statik/statik.go | 8 +- api/docs/swagger.yaml | 241 +- app/app.go | 8 +- app/migrations/migration_did_simple.go | 2 +- docker/localnet/mainnet-latest.env | 2 +- package-lock.json | 93 +- proto/buf.gen.swagger.yaml | 2 + proto/buf.lock | 2 +- proto/cheqd/did/v2/diddoc.proto | 4 +- proto/cheqd/resource/v2/query.proto | 18 +- proto/cheqd/resource/v2/resource.proto | 35 +- proto/cheqd/resource/v2/tx.proto | 23 +- scripts/protoc-swagger-gen.sh | 2 +- tests/integration/cli/config.go | 2 +- tests/integration/cli/query.go | 6 +- tests/integration/cli/tx.go | 34 +- tests/integration/cli_diddoc_negative_test.go | 231 +- .../cli_diddoc_pricing_negative_test.go | 214 +- tests/integration/cli_diddoc_pricing_test.go | 310 +- tests/integration/cli_diddoc_test.go | 233 +- .../integration/cli_resource_negative_test.go | 257 +- .../cli_resource_pricing_negative_test.go | 318 +- .../integration/cli_resource_pricing_test.go | 377 +-- tests/integration/cli_resource_test.go | 176 +- tests/integration/helpers/deep_copy.go | 21 +- tests/integration/helpers/fee.go | 3 +- tests/integration/testdata/accounts.go | 2 +- tests/upgrade/integration/cli/config.go | 15 +- tests/upgrade/integration/cli/query.go | 8 +- tests/upgrade/integration/cli/query_did.go | 4 +- .../upgrade/integration/cli/query_resource.go | 4 +- tests/upgrade/integration/cli/tx.go | 16 +- tests/upgrade/integration/cli/tx_did.go | 48 +- tests/upgrade/integration/cli/tx_resource.go | 38 +- .../create - resource/resource_post_indy.json | 8 +- .../create - resource/resource_post_uuid.json | 8 +- .../post/query - diddoc/diddoc_indy_16.json | 20 +- .../post/query - diddoc/diddoc_indy_32.json | 20 +- .../query - diddoc/diddoc_uuid_lowcase.json | 16 +- .../query - diddoc/diddoc_uuid_mixed.json | 22 +- .../query - diddoc/diddoc_uuid_uppercase.json | 18 +- .../query - resource/resource_indy_16.json | 12 +- .../query - resource/resource_post_indy.json | 14 +- .../query - resource/resource_post_uuid.json | 14 +- .../resource_uuid_lower_1.json | 10 +- .../resource_uuid_lower_2.json | 10 +- .../resource_uuid_mixed_1.json | 10 +- .../resource_uuid_mixed_2.json | 10 +- .../resource_uuid_mixed_3.json | 10 +- .../post/update - diddoc/diddoc_indy_16.json | 30 +- .../update - diddoc/diddoc_uuid_lowcase.json | 28 +- .../diddoc_uuid_uppercase.json | 30 +- .../integration/param_change_proposal_test.go | 18 +- tests/upgrade/integration/post_test.go | 36 +- tests/upgrade/integration/pre_test.go | 24 +- .../payload/checksum/existing/v2/diddoc.json | 22 +- .../checksum/existing/v2/resource.json | 10 +- .../payload/checksum/expected/v2/diddoc.json | 22 +- .../checksum/expected/v2/resource.json | 24 +- .../indy_style/existing/v2/diddoc.json | 30 +- .../indy_style/existing/v2/diddoc_2.json | 30 +- .../indy_style/existing/v2/resource.json | 10 +- .../indy_style/existing/v2/resource_2.json | 10 +- .../indy_style/expected/v2/diddoc.json | 30 +- .../indy_style/expected/v2/diddoc_2.json | 30 +- .../indy_style/expected/v2/resource.json | 10 +- .../indy_style/expected/v2/resource_2.json | 10 +- .../payload/protobuf/expected/v2/diddoc.json | 30 +- .../protobuf/expected/v2/diddoc_2.json | 30 +- .../protobuf/expected/v2/resource.json | 22 +- .../existing/v2/resource_type_1.json | 12 +- .../existing/v2/resource_type_2.json | 12 +- .../existing/v2/resource_type_3.json | 12 +- .../expected/v2/resource_type_1.json | 12 +- .../expected/v2/resource_type_2.json | 12 +- .../expected/v2/resource_type_3.json | 12 +- .../uuid/existing/v2/diddoc_lowcase.json | 30 +- .../uuid/existing/v2/diddoc_mixed.json | 30 +- .../uuid/existing/v2/diddoc_upper.json | 30 +- .../uuid/existing/v2/resource_lowcase.json | 12 +- .../uuid/existing/v2/resource_mixed.json | 12 +- .../uuid/existing/v2/resource_upper.json | 12 +- .../uuid/expected/v2/diddoc_lowcase.json | 30 +- .../uuid/expected/v2/diddoc_mixed.json | 30 +- .../uuid/expected/v2/diddoc_upper.json | 30 +- .../uuid/expected/v2/resource_lowcase.json | 12 +- .../uuid/expected/v2/resource_mixed.json | 12 +- .../uuid/expected/v2/resource_upper.json | 12 +- .../version_id/existing/v2/diddoc_hash.json | 30 +- .../version_id/expected/v2/diddoc_hash.json | 30 +- tests/upgrade/unit/setup/loader.go | 2 +- x/did/client/cli/tx.go | 128 + x/did/client/cli/tx_create_diddoc.go | 118 +- x/did/client/cli/tx_deactivate_diddoc.go | 61 +- x/did/client/cli/tx_update_diddoc.go | 118 +- x/did/tests/setup/utils.go | 10 + x/did/types/diddoc.pb.go | 95 +- x/did/utils/proto.go | 8 - x/did/utils/proto_test.go | 19 - x/did/utils/str_test.go | 8 +- .../client/cli/query_collection_resources.go | 10 +- x/resource/client/cli/query_resource.go | 13 +- .../client/cli/query_resource_metadata.go | 13 +- x/resource/client/cli/tx.go | 33 + x/resource/client/cli/tx_create_resource.go | 88 +- x/resource/types/query.pb.go | 238 +- x/resource/types/query.pb.gw.go | 18 + x/resource/types/resource.pb.go | 584 ++-- x/resource/types/tx.pb.go | 128 +- .../types/tx_msg_create_resource_payload.go | 1 + .../tx_msg_create_resource_payload_test.go | 2 +- 123 files changed, 4886 insertions(+), 4255 deletions(-) delete mode 100644 .github/linters/.openapirc.yml delete mode 100644 api/docs/config.json create mode 100644 api/docs/config.yaml delete mode 100644 x/did/utils/proto.go delete mode 100644 x/did/utils/proto_test.go diff --git a/.github/linters/.openapirc.yml b/.github/linters/.openapirc.yml deleted file mode 100644 index 7cf6bacbf..000000000 --- a/.github/linters/.openapirc.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- - -########################## -########################## -## OpenAPI Linter rules ## -########################## -########################## - -extends: spectral:oas -rules: - oas2-schema: warn \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1c1ed1b35..6b653d2ab 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -90,6 +90,7 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LOG_LEVEL: WARN + FILTER_REGEX_EXCLUDE: ".*api/docs/config.*" VALIDATE_ALL_CODEBASE: false MULTI_STATUS: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8338f0cba..e16abf4b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -112,7 +112,7 @@ jobs: working-directory: ./.. run: go install github.com/onsi/ginkgo/v2/ginkgo@latest - - name: Run Gingko integration tests + - name: Run Ginkgo integration tests working-directory: ./tests/integration run: | ginkgo -r --tags integration --race --randomize-suites --keep-going --trace --junit-report ../../report-integration.xml diff --git a/.gitignore b/.gitignore index 8027ac56b..08a3f7ab3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ dist/ **/network-config # Ignored files -api/docs/config.yaml + # Allowed files !api/docs/swagger-ui/**/swagger-initializer.js diff --git a/.goreleaser.yml b/.goreleaser.yml index d698093a1..1f4c673bc 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -95,7 +95,7 @@ release: name: cheqd-node draft: false - prerelease: true + prerelease: "true" mode: append header: | # Release Notes for {{.ProjectName}} v{{.Version}} diff --git a/api/cheqd/did/v2/diddoc.pulsar.go b/api/cheqd/did/v2/diddoc.pulsar.go index d130062ee..93fa9f8fa 100644 --- a/api/cheqd/did/v2/diddoc.pulsar.go +++ b/api/cheqd/did/v2/diddoc.pulsar.go @@ -4653,65 +4653,67 @@ var file_cheqd_did_v2_diddoc_proto_rawDesc = []byte{ 0x63, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, - 0xb3, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0xc7, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x18, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, - 0x12, 0x33, 0x0a, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x67, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xa1, - 0x01, 0x0a, 0x12, 0x44, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x07, 0x64, 0x69, 0x64, 0x5f, 0x64, 0x6f, 0x63, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, - 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x42, 0x0f, 0xea, 0xde, - 0x1f, 0x0b, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x64, - 0x69, 0x64, 0x44, 0x6f, 0x63, 0x12, 0x4b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, - 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, - 0x17, 0xea, 0xde, 0x1f, 0x13, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xaf, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, - 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x3e, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, - 0x1f, 0x01, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, - 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, - 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, - 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x42, 0xa5, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, - 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x42, 0x0b, 0x44, 0x69, 0x64, 0x64, 0x6f, - 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, - 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x69, 0x64, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, - 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x44, 0x69, 0x64, 0x2e, 0x56, - 0x32, 0xca, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, - 0xe2, 0x02, 0x18, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x43, 0x68, - 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x44, 0x69, 0x64, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xea, 0xde, 0x1f, 0x0e, 0x74, 0x79, + 0x70, 0x65, 0x2c, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x16, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x7b, 0x0a, 0x07, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xea, 0xde, 0x1f, 0x0e, + 0x74, 0x79, 0x70, 0x65, 0x2c, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x64, 0x44, 0x6f, + 0x63, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, + 0x07, 0x64, 0x69, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, + 0x64, 0x44, 0x6f, 0x63, 0x42, 0x0f, 0xea, 0xde, 0x1f, 0x0b, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x64, 0x69, 0x64, 0x44, 0x6f, 0x63, 0x12, 0x4b, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0xea, 0xde, 0x1f, 0x13, 0x64, 0x69, 0x64, + 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xaf, 0x02, 0x0a, 0x08, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x01, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0xa5, 0x01, 0x0a, + 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, + 0x32, 0x42, 0x0b, 0x44, 0x69, 0x64, 0x64, 0x6f, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x3b, 0x64, + 0x69, 0x64, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x2e, 0x44, 0x69, 0x64, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x43, 0x68, 0x65, 0x71, + 0x64, 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x43, 0x68, 0x65, 0x71, 0x64, + 0x5c, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x44, 0x69, 0x64, + 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/cheqd/resource/v2/query.pulsar.go b/api/cheqd/resource/v2/query.pulsar.go index ef911c495..6b20d56fc 100644 --- a/api/cheqd/resource/v2/query.pulsar.go +++ b/api/cheqd/resource/v2/query.pulsar.go @@ -4,6 +4,8 @@ package resourcev2 import ( fmt "fmt" runtime "github.com/cosmos/cosmos-proto/runtime" + v1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/base/query/v1beta1" + _ "github.com/cosmos/gogoproto/gogoproto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" @@ -1854,12 +1856,14 @@ func (x *fastReflection_QueryResourceMetadataResponse) ProtoMethods() *protoifac var ( md_QueryCollectionResourcesRequest protoreflect.MessageDescriptor fd_QueryCollectionResourcesRequest_collection_id protoreflect.FieldDescriptor + fd_QueryCollectionResourcesRequest_pagination protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_query_proto_init() md_QueryCollectionResourcesRequest = File_cheqd_resource_v2_query_proto.Messages().ByName("QueryCollectionResourcesRequest") fd_QueryCollectionResourcesRequest_collection_id = md_QueryCollectionResourcesRequest.Fields().ByName("collection_id") + fd_QueryCollectionResourcesRequest_pagination = md_QueryCollectionResourcesRequest.Fields().ByName("pagination") } var _ protoreflect.Message = (*fastReflection_QueryCollectionResourcesRequest)(nil) @@ -1933,6 +1937,12 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Range(f func(protorefle return } } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryCollectionResourcesRequest_pagination, value) { + return + } + } } // Has reports whether a field is populated. @@ -1950,6 +1960,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Has(fd protoreflect.Fie switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": return x.CollectionId != "" + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + return x.Pagination != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -1968,6 +1980,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Clear(fd protoreflect.F switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": x.CollectionId = "" + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + x.Pagination = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -1987,6 +2001,9 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Get(descriptor protoref case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": value := x.CollectionId return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2009,6 +2026,8 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Set(fd protoreflect.Fie switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": x.CollectionId = value.Interface().(string) + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageRequest) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2029,6 +2048,11 @@ func (x *fastReflection_QueryCollectionResourcesRequest) Set(fd protoreflect.Fie // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_QueryCollectionResourcesRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageRequest) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.QueryCollectionResourcesRequest is not mutable")) default: @@ -2046,6 +2070,9 @@ func (x *fastReflection_QueryCollectionResourcesRequest) NewField(fd protoreflec switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesRequest.collection_id": return protoreflect.ValueOfString("") + case "cheqd.resource.v2.QueryCollectionResourcesRequest.pagination": + m := new(v1beta1.PageRequest) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesRequest")) @@ -2119,6 +2146,10 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2148,6 +2179,20 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } if len(x.CollectionId) > 0 { i -= len(x.CollectionId) copy(dAtA[i:], x.CollectionId) @@ -2236,6 +2281,42 @@ func (x *fastReflection_QueryCollectionResourcesRequest) ProtoMethods() *protoif } x.CollectionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageRequest{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -2323,14 +2404,16 @@ func (x *_QueryCollectionResourcesResponse_1_list) IsValid() bool { } var ( - md_QueryCollectionResourcesResponse protoreflect.MessageDescriptor - fd_QueryCollectionResourcesResponse_resources protoreflect.FieldDescriptor + md_QueryCollectionResourcesResponse protoreflect.MessageDescriptor + fd_QueryCollectionResourcesResponse_resources protoreflect.FieldDescriptor + fd_QueryCollectionResourcesResponse_pagination protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_query_proto_init() md_QueryCollectionResourcesResponse = File_cheqd_resource_v2_query_proto.Messages().ByName("QueryCollectionResourcesResponse") fd_QueryCollectionResourcesResponse_resources = md_QueryCollectionResourcesResponse.Fields().ByName("resources") + fd_QueryCollectionResourcesResponse_pagination = md_QueryCollectionResourcesResponse.Fields().ByName("pagination") } var _ protoreflect.Message = (*fastReflection_QueryCollectionResourcesResponse)(nil) @@ -2404,6 +2487,12 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Range(f func(protorefl return } } + if x.Pagination != nil { + value := protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) + if !f(fd_QueryCollectionResourcesResponse_pagination, value) { + return + } + } } // Has reports whether a field is populated. @@ -2421,6 +2510,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Has(fd protoreflect.Fi switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": return len(x.Resources) != 0 + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + return x.Pagination != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2439,6 +2530,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Clear(fd protoreflect. switch fd.FullName() { case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": x.Resources = nil + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + x.Pagination = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2461,6 +2554,9 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Get(descriptor protore } listValue := &_QueryCollectionResourcesResponse_1_list{list: &x.Resources} return protoreflect.ValueOfList(listValue) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + value := x.Pagination + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2485,6 +2581,8 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Set(fd protoreflect.Fi lv := value.List() clv := lv.(*_QueryCollectionResourcesResponse_1_list) x.Resources = *clv.list + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + x.Pagination = value.Message().Interface().(*v1beta1.PageResponse) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2511,6 +2609,11 @@ func (x *fastReflection_QueryCollectionResourcesResponse) Mutable(fd protoreflec } value := &_QueryCollectionResourcesResponse_1_list{list: &x.Resources} return protoreflect.ValueOfList(value) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + if x.Pagination == nil { + x.Pagination = new(v1beta1.PageResponse) + } + return protoreflect.ValueOfMessage(x.Pagination.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2527,6 +2630,9 @@ func (x *fastReflection_QueryCollectionResourcesResponse) NewField(fd protorefle case "cheqd.resource.v2.QueryCollectionResourcesResponse.resources": list := []*Metadata{} return protoreflect.ValueOfList(&_QueryCollectionResourcesResponse_1_list{list: &list}) + case "cheqd.resource.v2.QueryCollectionResourcesResponse.pagination": + m := new(v1beta1.PageResponse) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.QueryCollectionResourcesResponse")) @@ -2602,6 +2708,10 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi n += 1 + l + runtime.Sov(uint64(l)) } } + if x.Pagination != nil { + l = options.Size(x.Pagination) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -2631,6 +2741,20 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.Pagination != nil { + encoded, err := options.Marshal(x.Pagination) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } if len(x.Resources) > 0 { for iNdEx := len(x.Resources) - 1; iNdEx >= 0; iNdEx-- { encoded, err := options.Marshal(x.Resources[iNdEx]) @@ -2730,6 +2854,42 @@ func (x *fastReflection_QueryCollectionResourcesResponse) ProtoMethods() *protoi return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Pagination == nil { + x.Pagination = &v1beta1.PageResponse{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Pagination); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -2778,14 +2938,21 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// QueryResourceRequest is the request type for the Query/Resource RPC method type QueryResourceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -2823,11 +2990,15 @@ func (x *QueryResourceRequest) GetId() string { return "" } +// QueryResourceResponse is the response type for the Query/Resource RPC method type QueryResourceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Successful resolution of the resource returns the following: + // - resource is the requested resource + // - metadata is the resource metadata associated with the requested resource Resource *ResourceWithMetadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2858,14 +3029,21 @@ func (x *QueryResourceResponse) GetResource() *ResourceWithMetadata { return nil } +// QueryResourceMetadataRequest is the request type for the Query/ResourceMetadata RPC method type QueryResourceMetadataRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -2903,11 +3081,13 @@ func (x *QueryResourceMetadataRequest) GetId() string { return "" } +// QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method type QueryResourceMetadataResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // resource is the requested resource metadata Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2938,13 +3118,21 @@ func (x *QueryResourceMetadataResponse) GetResource() *Metadata { return nil } +// QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method type QueryCollectionResourcesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *v1beta1.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *QueryCollectionResourcesRequest) Reset() { @@ -2974,12 +3162,23 @@ func (x *QueryCollectionResourcesRequest) GetCollectionId() string { return "" } +func (x *QueryCollectionResourcesRequest) GetPagination() *v1beta1.PageRequest { + if x != nil { + return x.Pagination + } + return nil +} + +// QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method type QueryCollectionResourcesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // resources is the requested collection of resource metadata Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + // pagination defines the pagination in the response. + Pagination *v1beta1.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *QueryCollectionResourcesResponse) Reset() { @@ -3009,6 +3208,13 @@ func (x *QueryCollectionResourcesResponse) GetResources() []*Metadata { return nil } +func (x *QueryCollectionResourcesResponse) GetPagination() *v1beta1.PageResponse { + if x != nil { + return x.Pagination + } + return nil +} + var File_cheqd_resource_v2_query_proto protoreflect.FileDescriptor var file_cheqd_resource_v2_query_proto_rawDesc = []byte{ @@ -3017,87 +3223,104 @@ var file_cheqd_resource_v2_query_proto_rawDesc = []byte{ 0x11, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x1a, 0x20, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x5c, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x65, - 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x53, 0x0a, - 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x58, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x46, 0x0a, 0x1f, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x61, 0x73, + 0x65, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x5c, 0x0a, 0x15, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, + 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x53, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, - 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x32, 0x94, 0x04, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, 0x01, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x65, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x74, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x1f, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc2, 0x01, 0x0a, 0x20, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x55, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x32, 0x94, 0x04, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x98, 0x01, 0x0a, 0x08, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x33, 0x12, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb9, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x68, + 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb9, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x2e, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, - 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, - 0x32, 0x2f, 0x7b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xc7, 0x01, 0x0a, 0x15, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, - 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, - 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, - 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, - 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x7b, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0xc7, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, + 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, + 0x32, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, + 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, + 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, + 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, + 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3122,22 +3345,26 @@ var file_cheqd_resource_v2_query_proto_goTypes = []interface{}{ (*QueryCollectionResourcesResponse)(nil), // 5: cheqd.resource.v2.QueryCollectionResourcesResponse (*ResourceWithMetadata)(nil), // 6: cheqd.resource.v2.ResourceWithMetadata (*Metadata)(nil), // 7: cheqd.resource.v2.Metadata + (*v1beta1.PageRequest)(nil), // 8: cosmos.base.query.v1beta1.PageRequest + (*v1beta1.PageResponse)(nil), // 9: cosmos.base.query.v1beta1.PageResponse } var file_cheqd_resource_v2_query_proto_depIdxs = []int32{ 6, // 0: cheqd.resource.v2.QueryResourceResponse.resource:type_name -> cheqd.resource.v2.ResourceWithMetadata 7, // 1: cheqd.resource.v2.QueryResourceMetadataResponse.resource:type_name -> cheqd.resource.v2.Metadata - 7, // 2: cheqd.resource.v2.QueryCollectionResourcesResponse.resources:type_name -> cheqd.resource.v2.Metadata - 0, // 3: cheqd.resource.v2.Query.Resource:input_type -> cheqd.resource.v2.QueryResourceRequest - 2, // 4: cheqd.resource.v2.Query.ResourceMetadata:input_type -> cheqd.resource.v2.QueryResourceMetadataRequest - 4, // 5: cheqd.resource.v2.Query.CollectionResources:input_type -> cheqd.resource.v2.QueryCollectionResourcesRequest - 1, // 6: cheqd.resource.v2.Query.Resource:output_type -> cheqd.resource.v2.QueryResourceResponse - 3, // 7: cheqd.resource.v2.Query.ResourceMetadata:output_type -> cheqd.resource.v2.QueryResourceMetadataResponse - 5, // 8: cheqd.resource.v2.Query.CollectionResources:output_type -> cheqd.resource.v2.QueryCollectionResourcesResponse - 6, // [6:9] is the sub-list for method output_type - 3, // [3:6] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 8, // 2: cheqd.resource.v2.QueryCollectionResourcesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest + 7, // 3: cheqd.resource.v2.QueryCollectionResourcesResponse.resources:type_name -> cheqd.resource.v2.Metadata + 9, // 4: cheqd.resource.v2.QueryCollectionResourcesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse + 0, // 5: cheqd.resource.v2.Query.Resource:input_type -> cheqd.resource.v2.QueryResourceRequest + 2, // 6: cheqd.resource.v2.Query.ResourceMetadata:input_type -> cheqd.resource.v2.QueryResourceMetadataRequest + 4, // 7: cheqd.resource.v2.Query.CollectionResources:input_type -> cheqd.resource.v2.QueryCollectionResourcesRequest + 1, // 8: cheqd.resource.v2.Query.Resource:output_type -> cheqd.resource.v2.QueryResourceResponse + 3, // 9: cheqd.resource.v2.Query.ResourceMetadata:output_type -> cheqd.resource.v2.QueryResourceMetadataResponse + 5, // 10: cheqd.resource.v2.Query.CollectionResources:output_type -> cheqd.resource.v2.QueryCollectionResourcesResponse + 8, // [8:11] is the sub-list for method output_type + 5, // [5:8] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_cheqd_resource_v2_query_proto_init() } diff --git a/api/cheqd/resource/v2/query_grpc.pb.go b/api/cheqd/resource/v2/query_grpc.pb.go index b7372b28b..21d82620f 100644 --- a/api/cheqd/resource/v2/query_grpc.pb.go +++ b/api/cheqd/resource/v2/query_grpc.pb.go @@ -22,8 +22,11 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type QueryClient interface { + // Fetch data/payload for a specific resource (without metadata) Resource(ctx context.Context, in *QueryResourceRequest, opts ...grpc.CallOption) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(ctx context.Context, in *QueryResourceMetadataRequest, opts ...grpc.CallOption) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(ctx context.Context, in *QueryCollectionResourcesRequest, opts ...grpc.CallOption) (*QueryCollectionResourcesResponse, error) } @@ -66,8 +69,11 @@ func (c *queryClient) CollectionResources(ctx context.Context, in *QueryCollecti // All implementations must embed UnimplementedQueryServer // for forward compatibility type QueryServer interface { + // Fetch data/payload for a specific resource (without metadata) Resource(context.Context, *QueryResourceRequest) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(context.Context, *QueryResourceMetadataRequest) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(context.Context, *QueryCollectionResourcesRequest) (*QueryCollectionResourcesResponse, error) mustEmbedUnimplementedQueryServer() } diff --git a/api/cheqd/resource/v2/resource.pulsar.go b/api/cheqd/resource/v2/resource.pulsar.go index 771880c6e..f49d8e339 100644 --- a/api/cheqd/resource/v2/resource.pulsar.go +++ b/api/cheqd/resource/v2/resource.pulsar.go @@ -15,27 +15,25 @@ import ( ) var ( - md_ResourceWithMetadata protoreflect.MessageDescriptor - fd_ResourceWithMetadata_resource protoreflect.FieldDescriptor - fd_ResourceWithMetadata_metadata protoreflect.FieldDescriptor + md_Resource protoreflect.MessageDescriptor + fd_Resource_data protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_ResourceWithMetadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("ResourceWithMetadata") - fd_ResourceWithMetadata_resource = md_ResourceWithMetadata.Fields().ByName("resource") - fd_ResourceWithMetadata_metadata = md_ResourceWithMetadata.Fields().ByName("metadata") + md_Resource = File_cheqd_resource_v2_resource_proto.Messages().ByName("Resource") + fd_Resource_data = md_Resource.Fields().ByName("data") } -var _ protoreflect.Message = (*fastReflection_ResourceWithMetadata)(nil) +var _ protoreflect.Message = (*fastReflection_Resource)(nil) -type fastReflection_ResourceWithMetadata ResourceWithMetadata +type fastReflection_Resource Resource -func (x *ResourceWithMetadata) ProtoReflect() protoreflect.Message { - return (*fastReflection_ResourceWithMetadata)(x) +func (x *Resource) ProtoReflect() protoreflect.Message { + return (*fastReflection_Resource)(x) } -func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { +func (x *Resource) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -47,43 +45,43 @@ func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_ResourceWithMetadata_messageType fastReflection_ResourceWithMetadata_messageType -var _ protoreflect.MessageType = fastReflection_ResourceWithMetadata_messageType{} +var _fastReflection_Resource_messageType fastReflection_Resource_messageType +var _ protoreflect.MessageType = fastReflection_Resource_messageType{} -type fastReflection_ResourceWithMetadata_messageType struct{} +type fastReflection_Resource_messageType struct{} -func (x fastReflection_ResourceWithMetadata_messageType) Zero() protoreflect.Message { - return (*fastReflection_ResourceWithMetadata)(nil) +func (x fastReflection_Resource_messageType) Zero() protoreflect.Message { + return (*fastReflection_Resource)(nil) } -func (x fastReflection_ResourceWithMetadata_messageType) New() protoreflect.Message { - return new(fastReflection_ResourceWithMetadata) +func (x fastReflection_Resource_messageType) New() protoreflect.Message { + return new(fastReflection_Resource) } -func (x fastReflection_ResourceWithMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_ResourceWithMetadata +func (x fastReflection_Resource_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Resource } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_ResourceWithMetadata) Descriptor() protoreflect.MessageDescriptor { - return md_ResourceWithMetadata +func (x *fastReflection_Resource) Descriptor() protoreflect.MessageDescriptor { + return md_Resource } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_ResourceWithMetadata) Type() protoreflect.MessageType { - return _fastReflection_ResourceWithMetadata_messageType +func (x *fastReflection_Resource) Type() protoreflect.MessageType { + return _fastReflection_Resource_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_ResourceWithMetadata) New() protoreflect.Message { - return new(fastReflection_ResourceWithMetadata) +func (x *fastReflection_Resource) New() protoreflect.Message { + return new(fastReflection_Resource) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMessage { - return (*ResourceWithMetadata)(x) +func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { + return (*Resource)(x) } // Range iterates over every populated field in an undefined order, @@ -91,16 +89,10 @@ func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMess // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Resource != nil { - value := protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) - if !f(fd_ResourceWithMetadata_resource, value) { - return - } - } - if x.Metadata != nil { - value := protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) - if !f(fd_ResourceWithMetadata_metadata, value) { +func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if len(x.Data) != 0 { + value := protoreflect.ValueOfBytes(x.Data) + if !f(fd_Resource_data, value) { return } } @@ -117,17 +109,15 @@ func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDes // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - return x.Resource != nil - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - return x.Metadata != nil + case "cheqd.resource.v2.Resource.data": + return len(x.Data) != 0 default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -137,17 +127,15 @@ func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescripto // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_Resource) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - x.Resource = nil - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - x.Metadata = nil + case "cheqd.resource.v2.Resource.data": + x.Data = nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -157,19 +145,16 @@ func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescrip // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - value := x.Resource - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - value := x.Metadata - return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + value := x.Data + return protoreflect.ValueOfBytes(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", descriptor.FullName())) } } @@ -183,17 +168,15 @@ func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldD // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - x.Resource = value.Message().Interface().(*Resource) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - x.Metadata = value.Message().Interface().(*Metadata) + case "cheqd.resource.v2.Resource.data": + x.Data = value.Bytes() default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } @@ -207,52 +190,40 @@ func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescripto // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - if x.Resource == nil { - x.Resource = new(Resource) - } - return protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - if x.Metadata == nil { - x.Metadata = new(Metadata) - } - return protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + panic(fmt.Errorf("field data of message cheqd.resource.v2.Resource is not mutable")) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_ResourceWithMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Resource) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.ResourceWithMetadata.resource": - m := new(Resource) - return protoreflect.ValueOfMessage(m.ProtoReflect()) - case "cheqd.resource.v2.ResourceWithMetadata.metadata": - m := new(Metadata) - return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.Resource.data": + return protoreflect.ValueOfBytes(nil) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) } - panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.ResourceWithMetadata", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Resource", d.FullName())) } panic("unreachable") } @@ -260,7 +231,7 @@ func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDes // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -271,7 +242,7 @@ func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawField // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -283,7 +254,7 @@ func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.Raw // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_ResourceWithMetadata) IsValid() bool { +func (x *fastReflection_Resource) IsValid() bool { return x != nil } @@ -293,9 +264,9 @@ func (x *fastReflection_ResourceWithMetadata) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -307,12 +278,8 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods var n int var l int _ = l - if x.Resource != nil { - l = options.Size(x.Resource) - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.Metadata != nil { - l = options.Size(x.Metadata) + l = len(x.Data) + if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } if x.unknownFields != nil { @@ -325,7 +292,7 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -344,31 +311,10 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.Metadata != nil { - encoded, err := options.Marshal(x.Metadata) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x12 - } - if x.Resource != nil { - encoded, err := options.Marshal(x.Resource) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + if len(x.Data) > 0 { + i -= len(x.Data) + copy(dAtA[i:], x.Data) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Data))) i-- dAtA[i] = 0xa } @@ -383,7 +329,7 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*ResourceWithMetadata) + x := input.Message.Interface().(*Resource) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -415,17 +361,17 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) } - var msglen int + var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -435,71 +381,33 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + if byteLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + byteLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if x.Resource == nil { - x.Resource = &Resource{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Resource); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + x.Data = append(x.Data[:0], dAtA[iNdEx:postIndex]...) + if x.Data == nil { + x.Data = []byte{} } iNdEx = postIndex - case 2: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err } - if msglen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - if x.Metadata == nil { - x.Metadata = &Metadata{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Metadata); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := runtime.Skip(dAtA[iNdEx:]) - if err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if (iNdEx + skippy) > l { @@ -528,26 +436,97 @@ func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods } } +var _ protoreflect.List = (*_Metadata_6_list)(nil) + +type _Metadata_6_list struct { + list *[]*AlternativeUri +} + +func (x *_Metadata_6_list) Len() int { + if x.list == nil { + return 0 + } + return len(*x.list) +} + +func (x *_Metadata_6_list) Get(i int) protoreflect.Value { + return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) +} + +func (x *_Metadata_6_list) Set(i int, value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AlternativeUri) + (*x.list)[i] = concreteValue +} + +func (x *_Metadata_6_list) Append(value protoreflect.Value) { + valueUnwrapped := value.Message() + concreteValue := valueUnwrapped.Interface().(*AlternativeUri) + *x.list = append(*x.list, concreteValue) +} + +func (x *_Metadata_6_list) AppendMutable() protoreflect.Value { + v := new(AlternativeUri) + *x.list = append(*x.list, v) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Metadata_6_list) Truncate(n int) { + for i := n; i < len(*x.list); i++ { + (*x.list)[i] = nil + } + *x.list = (*x.list)[:n] +} + +func (x *_Metadata_6_list) NewElement() protoreflect.Value { + v := new(AlternativeUri) + return protoreflect.ValueOfMessage(v.ProtoReflect()) +} + +func (x *_Metadata_6_list) IsValid() bool { + return x.list != nil +} + var ( - md_Resource protoreflect.MessageDescriptor - fd_Resource_data protoreflect.FieldDescriptor + md_Metadata protoreflect.MessageDescriptor + fd_Metadata_collection_id protoreflect.FieldDescriptor + fd_Metadata_id protoreflect.FieldDescriptor + fd_Metadata_name protoreflect.FieldDescriptor + fd_Metadata_version protoreflect.FieldDescriptor + fd_Metadata_resource_type protoreflect.FieldDescriptor + fd_Metadata_also_known_as protoreflect.FieldDescriptor + fd_Metadata_media_type protoreflect.FieldDescriptor + fd_Metadata_created protoreflect.FieldDescriptor + fd_Metadata_checksum protoreflect.FieldDescriptor + fd_Metadata_previous_version_id protoreflect.FieldDescriptor + fd_Metadata_next_version_id protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_Resource = File_cheqd_resource_v2_resource_proto.Messages().ByName("Resource") - fd_Resource_data = md_Resource.Fields().ByName("data") + md_Metadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("Metadata") + fd_Metadata_collection_id = md_Metadata.Fields().ByName("collection_id") + fd_Metadata_id = md_Metadata.Fields().ByName("id") + fd_Metadata_name = md_Metadata.Fields().ByName("name") + fd_Metadata_version = md_Metadata.Fields().ByName("version") + fd_Metadata_resource_type = md_Metadata.Fields().ByName("resource_type") + fd_Metadata_also_known_as = md_Metadata.Fields().ByName("also_known_as") + fd_Metadata_media_type = md_Metadata.Fields().ByName("media_type") + fd_Metadata_created = md_Metadata.Fields().ByName("created") + fd_Metadata_checksum = md_Metadata.Fields().ByName("checksum") + fd_Metadata_previous_version_id = md_Metadata.Fields().ByName("previous_version_id") + fd_Metadata_next_version_id = md_Metadata.Fields().ByName("next_version_id") } -var _ protoreflect.Message = (*fastReflection_Resource)(nil) +var _ protoreflect.Message = (*fastReflection_Metadata)(nil) -type fastReflection_Resource Resource +type fastReflection_Metadata Metadata -func (x *Resource) ProtoReflect() protoreflect.Message { - return (*fastReflection_Resource)(x) +func (x *Metadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_Metadata)(x) } -func (x *Resource) slowProtoReflect() protoreflect.Message { +func (x *Metadata) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -559,43 +538,43 @@ func (x *Resource) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_Resource_messageType fastReflection_Resource_messageType -var _ protoreflect.MessageType = fastReflection_Resource_messageType{} +var _fastReflection_Metadata_messageType fastReflection_Metadata_messageType +var _ protoreflect.MessageType = fastReflection_Metadata_messageType{} -type fastReflection_Resource_messageType struct{} +type fastReflection_Metadata_messageType struct{} -func (x fastReflection_Resource_messageType) Zero() protoreflect.Message { - return (*fastReflection_Resource)(nil) +func (x fastReflection_Metadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_Metadata)(nil) } -func (x fastReflection_Resource_messageType) New() protoreflect.Message { - return new(fastReflection_Resource) +func (x fastReflection_Metadata_messageType) New() protoreflect.Message { + return new(fastReflection_Metadata) } -func (x fastReflection_Resource_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_Resource +func (x fastReflection_Metadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_Metadata } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_Resource) Descriptor() protoreflect.MessageDescriptor { - return md_Resource +func (x *fastReflection_Metadata) Descriptor() protoreflect.MessageDescriptor { + return md_Metadata } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_Resource) Type() protoreflect.MessageType { - return _fastReflection_Resource_messageType +func (x *fastReflection_Metadata) Type() protoreflect.MessageType { + return _fastReflection_Metadata_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_Resource) New() protoreflect.Message { - return new(fastReflection_Resource) +func (x *fastReflection_Metadata) New() protoreflect.Message { + return new(fastReflection_Metadata) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { - return (*Resource)(x) +func (x *fastReflection_Metadata) Interface() protoreflect.ProtoMessage { + return (*Metadata)(x) } // Range iterates over every populated field in an undefined order, @@ -603,10 +582,70 @@ func (x *fastReflection_Resource) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if len(x.Data) != 0 { - value := protoreflect.ValueOfBytes(x.Data) - if !f(fd_Resource_data, value) { +func (x *fastReflection_Metadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.CollectionId != "" { + value := protoreflect.ValueOfString(x.CollectionId) + if !f(fd_Metadata_collection_id, value) { + return + } + } + if x.Id != "" { + value := protoreflect.ValueOfString(x.Id) + if !f(fd_Metadata_id, value) { + return + } + } + if x.Name != "" { + value := protoreflect.ValueOfString(x.Name) + if !f(fd_Metadata_name, value) { + return + } + } + if x.Version != "" { + value := protoreflect.ValueOfString(x.Version) + if !f(fd_Metadata_version, value) { + return + } + } + if x.ResourceType != "" { + value := protoreflect.ValueOfString(x.ResourceType) + if !f(fd_Metadata_resource_type, value) { + return + } + } + if len(x.AlsoKnownAs) != 0 { + value := protoreflect.ValueOfList(&_Metadata_6_list{list: &x.AlsoKnownAs}) + if !f(fd_Metadata_also_known_as, value) { + return + } + } + if x.MediaType != "" { + value := protoreflect.ValueOfString(x.MediaType) + if !f(fd_Metadata_media_type, value) { + return + } + } + if x.Created != nil { + value := protoreflect.ValueOfMessage(x.Created.ProtoReflect()) + if !f(fd_Metadata_created, value) { + return + } + } + if x.Checksum != "" { + value := protoreflect.ValueOfString(x.Checksum) + if !f(fd_Metadata_checksum, value) { + return + } + } + if x.PreviousVersionId != "" { + value := protoreflect.ValueOfString(x.PreviousVersionId) + if !f(fd_Metadata_previous_version_id, value) { + return + } + } + if x.NextVersionId != "" { + value := protoreflect.ValueOfString(x.NextVersionId) + if !f(fd_Metadata_next_version_id, value) { return } } @@ -623,15 +662,35 @@ func (x *fastReflection_Resource) Range(f func(protoreflect.FieldDescriptor, pro // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_Metadata) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - return len(x.Data) != 0 + case "cheqd.resource.v2.Metadata.collection_id": + return x.CollectionId != "" + case "cheqd.resource.v2.Metadata.id": + return x.Id != "" + case "cheqd.resource.v2.Metadata.name": + return x.Name != "" + case "cheqd.resource.v2.Metadata.version": + return x.Version != "" + case "cheqd.resource.v2.Metadata.resource_type": + return x.ResourceType != "" + case "cheqd.resource.v2.Metadata.also_known_as": + return len(x.AlsoKnownAs) != 0 + case "cheqd.resource.v2.Metadata.media_type": + return x.MediaType != "" + case "cheqd.resource.v2.Metadata.created": + return x.Created != nil + case "cheqd.resource.v2.Metadata.checksum": + return x.Checksum != "" + case "cheqd.resource.v2.Metadata.previous_version_id": + return x.PreviousVersionId != "" + case "cheqd.resource.v2.Metadata.next_version_id": + return x.NextVersionId != "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } @@ -641,34 +700,87 @@ func (x *fastReflection_Resource) Has(fd protoreflect.FieldDescriptor) bool { // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_Metadata) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - x.Data = nil - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) - } -} - -// Get retrieves the value for a field. -// -// For unpopulated scalars, it returns the default value, where + case "cheqd.resource.v2.Metadata.collection_id": + x.CollectionId = "" + case "cheqd.resource.v2.Metadata.id": + x.Id = "" + case "cheqd.resource.v2.Metadata.name": + x.Name = "" + case "cheqd.resource.v2.Metadata.version": + x.Version = "" + case "cheqd.resource.v2.Metadata.resource_type": + x.ResourceType = "" + case "cheqd.resource.v2.Metadata.also_known_as": + x.AlsoKnownAs = nil + case "cheqd.resource.v2.Metadata.media_type": + x.MediaType = "" + case "cheqd.resource.v2.Metadata.created": + x.Created = nil + case "cheqd.resource.v2.Metadata.checksum": + x.Checksum = "" + case "cheqd.resource.v2.Metadata.previous_version_id": + x.PreviousVersionId = "" + case "cheqd.resource.v2.Metadata.next_version_id": + x.NextVersionId = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) + } + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.Resource.data": - value := x.Data - return protoreflect.ValueOfBytes(value) + case "cheqd.resource.v2.Metadata.collection_id": + value := x.CollectionId + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.id": + value := x.Id + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.name": + value := x.Name + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.version": + value := x.Version + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.resource_type": + value := x.ResourceType + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.also_known_as": + if len(x.AlsoKnownAs) == 0 { + return protoreflect.ValueOfList(&_Metadata_6_list{}) + } + listValue := &_Metadata_6_list{list: &x.AlsoKnownAs} + return protoreflect.ValueOfList(listValue) + case "cheqd.resource.v2.Metadata.media_type": + value := x.MediaType + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.created": + value := x.Created + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.Metadata.checksum": + value := x.Checksum + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.previous_version_id": + value := x.PreviousVersionId + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.Metadata.next_version_id": + value := x.NextVersionId + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", descriptor.FullName())) } } @@ -682,15 +794,37 @@ func (x *fastReflection_Resource) Get(descriptor protoreflect.FieldDescriptor) p // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_Metadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - x.Data = value.Bytes() + case "cheqd.resource.v2.Metadata.collection_id": + x.CollectionId = value.Interface().(string) + case "cheqd.resource.v2.Metadata.id": + x.Id = value.Interface().(string) + case "cheqd.resource.v2.Metadata.name": + x.Name = value.Interface().(string) + case "cheqd.resource.v2.Metadata.version": + x.Version = value.Interface().(string) + case "cheqd.resource.v2.Metadata.resource_type": + x.ResourceType = value.Interface().(string) + case "cheqd.resource.v2.Metadata.also_known_as": + lv := value.List() + clv := lv.(*_Metadata_6_list) + x.AlsoKnownAs = *clv.list + case "cheqd.resource.v2.Metadata.media_type": + x.MediaType = value.Interface().(string) + case "cheqd.resource.v2.Metadata.created": + x.Created = value.Message().Interface().(*timestamppb.Timestamp) + case "cheqd.resource.v2.Metadata.checksum": + x.Checksum = value.Interface().(string) + case "cheqd.resource.v2.Metadata.previous_version_id": + x.PreviousVersionId = value.Interface().(string) + case "cheqd.resource.v2.Metadata.next_version_id": + x.NextVersionId = value.Interface().(string) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } @@ -704,40 +838,89 @@ func (x *fastReflection_Resource) Set(fd protoreflect.FieldDescriptor, value pro // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - panic(fmt.Errorf("field data of message cheqd.resource.v2.Resource is not mutable")) + case "cheqd.resource.v2.Metadata.also_known_as": + if x.AlsoKnownAs == nil { + x.AlsoKnownAs = []*AlternativeUri{} + } + value := &_Metadata_6_list{list: &x.AlsoKnownAs} + return protoreflect.ValueOfList(value) + case "cheqd.resource.v2.Metadata.created": + if x.Created == nil { + x.Created = new(timestamppb.Timestamp) + } + return protoreflect.ValueOfMessage(x.Created.ProtoReflect()) + case "cheqd.resource.v2.Metadata.collection_id": + panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.id": + panic(fmt.Errorf("field id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.name": + panic(fmt.Errorf("field name of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.version": + panic(fmt.Errorf("field version of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.resource_type": + panic(fmt.Errorf("field resource_type of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.media_type": + panic(fmt.Errorf("field media_type of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.checksum": + panic(fmt.Errorf("field checksum of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.previous_version_id": + panic(fmt.Errorf("field previous_version_id of message cheqd.resource.v2.Metadata is not mutable")) + case "cheqd.resource.v2.Metadata.next_version_id": + panic(fmt.Errorf("field next_version_id of message cheqd.resource.v2.Metadata is not mutable")) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_Resource) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_Metadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.Resource.data": - return protoreflect.ValueOfBytes(nil) + case "cheqd.resource.v2.Metadata.collection_id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.name": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.version": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.resource_type": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.also_known_as": + list := []*AlternativeUri{} + return protoreflect.ValueOfList(&_Metadata_6_list{list: &list}) + case "cheqd.resource.v2.Metadata.media_type": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.created": + m := new(timestamppb.Timestamp) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.Metadata.checksum": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.previous_version_id": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.Metadata.next_version_id": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Resource")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.Resource does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_Metadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Resource", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Metadata", d.FullName())) } panic("unreachable") } @@ -745,7 +928,7 @@ func (x *fastReflection_Resource) WhichOneof(d protoreflect.OneofDescriptor) pro // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_Metadata) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -756,7 +939,7 @@ func (x *fastReflection_Resource) GetUnknown() protoreflect.RawFields { // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_Metadata) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -768,7 +951,7 @@ func (x *fastReflection_Resource) SetUnknown(fields protoreflect.RawFields) { // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_Resource) IsValid() bool { +func (x *fastReflection_Metadata) IsValid() bool { return x != nil } @@ -778,9 +961,9 @@ func (x *fastReflection_Resource) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -792,7 +975,49 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { var n int var l int _ = l - l = len(x.Data) + l = len(x.CollectionId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Id) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Name) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Version) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ResourceType) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if len(x.AlsoKnownAs) > 0 { + for _, e := range x.AlsoKnownAs { + l = options.Size(e) + n += 1 + l + runtime.Sov(uint64(l)) + } + } + l = len(x.MediaType) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.Created != nil { + l = options.Size(x.Created) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Checksum) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PreviousVersionId) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NextVersionId) if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } @@ -806,7 +1031,7 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -825,25 +1050,111 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.Data) > 0 { - i -= len(x.Data) - copy(dAtA[i:], x.Data) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Data))) + if len(x.NextVersionId) > 0 { + i -= len(x.NextVersionId) + copy(dAtA[i:], x.NextVersionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NextVersionId))) i-- - dAtA[i] = 0xa - } - if input.Buf != nil { - input.Buf = append(input.Buf, dAtA...) - } else { - input.Buf = dAtA + dAtA[i] = 0x5a } - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, + if len(x.PreviousVersionId) > 0 { + i -= len(x.PreviousVersionId) + copy(dAtA[i:], x.PreviousVersionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousVersionId))) + i-- + dAtA[i] = 0x52 + } + if len(x.Checksum) > 0 { + i -= len(x.Checksum) + copy(dAtA[i:], x.Checksum) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Checksum))) + i-- + dAtA[i] = 0x4a + } + if x.Created != nil { + encoded, err := options.Marshal(x.Created) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + if len(x.MediaType) > 0 { + i -= len(x.MediaType) + copy(dAtA[i:], x.MediaType) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MediaType))) + i-- + dAtA[i] = 0x3a + } + if len(x.AlsoKnownAs) > 0 { + for iNdEx := len(x.AlsoKnownAs) - 1; iNdEx >= 0; iNdEx-- { + encoded, err := options.Marshal(x.AlsoKnownAs[iNdEx]) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x32 + } + } + if len(x.ResourceType) > 0 { + i -= len(x.ResourceType) + copy(dAtA[i:], x.ResourceType) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ResourceType))) + i-- + dAtA[i] = 0x2a + } + if len(x.Version) > 0 { + i -= len(x.Version) + copy(dAtA[i:], x.Version) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Version))) + i-- + dAtA[i] = 0x22 + } + if len(x.Name) > 0 { + i -= len(x.Name) + copy(dAtA[i:], x.Name) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) + i-- + dAtA[i] = 0x1a + } + if len(x.Id) > 0 { + i -= len(x.Id) + copy(dAtA[i:], x.Id) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id))) + i-- + dAtA[i] = 0x12 + } + if len(x.CollectionId) > 0 { + i -= len(x.CollectionId) + copy(dAtA[i:], x.CollectionId) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CollectionId))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, Buf: input.Buf, }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*Resource) + x := input.Message.Interface().(*Metadata) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -875,17 +1186,17 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Resource: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CollectionId", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -895,820 +1206,91 @@ func (x *fastReflection_Resource) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Data = append(x.Data[:0], dAtA[iNdEx:postIndex]...) - if x.Data == nil { - x.Data = []byte{} + x.CollectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } + x.Id = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := runtime.Skip(dAtA[iNdEx:]) - if err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if !options.DiscardUnknown { - x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) - } - iNdEx += skippy - } - } - - if iNdEx > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil - } - return &protoiface.Methods{ - NoUnkeyedLiterals: struct{}{}, - Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, - Size: size, - Marshal: marshal, - Unmarshal: unmarshal, - Merge: nil, - CheckInitialized: nil, - } -} - -var _ protoreflect.List = (*_Metadata_6_list)(nil) - -type _Metadata_6_list struct { - list *[]*AlternativeUri -} - -func (x *_Metadata_6_list) Len() int { - if x.list == nil { - return 0 - } - return len(*x.list) -} - -func (x *_Metadata_6_list) Get(i int) protoreflect.Value { - return protoreflect.ValueOfMessage((*x.list)[i].ProtoReflect()) -} - -func (x *_Metadata_6_list) Set(i int, value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*AlternativeUri) - (*x.list)[i] = concreteValue -} - -func (x *_Metadata_6_list) Append(value protoreflect.Value) { - valueUnwrapped := value.Message() - concreteValue := valueUnwrapped.Interface().(*AlternativeUri) - *x.list = append(*x.list, concreteValue) -} - -func (x *_Metadata_6_list) AppendMutable() protoreflect.Value { - v := new(AlternativeUri) - *x.list = append(*x.list, v) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Metadata_6_list) Truncate(n int) { - for i := n; i < len(*x.list); i++ { - (*x.list)[i] = nil - } - *x.list = (*x.list)[:n] -} - -func (x *_Metadata_6_list) NewElement() protoreflect.Value { - v := new(AlternativeUri) - return protoreflect.ValueOfMessage(v.ProtoReflect()) -} - -func (x *_Metadata_6_list) IsValid() bool { - return x.list != nil -} - -var ( - md_Metadata protoreflect.MessageDescriptor - fd_Metadata_collection_id protoreflect.FieldDescriptor - fd_Metadata_id protoreflect.FieldDescriptor - fd_Metadata_name protoreflect.FieldDescriptor - fd_Metadata_version protoreflect.FieldDescriptor - fd_Metadata_resource_type protoreflect.FieldDescriptor - fd_Metadata_also_known_as protoreflect.FieldDescriptor - fd_Metadata_media_type protoreflect.FieldDescriptor - fd_Metadata_created protoreflect.FieldDescriptor - fd_Metadata_checksum protoreflect.FieldDescriptor - fd_Metadata_previous_version_id protoreflect.FieldDescriptor - fd_Metadata_next_version_id protoreflect.FieldDescriptor -) - -func init() { - file_cheqd_resource_v2_resource_proto_init() - md_Metadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("Metadata") - fd_Metadata_collection_id = md_Metadata.Fields().ByName("collection_id") - fd_Metadata_id = md_Metadata.Fields().ByName("id") - fd_Metadata_name = md_Metadata.Fields().ByName("name") - fd_Metadata_version = md_Metadata.Fields().ByName("version") - fd_Metadata_resource_type = md_Metadata.Fields().ByName("resource_type") - fd_Metadata_also_known_as = md_Metadata.Fields().ByName("also_known_as") - fd_Metadata_media_type = md_Metadata.Fields().ByName("media_type") - fd_Metadata_created = md_Metadata.Fields().ByName("created") - fd_Metadata_checksum = md_Metadata.Fields().ByName("checksum") - fd_Metadata_previous_version_id = md_Metadata.Fields().ByName("previous_version_id") - fd_Metadata_next_version_id = md_Metadata.Fields().ByName("next_version_id") -} - -var _ protoreflect.Message = (*fastReflection_Metadata)(nil) - -type fastReflection_Metadata Metadata - -func (x *Metadata) ProtoReflect() protoreflect.Message { - return (*fastReflection_Metadata)(x) -} - -func (x *Metadata) slowProtoReflect() protoreflect.Message { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] - 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) -} - -var _fastReflection_Metadata_messageType fastReflection_Metadata_messageType -var _ protoreflect.MessageType = fastReflection_Metadata_messageType{} - -type fastReflection_Metadata_messageType struct{} - -func (x fastReflection_Metadata_messageType) Zero() protoreflect.Message { - return (*fastReflection_Metadata)(nil) -} -func (x fastReflection_Metadata_messageType) New() protoreflect.Message { - return new(fastReflection_Metadata) -} -func (x fastReflection_Metadata_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_Metadata -} - -// Descriptor returns message descriptor, which contains only the protobuf -// type information for the message. -func (x *fastReflection_Metadata) Descriptor() protoreflect.MessageDescriptor { - return md_Metadata -} - -// Type returns the message type, which encapsulates both Go and protobuf -// type information. If the Go type information is not needed, -// it is recommended that the message descriptor be used instead. -func (x *fastReflection_Metadata) Type() protoreflect.MessageType { - return _fastReflection_Metadata_messageType -} - -// New returns a newly allocated and mutable empty message. -func (x *fastReflection_Metadata) New() protoreflect.Message { - return new(fastReflection_Metadata) -} - -// Interface unwraps the message reflection interface and -// returns the underlying ProtoMessage interface. -func (x *fastReflection_Metadata) Interface() protoreflect.ProtoMessage { - return (*Metadata)(x) -} - -// Range iterates over every populated field in an undefined order, -// calling f for each field descriptor and value encountered. -// Range returns immediately if f returns false. -// While iterating, mutating operations may only be performed -// on the current field descriptor. -func (x *fastReflection_Metadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.CollectionId != "" { - value := protoreflect.ValueOfString(x.CollectionId) - if !f(fd_Metadata_collection_id, value) { - return - } - } - if x.Id != "" { - value := protoreflect.ValueOfString(x.Id) - if !f(fd_Metadata_id, value) { - return - } - } - if x.Name != "" { - value := protoreflect.ValueOfString(x.Name) - if !f(fd_Metadata_name, value) { - return - } - } - if x.Version != "" { - value := protoreflect.ValueOfString(x.Version) - if !f(fd_Metadata_version, value) { - return - } - } - if x.ResourceType != "" { - value := protoreflect.ValueOfString(x.ResourceType) - if !f(fd_Metadata_resource_type, value) { - return - } - } - if len(x.AlsoKnownAs) != 0 { - value := protoreflect.ValueOfList(&_Metadata_6_list{list: &x.AlsoKnownAs}) - if !f(fd_Metadata_also_known_as, value) { - return - } - } - if x.MediaType != "" { - value := protoreflect.ValueOfString(x.MediaType) - if !f(fd_Metadata_media_type, value) { - return - } - } - if x.Created != nil { - value := protoreflect.ValueOfMessage(x.Created.ProtoReflect()) - if !f(fd_Metadata_created, value) { - return - } - } - if x.Checksum != "" { - value := protoreflect.ValueOfString(x.Checksum) - if !f(fd_Metadata_checksum, value) { - return - } - } - if x.PreviousVersionId != "" { - value := protoreflect.ValueOfString(x.PreviousVersionId) - if !f(fd_Metadata_previous_version_id, value) { - return - } - } - if x.NextVersionId != "" { - value := protoreflect.ValueOfString(x.NextVersionId) - if !f(fd_Metadata_next_version_id, value) { - return - } - } -} - -// Has reports whether a field is populated. -// -// Some fields have the property of nullability where it is possible to -// distinguish between the default value of a field and whether the field -// was explicitly populated with the default value. Singular message fields, -// member fields of a oneof, and proto2 scalar fields are nullable. Such -// fields are populated only if explicitly set. -// -// In other cases (aside from the nullable cases above), -// a proto3 scalar field is populated if it contains a non-zero value, and -// a repeated field is populated if it is non-empty. -func (x *fastReflection_Metadata) Has(fd protoreflect.FieldDescriptor) bool { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - return x.CollectionId != "" - case "cheqd.resource.v2.Metadata.id": - return x.Id != "" - case "cheqd.resource.v2.Metadata.name": - return x.Name != "" - case "cheqd.resource.v2.Metadata.version": - return x.Version != "" - case "cheqd.resource.v2.Metadata.resource_type": - return x.ResourceType != "" - case "cheqd.resource.v2.Metadata.also_known_as": - return len(x.AlsoKnownAs) != 0 - case "cheqd.resource.v2.Metadata.media_type": - return x.MediaType != "" - case "cheqd.resource.v2.Metadata.created": - return x.Created != nil - case "cheqd.resource.v2.Metadata.checksum": - return x.Checksum != "" - case "cheqd.resource.v2.Metadata.previous_version_id": - return x.PreviousVersionId != "" - case "cheqd.resource.v2.Metadata.next_version_id": - return x.NextVersionId != "" - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Clear clears the field such that a subsequent Has call reports false. -// -// Clearing an extension field clears both the extension type and value -// associated with the given field number. -// -// Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Clear(fd protoreflect.FieldDescriptor) { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - x.CollectionId = "" - case "cheqd.resource.v2.Metadata.id": - x.Id = "" - case "cheqd.resource.v2.Metadata.name": - x.Name = "" - case "cheqd.resource.v2.Metadata.version": - x.Version = "" - case "cheqd.resource.v2.Metadata.resource_type": - x.ResourceType = "" - case "cheqd.resource.v2.Metadata.also_known_as": - x.AlsoKnownAs = nil - case "cheqd.resource.v2.Metadata.media_type": - x.MediaType = "" - case "cheqd.resource.v2.Metadata.created": - x.Created = nil - case "cheqd.resource.v2.Metadata.checksum": - x.Checksum = "" - case "cheqd.resource.v2.Metadata.previous_version_id": - x.PreviousVersionId = "" - case "cheqd.resource.v2.Metadata.next_version_id": - x.NextVersionId = "" - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Get retrieves the value for a field. -// -// For unpopulated scalars, it returns the default value, where -// the default value of a bytes scalar is guaranteed to be a copy. -// For unpopulated composite types, it returns an empty, read-only view -// of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_Metadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { - switch descriptor.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - value := x.CollectionId - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.id": - value := x.Id - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.name": - value := x.Name - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.version": - value := x.Version - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.resource_type": - value := x.ResourceType - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.also_known_as": - if len(x.AlsoKnownAs) == 0 { - return protoreflect.ValueOfList(&_Metadata_6_list{}) - } - listValue := &_Metadata_6_list{list: &x.AlsoKnownAs} - return protoreflect.ValueOfList(listValue) - case "cheqd.resource.v2.Metadata.media_type": - value := x.MediaType - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.created": - value := x.Created - return protoreflect.ValueOfMessage(value.ProtoReflect()) - case "cheqd.resource.v2.Metadata.checksum": - value := x.Checksum - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.previous_version_id": - value := x.PreviousVersionId - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.Metadata.next_version_id": - value := x.NextVersionId - return protoreflect.ValueOfString(value) - default: - if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", descriptor.FullName())) - } -} - -// Set stores the value for a field. -// -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType. -// When setting a composite type, it is unspecified whether the stored value -// aliases the source's memory in any way. If the composite value is an -// empty, read-only value, then it panics. -// -// Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - x.CollectionId = value.Interface().(string) - case "cheqd.resource.v2.Metadata.id": - x.Id = value.Interface().(string) - case "cheqd.resource.v2.Metadata.name": - x.Name = value.Interface().(string) - case "cheqd.resource.v2.Metadata.version": - x.Version = value.Interface().(string) - case "cheqd.resource.v2.Metadata.resource_type": - x.ResourceType = value.Interface().(string) - case "cheqd.resource.v2.Metadata.also_known_as": - lv := value.List() - clv := lv.(*_Metadata_6_list) - x.AlsoKnownAs = *clv.list - case "cheqd.resource.v2.Metadata.media_type": - x.MediaType = value.Interface().(string) - case "cheqd.resource.v2.Metadata.created": - x.Created = value.Message().Interface().(*timestamppb.Timestamp) - case "cheqd.resource.v2.Metadata.checksum": - x.Checksum = value.Interface().(string) - case "cheqd.resource.v2.Metadata.previous_version_id": - x.PreviousVersionId = value.Interface().(string) - case "cheqd.resource.v2.Metadata.next_version_id": - x.NextVersionId = value.Interface().(string) - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// Mutable returns a mutable reference to a composite type. -// -// If the field is unpopulated, it may allocate a composite value. -// For a field belonging to a oneof, it implicitly clears any other field -// that may be currently set within the same oneof. -// For extension fields, it implicitly stores the provided ExtensionType -// if not already stored. -// It panics if the field does not contain a composite type. -// -// Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.also_known_as": - if x.AlsoKnownAs == nil { - x.AlsoKnownAs = []*AlternativeUri{} - } - value := &_Metadata_6_list{list: &x.AlsoKnownAs} - return protoreflect.ValueOfList(value) - case "cheqd.resource.v2.Metadata.created": - if x.Created == nil { - x.Created = new(timestamppb.Timestamp) - } - return protoreflect.ValueOfMessage(x.Created.ProtoReflect()) - case "cheqd.resource.v2.Metadata.collection_id": - panic(fmt.Errorf("field collection_id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.id": - panic(fmt.Errorf("field id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.name": - panic(fmt.Errorf("field name of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.version": - panic(fmt.Errorf("field version of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.resource_type": - panic(fmt.Errorf("field resource_type of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.media_type": - panic(fmt.Errorf("field media_type of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.checksum": - panic(fmt.Errorf("field checksum of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.previous_version_id": - panic(fmt.Errorf("field previous_version_id of message cheqd.resource.v2.Metadata is not mutable")) - case "cheqd.resource.v2.Metadata.next_version_id": - panic(fmt.Errorf("field next_version_id of message cheqd.resource.v2.Metadata is not mutable")) - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// NewField returns a new value that is assignable to the field -// for the given descriptor. For scalars, this returns the default value. -// For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_Metadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { - switch fd.FullName() { - case "cheqd.resource.v2.Metadata.collection_id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.name": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.version": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.resource_type": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.also_known_as": - list := []*AlternativeUri{} - return protoreflect.ValueOfList(&_Metadata_6_list{list: &list}) - case "cheqd.resource.v2.Metadata.media_type": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.created": - m := new(timestamppb.Timestamp) - return protoreflect.ValueOfMessage(m.ProtoReflect()) - case "cheqd.resource.v2.Metadata.checksum": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.previous_version_id": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.Metadata.next_version_id": - return protoreflect.ValueOfString("") - default: - if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.Metadata")) - } - panic(fmt.Errorf("message cheqd.resource.v2.Metadata does not contain field %s", fd.FullName())) - } -} - -// WhichOneof reports which field within the oneof is populated, -// returning nil if none are populated. -// It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_Metadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { - switch d.FullName() { - default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.Metadata", d.FullName())) - } - panic("unreachable") -} - -// GetUnknown retrieves the entire list of unknown fields. -// The caller may only mutate the contents of the RawFields -// if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_Metadata) GetUnknown() protoreflect.RawFields { - return x.unknownFields -} - -// SetUnknown stores an entire list of unknown fields. -// The raw fields must be syntactically valid according to the wire format. -// An implementation may panic if this is not the case. -// Once stored, the caller must not mutate the content of the RawFields. -// An empty RawFields may be passed to clear the fields. -// -// SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_Metadata) SetUnknown(fields protoreflect.RawFields) { - x.unknownFields = fields -} - -// IsValid reports whether the message is valid. -// -// An invalid message is an empty, read-only value. -// -// An invalid message often corresponds to a nil pointer of the concrete -// message type, but the details are implementation dependent. -// Validity is not part of the protobuf data model, and may not -// be preserved in marshaling or other operations. -func (x *fastReflection_Metadata) IsValid() bool { - return x != nil -} - -// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. -// This method may return nil. -// -// The returned methods type is identical to -// "google.golang.org/protobuf/runtime/protoiface".Methods. -// Consult the protoiface package documentation for details. -func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { - size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: 0, - } - } - options := runtime.SizeInputToOptions(input) - _ = options - var n int - var l int - _ = l - l = len(x.CollectionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Id) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Name) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Version) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.ResourceType) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if len(x.AlsoKnownAs) > 0 { - for _, e := range x.AlsoKnownAs { - l = options.Size(e) - n += 1 + l + runtime.Sov(uint64(l)) - } - } - l = len(x.MediaType) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.Created != nil { - l = options.Size(x.Created) - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.Checksum) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.PreviousVersionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - l = len(x.NextVersionId) - if l > 0 { - n += 1 + l + runtime.Sov(uint64(l)) - } - if x.unknownFields != nil { - n += len(x.unknownFields) - } - return protoiface.SizeOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Size: n, - } - } - - marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - options := runtime.MarshalInputToOptions(input) - _ = options - size := options.Size(x) - dAtA := make([]byte, size) - i := len(dAtA) - _ = i - var l int - _ = l - if x.unknownFields != nil { - i -= len(x.unknownFields) - copy(dAtA[i:], x.unknownFields) - } - if len(x.NextVersionId) > 0 { - i -= len(x.NextVersionId) - copy(dAtA[i:], x.NextVersionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NextVersionId))) - i-- - dAtA[i] = 0x5a - } - if len(x.PreviousVersionId) > 0 { - i -= len(x.PreviousVersionId) - copy(dAtA[i:], x.PreviousVersionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousVersionId))) - i-- - dAtA[i] = 0x52 - } - if len(x.Checksum) > 0 { - i -= len(x.Checksum) - copy(dAtA[i:], x.Checksum) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Checksum))) - i-- - dAtA[i] = 0x4a - } - if x.Created != nil { - encoded, err := options.Marshal(x.Created) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x42 - } - if len(x.MediaType) > 0 { - i -= len(x.MediaType) - copy(dAtA[i:], x.MediaType) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MediaType))) - i-- - dAtA[i] = 0x3a - } - if len(x.AlsoKnownAs) > 0 { - for iNdEx := len(x.AlsoKnownAs) - 1; iNdEx >= 0; iNdEx-- { - encoded, err := options.Marshal(x.AlsoKnownAs[iNdEx]) - if err != nil { - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, err - } - i -= len(encoded) - copy(dAtA[i:], encoded) - i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) - i-- - dAtA[i] = 0x32 - } - } - if len(x.ResourceType) > 0 { - i -= len(x.ResourceType) - copy(dAtA[i:], x.ResourceType) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ResourceType))) - i-- - dAtA[i] = 0x2a - } - if len(x.Version) > 0 { - i -= len(x.Version) - copy(dAtA[i:], x.Version) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Version))) - i-- - dAtA[i] = 0x22 - } - if len(x.Name) > 0 { - i -= len(x.Name) - copy(dAtA[i:], x.Name) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Name))) - i-- - dAtA[i] = 0x1a - } - if len(x.Id) > 0 { - i -= len(x.Id) - copy(dAtA[i:], x.Id) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Id))) - i-- - dAtA[i] = 0x12 - } - if len(x.CollectionId) > 0 { - i -= len(x.CollectionId) - copy(dAtA[i:], x.CollectionId) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CollectionId))) - i-- - dAtA[i] = 0xa - } - if input.Buf != nil { - input.Buf = append(input.Buf, dAtA...) - } else { - input.Buf = dAtA - } - return protoiface.MarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Buf: input.Buf, - }, nil - } - unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*Metadata) - if x == nil { - return protoiface.UnmarshalOutput{ - NoUnkeyedLiterals: input.NoUnkeyedLiterals, - Flags: input.Flags, - }, nil - } - options := runtime.UnmarshalInputToOptions(input) - _ = options - dAtA := input.Buf - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, 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 protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CollectionId", wireType) + x.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1736,11 +1318,11 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.CollectionId = string(dAtA[iNdEx:postIndex]) + x.Version = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 5: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1768,13 +1350,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Id = string(dAtA[iNdEx:postIndex]) + x.ResourceType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AlsoKnownAs", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1784,27 +1366,29 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Name = string(dAtA[iNdEx:postIndex]) + x.AlsoKnownAs = append(x.AlsoKnownAs, &AlternativeUri{}) + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AlsoKnownAs[len(x.AlsoKnownAs)-1]); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex - case 4: + case 7: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1832,13 +1416,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Version = string(dAtA[iNdEx:postIndex]) + x.MediaType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 8: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1848,29 +1432,33 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.ResourceType = string(dAtA[iNdEx:postIndex]) + if x.Created == nil { + x.Created = ×tamppb.Timestamp{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Created); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex - case 6: + case 9: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AlsoKnownAs", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1880,29 +1468,27 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.AlsoKnownAs = append(x.AlsoKnownAs, &AlternativeUri{}) - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.AlsoKnownAs[len(x.AlsoKnownAs)-1]); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } + x.Checksum = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 10: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousVersionId", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1930,13 +1516,13 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.MediaType = string(dAtA[iNdEx:postIndex]) + x.PreviousVersionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 8: + case 11: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextVersionId", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -1946,63 +1532,447 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - if postIndex > l { + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NextVersionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_AlternativeUri protoreflect.MessageDescriptor + fd_AlternativeUri_uri protoreflect.FieldDescriptor + fd_AlternativeUri_description protoreflect.FieldDescriptor +) + +func init() { + file_cheqd_resource_v2_resource_proto_init() + md_AlternativeUri = File_cheqd_resource_v2_resource_proto.Messages().ByName("AlternativeUri") + fd_AlternativeUri_uri = md_AlternativeUri.Fields().ByName("uri") + fd_AlternativeUri_description = md_AlternativeUri.Fields().ByName("description") +} + +var _ protoreflect.Message = (*fastReflection_AlternativeUri)(nil) + +type fastReflection_AlternativeUri AlternativeUri + +func (x *AlternativeUri) ProtoReflect() protoreflect.Message { + return (*fastReflection_AlternativeUri)(x) +} + +func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] + 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) +} + +var _fastReflection_AlternativeUri_messageType fastReflection_AlternativeUri_messageType +var _ protoreflect.MessageType = fastReflection_AlternativeUri_messageType{} + +type fastReflection_AlternativeUri_messageType struct{} + +func (x fastReflection_AlternativeUri_messageType) Zero() protoreflect.Message { + return (*fastReflection_AlternativeUri)(nil) +} +func (x fastReflection_AlternativeUri_messageType) New() protoreflect.Message { + return new(fastReflection_AlternativeUri) +} +func (x fastReflection_AlternativeUri_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_AlternativeUri +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_AlternativeUri) Descriptor() protoreflect.MessageDescriptor { + return md_AlternativeUri +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_AlternativeUri) Type() protoreflect.MessageType { + return _fastReflection_AlternativeUri_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_AlternativeUri) New() protoreflect.Message { + return new(fastReflection_AlternativeUri) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { + return (*AlternativeUri)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Uri != "" { + value := protoreflect.ValueOfString(x.Uri) + if !f(fd_AlternativeUri_uri, value) { + return + } + } + if x.Description != "" { + value := protoreflect.ValueOfString(x.Description) + if !f(fd_AlternativeUri_description, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + return x.Uri != "" + case "cheqd.resource.v2.AlternativeUri.description": + return x.Description != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + x.Uri = "" + case "cheqd.resource.v2.AlternativeUri.description": + x.Description = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + value := x.Uri + return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.AlternativeUri.description": + value := x.Description + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + x.Uri = value.Interface().(string) + case "cheqd.resource.v2.AlternativeUri.description": + x.Description = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + panic(fmt.Errorf("field uri of message cheqd.resource.v2.AlternativeUri is not mutable")) + case "cheqd.resource.v2.AlternativeUri.description": + panic(fmt.Errorf("field description of message cheqd.resource.v2.AlternativeUri is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_AlternativeUri) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cheqd.resource.v2.AlternativeUri.uri": + return protoreflect.ValueOfString("") + case "cheqd.resource.v2.AlternativeUri.description": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + } + panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.AlternativeUri", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_AlternativeUri) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Uri) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.Description) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.Description) > 0 { + i -= len(x.Description) + copy(dAtA[i:], x.Description) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Description))) + i-- + dAtA[i] = 0x12 + } + if len(x.Uri) > 0 { + i -= len(x.Uri) + copy(dAtA[i:], x.Uri) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Uri))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*AlternativeUri) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - if x.Created == nil { - x.Created = ×tamppb.Timestamp{} - } - if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Created); err != nil { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Checksum", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength - } - if postIndex > l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break } - x.Checksum = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 10: + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousVersionId", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2030,11 +2000,11 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.PreviousVersionId = string(dAtA[iNdEx:postIndex]) + x.Uri = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: + case 2: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextVersionId", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2062,7 +2032,7 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.NextVersionId = string(dAtA[iNdEx:postIndex]) + x.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2100,27 +2070,27 @@ func (x *fastReflection_Metadata) ProtoMethods() *protoiface.Methods { } var ( - md_AlternativeUri protoreflect.MessageDescriptor - fd_AlternativeUri_uri protoreflect.FieldDescriptor - fd_AlternativeUri_description protoreflect.FieldDescriptor + md_ResourceWithMetadata protoreflect.MessageDescriptor + fd_ResourceWithMetadata_resource protoreflect.FieldDescriptor + fd_ResourceWithMetadata_metadata protoreflect.FieldDescriptor ) func init() { file_cheqd_resource_v2_resource_proto_init() - md_AlternativeUri = File_cheqd_resource_v2_resource_proto.Messages().ByName("AlternativeUri") - fd_AlternativeUri_uri = md_AlternativeUri.Fields().ByName("uri") - fd_AlternativeUri_description = md_AlternativeUri.Fields().ByName("description") + md_ResourceWithMetadata = File_cheqd_resource_v2_resource_proto.Messages().ByName("ResourceWithMetadata") + fd_ResourceWithMetadata_resource = md_ResourceWithMetadata.Fields().ByName("resource") + fd_ResourceWithMetadata_metadata = md_ResourceWithMetadata.Fields().ByName("metadata") } -var _ protoreflect.Message = (*fastReflection_AlternativeUri)(nil) +var _ protoreflect.Message = (*fastReflection_ResourceWithMetadata)(nil) -type fastReflection_AlternativeUri AlternativeUri +type fastReflection_ResourceWithMetadata ResourceWithMetadata -func (x *AlternativeUri) ProtoReflect() protoreflect.Message { - return (*fastReflection_AlternativeUri)(x) +func (x *ResourceWithMetadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_ResourceWithMetadata)(x) } -func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { +func (x *ResourceWithMetadata) slowProtoReflect() protoreflect.Message { mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2132,43 +2102,43 @@ func (x *AlternativeUri) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_AlternativeUri_messageType fastReflection_AlternativeUri_messageType -var _ protoreflect.MessageType = fastReflection_AlternativeUri_messageType{} +var _fastReflection_ResourceWithMetadata_messageType fastReflection_ResourceWithMetadata_messageType +var _ protoreflect.MessageType = fastReflection_ResourceWithMetadata_messageType{} -type fastReflection_AlternativeUri_messageType struct{} +type fastReflection_ResourceWithMetadata_messageType struct{} -func (x fastReflection_AlternativeUri_messageType) Zero() protoreflect.Message { - return (*fastReflection_AlternativeUri)(nil) +func (x fastReflection_ResourceWithMetadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_ResourceWithMetadata)(nil) } -func (x fastReflection_AlternativeUri_messageType) New() protoreflect.Message { - return new(fastReflection_AlternativeUri) +func (x fastReflection_ResourceWithMetadata_messageType) New() protoreflect.Message { + return new(fastReflection_ResourceWithMetadata) } -func (x fastReflection_AlternativeUri_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_AlternativeUri +func (x fastReflection_ResourceWithMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ResourceWithMetadata } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_AlternativeUri) Descriptor() protoreflect.MessageDescriptor { - return md_AlternativeUri +func (x *fastReflection_ResourceWithMetadata) Descriptor() protoreflect.MessageDescriptor { + return md_ResourceWithMetadata } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_AlternativeUri) Type() protoreflect.MessageType { - return _fastReflection_AlternativeUri_messageType +func (x *fastReflection_ResourceWithMetadata) Type() protoreflect.MessageType { + return _fastReflection_ResourceWithMetadata_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_AlternativeUri) New() protoreflect.Message { - return new(fastReflection_AlternativeUri) +func (x *fastReflection_ResourceWithMetadata) New() protoreflect.Message { + return new(fastReflection_ResourceWithMetadata) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { - return (*AlternativeUri)(x) +func (x *fastReflection_ResourceWithMetadata) Interface() protoreflect.ProtoMessage { + return (*ResourceWithMetadata)(x) } // Range iterates over every populated field in an undefined order, @@ -2176,16 +2146,16 @@ func (x *fastReflection_AlternativeUri) Interface() protoreflect.ProtoMessage { // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Uri != "" { - value := protoreflect.ValueOfString(x.Uri) - if !f(fd_AlternativeUri_uri, value) { +func (x *fastReflection_ResourceWithMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Resource != nil { + value := protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) + if !f(fd_ResourceWithMetadata_resource, value) { return } } - if x.Description != "" { - value := protoreflect.ValueOfString(x.Description) - if !f(fd_AlternativeUri_description, value) { + if x.Metadata != nil { + value := protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) + if !f(fd_ResourceWithMetadata_metadata, value) { return } } @@ -2202,17 +2172,17 @@ func (x *fastReflection_AlternativeUri) Range(f func(protoreflect.FieldDescripto // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_ResourceWithMetadata) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - return x.Uri != "" - case "cheqd.resource.v2.AlternativeUri.description": - return x.Description != "" + case "cheqd.resource.v2.ResourceWithMetadata.resource": + return x.Resource != nil + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + return x.Metadata != nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2222,17 +2192,17 @@ func (x *fastReflection_AlternativeUri) Has(fd protoreflect.FieldDescriptor) boo // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_ResourceWithMetadata) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - x.Uri = "" - case "cheqd.resource.v2.AlternativeUri.description": - x.Description = "" + case "cheqd.resource.v2.ResourceWithMetadata.resource": + x.Resource = nil + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + x.Metadata = nil default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2242,19 +2212,19 @@ func (x *fastReflection_AlternativeUri) Clear(fd protoreflect.FieldDescriptor) { // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - value := x.Uri - return protoreflect.ValueOfString(value) - case "cheqd.resource.v2.AlternativeUri.description": - value := x.Description - return protoreflect.ValueOfString(value) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + value := x.Resource + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + value := x.Metadata + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", descriptor.FullName())) } } @@ -2268,17 +2238,17 @@ func (x *fastReflection_AlternativeUri) Get(descriptor protoreflect.FieldDescrip // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_ResourceWithMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - x.Uri = value.Interface().(string) - case "cheqd.resource.v2.AlternativeUri.description": - x.Description = value.Interface().(string) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + x.Resource = value.Message().Interface().(*Resource) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + x.Metadata = value.Message().Interface().(*Metadata) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } @@ -2292,44 +2262,52 @@ func (x *fastReflection_AlternativeUri) Set(fd protoreflect.FieldDescriptor, val // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - panic(fmt.Errorf("field uri of message cheqd.resource.v2.AlternativeUri is not mutable")) - case "cheqd.resource.v2.AlternativeUri.description": - panic(fmt.Errorf("field description of message cheqd.resource.v2.AlternativeUri is not mutable")) + case "cheqd.resource.v2.ResourceWithMetadata.resource": + if x.Resource == nil { + x.Resource = new(Resource) + } + return protoreflect.ValueOfMessage(x.Resource.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + if x.Metadata == nil { + x.Metadata = new(Metadata) + } + return protoreflect.ValueOfMessage(x.Metadata.ProtoReflect()) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_AlternativeUri) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_ResourceWithMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cheqd.resource.v2.AlternativeUri.uri": - return protoreflect.ValueOfString("") - case "cheqd.resource.v2.AlternativeUri.description": - return protoreflect.ValueOfString("") + case "cheqd.resource.v2.ResourceWithMetadata.resource": + m := new(Resource) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cheqd.resource.v2.ResourceWithMetadata.metadata": + m := new(Metadata) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.AlternativeUri")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: cheqd.resource.v2.ResourceWithMetadata")) } - panic(fmt.Errorf("message cheqd.resource.v2.AlternativeUri does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message cheqd.resource.v2.ResourceWithMetadata does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_ResourceWithMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.AlternativeUri", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in cheqd.resource.v2.ResourceWithMetadata", d.FullName())) } panic("unreachable") } @@ -2337,7 +2315,7 @@ func (x *fastReflection_AlternativeUri) WhichOneof(d protoreflect.OneofDescripto // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_ResourceWithMetadata) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -2348,7 +2326,7 @@ func (x *fastReflection_AlternativeUri) GetUnknown() protoreflect.RawFields { // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_ResourceWithMetadata) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -2360,7 +2338,7 @@ func (x *fastReflection_AlternativeUri) SetUnknown(fields protoreflect.RawFields // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_AlternativeUri) IsValid() bool { +func (x *fastReflection_ResourceWithMetadata) IsValid() bool { return x != nil } @@ -2370,9 +2348,9 @@ func (x *fastReflection_AlternativeUri) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_ResourceWithMetadata) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2384,12 +2362,12 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { var n int var l int _ = l - l = len(x.Uri) - if l > 0 { + if x.Resource != nil { + l = options.Size(x.Resource) n += 1 + l + runtime.Sov(uint64(l)) } - l = len(x.Description) - if l > 0 { + if x.Metadata != nil { + l = options.Size(x.Metadata) n += 1 + l + runtime.Sov(uint64(l)) } if x.unknownFields != nil { @@ -2402,7 +2380,7 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2421,17 +2399,31 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.Description) > 0 { - i -= len(x.Description) - copy(dAtA[i:], x.Description) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Description))) + if x.Metadata != nil { + encoded, err := options.Marshal(x.Metadata) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) i-- dAtA[i] = 0x12 } - if len(x.Uri) > 0 { - i -= len(x.Uri) - copy(dAtA[i:], x.Uri) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Uri))) + if x.Resource != nil { + encoded, err := options.Marshal(x.Resource) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) i-- dAtA[i] = 0xa } @@ -2446,7 +2438,7 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*AlternativeUri) + x := input.Message.Interface().(*ResourceWithMetadata) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -2478,17 +2470,17 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: AlternativeUri: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -2498,29 +2490,33 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Uri = string(dAtA[iNdEx:postIndex]) + if x.Resource == nil { + x.Resource = &Resource{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Resource); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex case 2: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -2530,23 +2526,27 @@ func (x *fastReflection_AlternativeUri) ProtoMethods() *protoiface.Methods { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.Description = string(dAtA[iNdEx:postIndex]) + if x.Metadata == nil { + x.Metadata = &Metadata{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Metadata); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex default: iNdEx = preIndex @@ -2596,50 +2596,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -type ResourceWithMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (x *ResourceWithMetadata) Reset() { - *x = ResourceWithMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResourceWithMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResourceWithMetadata) ProtoMessage() {} - -// Deprecated: Use ResourceWithMetadata.ProtoReflect.Descriptor instead. -func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{0} -} - -func (x *ResourceWithMetadata) GetResource() *Resource { - if x != nil { - return x.Resource - } - return nil -} - -func (x *ResourceWithMetadata) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - // Resource stores the contents of a DID-Linked Resource type Resource struct { state protoimpl.MessageState @@ -2653,7 +2609,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2667,7 +2623,7 @@ func (*Resource) ProtoMessage() {} // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{1} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{0} } func (x *Resource) GetData() []byte { @@ -2685,6 +2641,11 @@ type Metadata struct { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. @@ -2727,7 +2688,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2741,7 +2702,7 @@ func (*Metadata) ProtoMessage() {} // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{2} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{1} } func (x *Metadata) GetCollectionId() string { @@ -2847,7 +2808,7 @@ type AlternativeUri struct { func (x *AlternativeUri) Reset() { *x = AlternativeUri{} if protoimpl.UnsafeEnabled { - mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2861,7 +2822,7 @@ func (*AlternativeUri) ProtoMessage() {} // Deprecated: Use AlternativeUri.ProtoReflect.Descriptor instead. func (*AlternativeUri) Descriptor() ([]byte, []int) { - return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{3} + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{2} } func (x *AlternativeUri) GetUri() string { @@ -2878,6 +2839,50 @@ func (x *AlternativeUri) GetDescription() string { return "" } +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +type ResourceWithMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *ResourceWithMetadata) Reset() { + *x = ResourceWithMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_cheqd_resource_v2_resource_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceWithMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceWithMetadata) ProtoMessage() {} + +// Deprecated: Use ResourceWithMetadata.ProtoReflect.Descriptor instead. +func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { + return file_cheqd_resource_v2_resource_proto_rawDescGZIP(), []int{3} +} + +func (x *ResourceWithMetadata) GetResource() *Resource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *ResourceWithMetadata) GetMetadata() *Metadata { + if x != nil { + return x.Metadata + } + return nil +} + var File_cheqd_resource_v2_resource_proto protoreflect.FileDescriptor var file_cheqd_resource_v2_resource_proto_rawDesc = []byte{ @@ -2887,64 +2892,75 @@ var file_cheqd_resource_v2_resource_proto_rawDesc = []byte{ 0x63, 0x65, 0x2e, 0x76, 0x32, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88, 0x01, 0x0a, - 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbe, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4b, 0x0a, 0x0d, - 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0b, 0x61, 0x6c, - 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0e, 0x41, 0x6c, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xca, - 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, - 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, - 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, - 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1e, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbf, 0x04, 0x0a, + 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xea, 0xde, 0x1f, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xea, 0xde, 0x1f, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x17, 0xc8, 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x35, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, + 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, + 0x72, 0x69, 0x42, 0x1e, 0xc8, 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x16, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, + 0x72, 0x69, 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, + 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, 0x11, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x2c, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x01, 0x52, + 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x44, + 0x0a, 0x0e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x69, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x12, 0xea, 0xde, + 0x1f, 0x0e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, + 0xca, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, + 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2961,17 +2977,17 @@ func file_cheqd_resource_v2_resource_proto_rawDescGZIP() []byte { var file_cheqd_resource_v2_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_cheqd_resource_v2_resource_proto_goTypes = []interface{}{ - (*ResourceWithMetadata)(nil), // 0: cheqd.resource.v2.ResourceWithMetadata - (*Resource)(nil), // 1: cheqd.resource.v2.Resource - (*Metadata)(nil), // 2: cheqd.resource.v2.Metadata - (*AlternativeUri)(nil), // 3: cheqd.resource.v2.AlternativeUri + (*Resource)(nil), // 0: cheqd.resource.v2.Resource + (*Metadata)(nil), // 1: cheqd.resource.v2.Metadata + (*AlternativeUri)(nil), // 2: cheqd.resource.v2.AlternativeUri + (*ResourceWithMetadata)(nil), // 3: cheqd.resource.v2.ResourceWithMetadata (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp } var file_cheqd_resource_v2_resource_proto_depIdxs = []int32{ - 1, // 0: cheqd.resource.v2.ResourceWithMetadata.resource:type_name -> cheqd.resource.v2.Resource - 2, // 1: cheqd.resource.v2.ResourceWithMetadata.metadata:type_name -> cheqd.resource.v2.Metadata - 3, // 2: cheqd.resource.v2.Metadata.also_known_as:type_name -> cheqd.resource.v2.AlternativeUri - 4, // 3: cheqd.resource.v2.Metadata.created:type_name -> google.protobuf.Timestamp + 2, // 0: cheqd.resource.v2.Metadata.also_known_as:type_name -> cheqd.resource.v2.AlternativeUri + 4, // 1: cheqd.resource.v2.Metadata.created:type_name -> google.protobuf.Timestamp + 0, // 2: cheqd.resource.v2.ResourceWithMetadata.resource:type_name -> cheqd.resource.v2.Resource + 1, // 3: cheqd.resource.v2.ResourceWithMetadata.metadata:type_name -> cheqd.resource.v2.Metadata 4, // [4:4] is the sub-list for method output_type 4, // [4:4] is the sub-list for method input_type 4, // [4:4] is the sub-list for extension type_name @@ -2986,7 +3002,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } if !protoimpl.UnsafeEnabled { file_cheqd_resource_v2_resource_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceWithMetadata); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -2998,7 +3014,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -3010,7 +3026,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { + switch v := v.(*AlternativeUri); i { case 0: return &v.state case 1: @@ -3022,7 +3038,7 @@ func file_cheqd_resource_v2_resource_proto_init() { } } file_cheqd_resource_v2_resource_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AlternativeUri); i { + switch v := v.(*ResourceWithMetadata); i { case 0: return &v.state case 1: diff --git a/api/cheqd/resource/v2/tx.pulsar.go b/api/cheqd/resource/v2/tx.pulsar.go index 65736a30e..ab3a72408 100644 --- a/api/cheqd/resource/v2/tx.pulsar.go +++ b/api/cheqd/resource/v2/tx.pulsar.go @@ -5,6 +5,7 @@ import ( fmt "fmt" v2 "github.com/cheqd/cheqd-node/api/cheqd/did/v2" runtime "github.com/cosmos/cosmos-proto/runtime" + _ "github.com/cosmos/gogoproto/gogoproto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoiface "google.golang.org/protobuf/runtime/protoiface" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -1914,14 +1915,16 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// MsgCreateResource defines the Msg/CreateResource request type. +// It describes the parameters of a request for creating a resource. type MsgCreateResource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Payload of the resource to be created + // Payload containing the resource to be created. Payload *MsgCreateResourcePayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // Signatures of the corresponding DID Document's controller(s) + // Signatures of the corresponding DID Document's controller(s). Signatures []*v2.SignInfo `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` } @@ -1959,24 +1962,53 @@ func (x *MsgCreateResource) GetSignatures() []*v2.SignInfo { return nil } +// MsgCreateResourcePayload defines the structure of the payload for creating a resource. +// +// If a resource with the given id does not exist already, +// it will be created. The resource will be created in the resource collection. +// +// If a resource with the given id, collection_id already exists, an error code 2200 will be returned. +// +// A new version of the resource in an existing collection will be created, +// if a resource in that collection with the same name, resource_type and empty next_version_id exists. +// +// An update operation is not possible, because the resource is immutable by design. type MsgCreateResourcePayload struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // data is a byte-representation of the actual Data the user wants to store + // data is a byte-representation of the actual Data the user wants to store. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // collection_id is an identifier of the DidDocument the resource belongs to + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // id is an UUID of the resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` - // name is a human-readable name of the resource + // name is a human-readable name of the resource. + // Format: + // + // Does not change between different versions. + // Example: PassportSchema, EducationTrustRegistry Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // version is a version of the resource + // version is a version of the resource. + // Format: + // Stored as a string. OPTIONAL. + // + // Example: 1.0.0, v2.1.0 Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` - // resource_type is a type of the resource + // resource_type is a type of the resource. + // Format: + // + // This is NOT the same as the resource's media type. + // Example: AnonCredsSchema, StatusList2021 ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - // also_known_as is a list of URIs that can be used to get the resource + // also_known_as is a list of URIs that can be used to get the resource. AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` } @@ -2054,7 +2086,7 @@ type MsgCreateResourceResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Metadata which was creted after applying to the ledger + // Return the created resource metadata. Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -2094,57 +2126,69 @@ var file_cheqd_resource_v2_tx_proto_rawDesc = []byte{ 0x15, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, 0x01, 0x0a, 0x11, 0x4d, 0x73, 0x67, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x45, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, - 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xfd, 0x01, - 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, - 0x52, 0x0b, 0x61, 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, 0x54, 0x0a, - 0x19, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x32, 0x6b, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x64, 0x0a, 0x0e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x63, - 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, - 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, - 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, - 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, - 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, - 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, + 0x01, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xea, 0xde, 0x1f, + 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0e, 0xea, 0xde, 0x1f, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0xc8, 0xde, 0x1f, 0x01, + 0xea, 0xde, 0x1f, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x10, 0xea, 0xde, 0x1f, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x61, 0x6c, 0x73, 0x6f, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x5f, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x65, + 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x42, 0x1e, 0xc8, + 0xde, 0x1f, 0x01, 0xea, 0xde, 0x1f, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, + 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x55, 0x72, 0x69, 0x52, 0x0b, 0x61, + 0x6c, 0x73, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x22, 0x70, 0x0a, 0x19, 0x4d, 0x73, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x65, 0x71, + 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x1a, 0xea, 0xde, 0x1f, 0x16, 0x6c, 0x69, 0x6e, 0x6b, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x32, 0x6b, 0x0a, 0x03, + 0x4d, 0x73, 0x67, 0x12, 0x64, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x68, + 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x76, 0x32, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xc4, 0x01, 0x0a, 0x15, 0x63, 0x6f, + 0x6d, 0x2e, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x76, 0x32, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, + 0x2f, 0x63, 0x68, 0x65, 0x71, 0x64, 0x2d, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x68, 0x65, 0x71, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, + 0x32, 0x3b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x43, + 0x52, 0x58, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x11, 0x43, 0x68, 0x65, 0x71, 0x64, 0x5c, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1d, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x5c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5c, 0x56, 0x32, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x68, 0x65, + 0x71, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x32, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/docs/config.json b/api/docs/config.json deleted file mode 100644 index 849239a9b..000000000 --- a/api/docs/config.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "cheqd Network - REST and gRPC Gateway Documentation", - "description": "Documentation describing REST and gRPC Gateway endpoints for cheqd network.", - "version": "v1.x", - "contact": { - "name": "Cheqd Foundation Limited", - "url": "https://cheqd.io" - }, - "license": { - "name": "Apache 2.0", - "url": "https://github.com/cheqd/cheqd-node/blob/main/LICENSE" - } - }, - "paths": {}, - "apis": [ - { - "url": "./api/docs/cheqd/did/v2/query.swagger.json" - }, - { - "url": "./api/docs/cheqd/resource/v2/query.swagger.json" - } - ], - "basePath": "/swagger/", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json", - "application/json+ld", - "*/*" - ], - "produces": [ - "application/json", - "application/json+ld", - "*/*" - ], - "externalDocs": { - "description": "cheqd Network Documentation", - "url": "https://docs.cheqd.io/node" - } -} \ No newline at end of file diff --git a/api/docs/config.yaml b/api/docs/config.yaml new file mode 100644 index 000000000..8f4c5ff4f --- /dev/null +++ b/api/docs/config.yaml @@ -0,0 +1,40 @@ +# Swagger config + +swagger: '2.0' +info: + title: cheqd Network - REST and gRPC Gateway Documentation + description: Documentation describing REST and gRPC Gateway endpoints for cheqd network + version: v1.x + contact: + name: Cheqd Foundation Limited + url: https://cheqd.io + license: + name: Apache 2.0 + url: https://github.com/cheqd/cheqd-node/blob/main/LICENSE +basePath: /swagger/ +schemes: + - http + - https +consumes: + - application/json + - application/json+ld + - "*/*" +produces: + - application/json + - application/json+ld + - "*/*" +externalDocs: + description: cheqd Network Documentation + url: https://docs.cheqd.io/node + + +apis: + - url: ./api/docs/cheqd/did/v2/query.swagger.json + tags: + rename: + cheqd.did.v2.Query: DID module queries + + - url: ./api/docs/cheqd/resource/v2/query.swagger.json + tags: + rename: + cheqd.resource.v2.Query: Resource module queries diff --git a/api/docs/statik/statik.go b/api/docs/statik/statik.go index 2e2984bb8..0974ccd63 100644 --- a/api/docs/statik/statik.go +++ b/api/docs/statik/statik.go @@ -6,9 +6,7 @@ import ( "github.com/rakyll/statik/fs" ) - func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8|\x91A\xab\xdaP\x10\x85\xf7\xf9\x15\x87t\xf1\xde\x03M\xf6y\xeaB\xbb)\xb8(\x88\xabR\xca5w\x12\x07\xc7\x99ps/A\x8a\xff\xbd\x98\x84V\\t9s\xbesf\xe0\x0c\xac\xde\x86\xc2T\xccy\xac\xd1$\xad#\x9b\xbe\x7f\xe0w\x06\x94\xe5\x8a\x14\xd8[\xbf;o\xc6`\x80l\xd3\xd9\xc9N\xdb\xe9M\xda\xdd\xbb\xfb%\xa0\xa5c\x9b\x8d,\xaa$e\xc7w\xee\xfe\xf7\x0b\x92\xa2,\xd9\x92H\xd9J\x9a\xa2\"\x06\x13\xd7\xa2\x0e\xc9\x87\x87\x87\x87\xe79\x92\xf9\x1a\xcf\xe7\xc0&\xe8\xd5\xb0\xdb\x7fuB\xc2\x19\x9d\x9c $\x88\x08`\x82\xbc\x05|\xf5\xd1\x07\x10k\xca\x1eP\x07\xdd\xbe\xbd\xfb\x84p\xe8\xa3\xf9\xed\xc77\xe8oX\xc0\x1ao\xd05\xf5\xe2%\x84\x02\x0bB\xc3\x13\x84|\xe0\x1e#\x91\xfc\xd7$\x7f1\xb94%\xe1\xbcD\x16\x84~DI(8\x9aQ\x96\xb4\x1f\xea\xf6\xbb'\x08\xad\x80q%v5\xe8>\x9e \xe4\xd1P`O\xc8.#\x14\xe2%L\xd0\x1bu\xcf\xaf4\x0e}\xdd\xe6;\xb2$\x02|U%f\xc1\x04-\x84\x88\xf8\xa4\xd7S\xd2\xbb\x84\x9e \x14\x10\x0fB\x0eY9W\x11\xf6\x16\x80\x86\xdd\xfe\xfe\x9ds\"\x16\xf1\xb4\xeb\xd1\xa5\x16\xa2\xff\xdf \xa9\x0f\xbdi@\xa7\xbd%&a\xef\xdd\xcd\x9b\xb7\x1f\xee\xde\x9eL1\x87\x8fX,&\xa8\x97\xc0\xdd;\xe1\xde\x02\x96\xc0e\x83\x1d%6\xfd\xc0O<\x1a\xf28\xbd\x88\xa3( \x9e\x1aJ\xef\x0bW\x00\xef\x7f\xf9_\x81\xaf\xbe\x7f\xf5\x97\xde_^\x9dD\x8c\xfa\xb1w\x84\x00x\x14\xc0B\x1c\\SO \xc9\xcdh^)v'?\x87\x93O=\xde50\xf7$<'\x11\x16\x0b%3A\xce'~o5\xec\xfdI\xfc\xffh\xf4\xe7\x90L'B<^.1\xdbL\xd0\xaf \xbc\x05\n\xb0\x00.\x8c\x0e :C\x18]\xdf\\\xa7]P*\x83\xd1\x9c\xac \x94\x17\x12)4\x02\xa6zw\xe3O\xd05\xf1\xaf\xa9\x97\\a\xc0#\x1ar\x0d\x94.\xaf\x86\xfd\xfe\xab\xed?w\x86~\x85x\xecy\xc0\xf9,\x0e\xd2\xbb\xbb\x99\xdajZq\xf6~\x84\xc4&\x82 \xa2\xd3/\xe0\x89\xdc\x85\x88\xc9\xae \x92m_\x97\x15\x0eb\xd8\xfd2]\x95\xbft\xf6\xae t\x97\xeb\x18\x0db\x91`$\x16\x90G\x89\x81\x88Y\xc8\xe5\x85\x0293\x1a\x04tM\xc2\xf9\xe4\xa4\xe0j\x07\xf9\xc4\xbf\xf7\xa9\x87\x88\x12P0'\xbb\xed\x15\x8bY\x82\xc0>\x16X\xcaID\xe5:\x99^\xc7\x9cS\x8f`\x01>Z\x13\xb1(\xe9\xb5C7vo)\x9d\x16T95\xb2$\x18\x14]\xdaQ\x18_\xa9\x9b\x1eR\xc10\xbb\x85\x12*{\x86\xac\xbd\x93E\xdaEx\x14e\x97M\x1b\x981\xbc)\xadC\x04,K[@\xa9\x10.\x18 \xe7\xe5-U(\xad)Iw%D\x18\x05\x84\x0b9\x83\x9foo8\x8a9\xf8HPD|\x08\x05\x99m\x14\x84I\xf5\n\x81\x19\x05\xf0S\xac+\xea_\xc3\x0c\xc7\x81\xd8Z\xae\xf5z\xdd]\x8f\xba\x94\xcd{!\xd7FjPr?\xf1m0\xbb!\xf4\x7fU\x08\x11?\xab?\x85\xc3+\xbf\xf9W\xca\x96X(m\x9c(\xab;\xf9Y\xeeq<\xc2\x1e\xfc2\xf99\x0e\xc9\xd7\x18: \xc4\x04\xd8/\x15Z\xc5h\x10\x00\xb3\x8d\xf89\x14+\xb7\xd0\xac\xea\xa5\xfb\x9d\xd7\xb0\xeb\x9bk\x89)\x16\x083@X\x1a>\xa5mvQ\xce\xf0\xaf\x80\x91Y\xb2\xd1\xde/A,\xa8U[\x1a\xc1\xae\xc2z\xe8b\xb7!\xbaTi\xb7.N\x93\x95Tu\xb0\x05\xbal\xf5]k'\xdaj\xa7\xd1\xfe,\xb4Vy\x1a\xfaJ\x1b\xa0K\xb2V\xac\xf5\x9c\xd7\xd2O??\xc0\xa6C\xfc\xb2E\xa5K\x81\x9e\xdc+`m\x88\xd6\x06\xbf\xd2\xcc$57\x11\x18\xf8\xd5\xe7\x02\xc4SDm\xc2\xde>\xe2e$\x1b~\xeb\x0fOO\x07\x97\xff\xc8\x08\xf9\x1d6\xc3\xfe\xb0_)\xc3\xc5\xe8\xe8R\x1f\x0b\x07E\xcc\xdb\x8e\x1d\x03\x9c\xb9\xa8\xbf\xb1\x8a+\x84\xd0zW\xe3JYC\x17\xb1\x00Fp`k\xfcI\xc0/\xec\x89\x99\x87(\x9e\x06\xc4C\x0f\xb0yZ\xf0\xdf\xd0\xe5\x92\x86\xc1F\xfb\"y\x19\xa6Kr\xf4\x16C*\x8b\xee\xf2\xdf\xd7\x0f\xaf\x93\x8f\xbf\xc3\xe6\xaf\x98\xc3\xe9E\xe6\x8b\xf7q \x88<3V\x19y'\x08\xb3K\xed\xbd\x1a.\xf2aFB\x90\x9b`\x01\x18\xaf\x11\xe6\x95\x02\xf5\xdd>\"a\xba\x12\xdeP\x06\x88G\xe0\xa5\xc2,\x90\xe6\x0e\x8c\xd5\x90\x158c\x9fn\xa53\xd6\xf1(\x83\xdeO\xd9!t\xf4\x10\xca\xfb\xef\xee.\xac\xf6a\xcb\xb9\x0d\x05\xc8U\xc1\xa6\x1c\x0c\x0f\x87h\n\xc6\x9d\xadBHI\xdf \x8c|2'\x02\x07\x88\x93y\x88E\xcc\x00Q\x86<\xb6\x89\x04\x9d3\x1c-\x88'7q:+3\xc18\x16\x0b\xb9\xe0=\x0b\xd2\x0dz\x1d\x8dyl\xf9\xbe\xdb\xe1W W\xc8s\x87?\xd32 \xbc\xb5\xf8f\xa5\x19\x03V{]\x92\xfd\xaa\x8b\xf5\xee-\xba\xd3\x8d0\x06(\xc2\x0c/A\x00\xcb\xf4\xb9\x93$z\x13\xbfL\xf7vbIr\x01\x95F1s\xabKP4\x03\xe1-\xf2\xabK\xda\xf1\x0e\x17\x9b\x00\xf4\x19;\xb36oB\x7f\xb3\xbd\xa4\x0e\xde<\x8e\"\xca\xf6\x9d\xbf\xfa\xc9|\xb9\xdb\x93\xcdbg\xee:\x19qKL\xc2\x10\xc4\xc4\xbb\x18\xce\x86\xd3\xfe\xb03\xf5\xf1\xb43\xf6\xfd\xf3\xce\xf4b4\xea\x8c`0\x1e\x9d\x8fO\xfd\xb3\xc1\xb0T\x88\x00.\xa4\x90\xf5\xdf~{\xfb?\xec\xdf\xab\xbf?\xde^\xac\xd6\xa7\x1fG\x9f\xff\xf9\xdb\xe0K\xe66\x12NP\x84\xc5\"\xf3\x15\x83\xaf1a\xe0O\x90`qv\x0b)\x98{\x81\xe7\xb9)U\x86\xa70\xbb\xbc\x97l\xc3\xbd?\x93\x0f\xd6|scx\x9b\xc88\xff\x87\x16qbF\xd8&\x9e\xef\x96\x9a\x89\xe7RI\x80\x0b\x9d\x91sx\xeey\xe1\xa6\xe8\x98t\xee\xd6\x85\xdd\xbb*\xadk\x9bw\xdeX$\xd4\xe6\xd3\xa26\xef\xdc\x811i\xf3\xce\xf7\x8a\xfd\\`J\x9bw\xbe_\xec6D\x97\x97\xcbW\xb7y\xe7\x07\x81\xef@\xcc\x8a6\xef<-m\xdey\x9bw\xde\xe6\x9d'\xe5\xf0\xd0\xd8\xb68\x05\x11u\xb1\x85\x12\xdb\xbc\xf36\xef\xfc\x90\xa4\xc46\xef|\xa7\xb4y\xe7\xa6<7\xf2m\xde\xf9N\xf9v\x13\xd0\xe6\x9d?3\xf4m\xde\xb9\x1d\xec\x1f\xe0\x1c\xdf\xe6\x9d\x1fs&\xaf\x9f\x1d\xdd\xe6\x9d\xb7y\xe7\xdf\xf2\xd4\xd6\xe6\x9d\x17\x16\xeb\x8apZ\x0b\xee\xd8\xb5y\xe7{\xa5\xcd;/*Nz\xd7lFt\x9bw^\\\x9aE\xb9\xcd;o\xf3\xce\xb3\xc5I\x05]@\xa9\x91\xb7\xeb\x88\x87\x93F=}~n\x9bw\xfe<(\xb7y\xe7\xe8Y\x11\xb7\xa1\xd3\xe6\x9d\xb7y\xe7\x9b\\\x02\xa5S\xfay\x91\x94^NL\x9b\x85\xdef\xa1[\xacw\x9b\x85\xdef\xa1\xbbf\xa1o\xa7q\x95\xcb\xf3F\x96\xb9\xfc\xac\xe7\xb1\xd2K\xb5\xcd\xe7\xed6\xab\xda\x98\xec\xea\x8c\xe4\x92\x99\xfc9\x8e\x89_\x0e\x0e\xb6s \xa2~\x18\xc2\x12\xedyVT\x1b\x8e\xf2|[`\x1d\xa2;.\xb1\x1d;j\x8d\xc6u\xeaGu\x1cb:\xf6\xa3\xb1\x83\x9a\xd9\x81\xa8q\x16v\xc2\xc0Ao\xaa\xcf\xbb\xc7\x9fv\x1dc8\x8d\xc0\xd7l\xf4\xc6\xdd\x9b\xc8\x96\xe7\xc2\xb5F\xd4\xa6\x11l\x1b\x8d\xd7\x1c\x19\xady\x1e\x8c\xab1i6JS#\xfe\xe0\x14\xa1i<>S\x05F\xeaZ&\xfaP\xe6v\x8a\xdc\x13\x8c\xc5\xf6\xab\xe4 \xc2\x08\xcfIX2\xde\x9cc\xb9\xad\x98N\x8cl6\xf3u\x12\xf1)r:u\xa9t\xf2\xaa]\xb9\xb6\x12\xb99\xea\xe7MZ\xc1<\xc4`\x82\x03/\x96\xf41 \xbc\x10\x8f9\x07\xf1\x11\x8e\xaf\xed\xb4\xba\xd3\x92\xd9@\xb2/PHu\xc0\x98\xbbRQf\xb2\xd1\x14\x02\x1a\xce\xe5~\xd3E\xd7\xc9!\xd4\x0b\xe4\xf6\xdc\xe1\xc4\xafz\x90\xe8\xd3\x82p4#\x10\xd8\x9fJ\x92Np\xa0\x9e\x94\xa9zl@H\x81\x95\x8f\xd2<1\xbeE\xa0\x9a\xfe\x1c\x87\x0e.\xc0F\xe7\xf5H\xdb\x97\xc4\x04Ke\xedDQ\xd3.\xd9#\xa8 \xff]TE\xd9\xee\xa7DS6\xa0\xc7\xbe\x88\x978\xec0\xc0\xbe\xda \xd5\x05\xf3R\xcd=|\xcb\xb5\xdf \xf7k\n\x1c\x85T o\x81\xc3\xb9\xd4o\xb1\x06\x08\x91Of3`\xd2\xeb4!\xcb\n!ih\xf9#\xe6\\\x1e\xdb\xee\x94\xe5z\x8d\xde\xfa\xb1\x0e\xdd~b1\x17\xb70'\\\xb0\xe2\xc7P\x92f\x9e\x14\xe242_\x802\x87%\x0eE\xe6E\x7f\xc5yd\xdbr\xa8\xa6\xdf \xe9\x85\xc8c/N\xc6\xd3E\x7f|\xfct\xf3\xc7\x87\xabw.\x18\x0f\xba\xfdn\xff5Z\x0d\xbb\x83n1\x17b\x0c~\xe5\x03\x83\x8d\x00\x9akI\xc3\x9aZJ\xf5\x95&-\xcd\"\xe6h]\xf5\x1cmV\xbf\x11\xe1u\x81U&\x84p\xf4\xe1\x8fOJ\x94z\x1a\x08\xa7\xb1<%\xf6\x15GK\xf0 V\xbdsA\xfb*\xa4\xe1\x1b\x06>7*}'\xb0\x88\xf9;\xc2\xc5\xb0?,~-\x9b\xd3\x83YU[\xaf.\x96\x87\xb2,\xdb\xb0.\xb6\xcdX\x97\x98\x91\xaa\xcbN\xca\x92T\xb4\xaa\x8c.1#f\xef\xf8|{S\xc3R\xeb\xb2\x0d\xe3X*\xda\xfa\xb1\x1f\xb2y\xff\xe5_\x8f\x1f\xfe\xf7_\xbf\x9b\xbf\xa9/\xca{\xe3\xb3~\x1f\xf0\xe8\xb4sq98\xeb\x8c\xb17\xeeL\xc7\x83a\xe7\xf4tz1\x1b_\xfa\xfe\xe5\x18\x8e\xed\x90a\xaa\xd4k4W\xc0\xba]\xd5\xbdn\x08\xa27\xe8\xf6{\xdb\x0dQ\xbd\x19\xf0\x99;_\xfc\x94i\xf2\xf9\x0b\xa7\xa1U\x82\xe3\xf0\xe7X\xc0\x1ao\xba$\x9a\xf1.\xa1=\xf9\xb77\xc5\xb3\xcd\x14\xc8\x02\xc4\x97a8\x1f\xf9\xe7\xe3\x87sq~:\xc6b5\xe4\xa7\xfe\xc3\xf9Y\xe4}\x15\xab\xc7\x80\x9f\xf9\xa1\x80\xd9\xe8\x11\x9f1\xfc8<}\xb4\x8f\xccr]\xb6?\xe9\x1d\xd5\x83r\xe1\xd9S\xc1\xf3.\xc3L\xcb\x85\x9bb\xf6\xba\xf5\x99\x03Y>\xdf\xde\xd45\xdb\xba\xb8\xafh\xb9f;1#\xf6\x8aR\x99\xdcj\xca\xe9U5\xcb\xaa\xd8\xf3\xf1M\xb9\n\x040y\xbc_\xc1gF\x92\x97;\xa6_\xe9\x17\x8b\xee\x06\x05+\xc4 \x8a\xb0:$\xba\x1b\xc8\xbfnL\xec\xea5\xc2\x02\x05\x80\xb9H\x8f\x15\xd2\xda\xca\x93\xfa\n\x07\x90\xc6h*\x84e\xf6c\x14\xd1(\x0et\xf2Pq\xe5\x1cJ\xefR\xda{g\xf4\xc6\x95\xbd\xbbz\xff63\xa2\"\x81j\xaf~z7f\xdb\x8c\x1c\xe6\xcd\xd5\x87\xab\x8c\x97Pz\xb2)\x15\x17\x80?\x07f\xd3\xfb\xd4\xc5\xc0Q\x14$\x19\x0e=iC_#\xb2\xc4s\xe8E%#z\xe1i\x93R\xe7\xd6\x0b\xe2-\xf2\xfe\xdc\x1asS\xbb\xfc\xad\x06\xc6r\xb8!xh\xae\x9f\xfc\xefS\xbf?Q\xff\x15\xe7\xfay\x0b\xf0\x1ex\xbc<\x02d\x07\xf0\x92F\xb4\xe9\xbd\xfb\xed\xaa3<=\xdb~\xbb\xc0|\xb1\xef\x19\x95 \xab\x07\x9dA\xa4\xdc\xe0\x0d\xc6\xb8?\xbc\xf0\x86x\x84\x87S\xefr|~6\xe8\x0f\xa7\xd3\xe1\xc5\xc5p4\xf6\xc6\x83S<\x9c\xf6\x07\xb3\x8b\xe1\x05\xe0\xb3!\xf6N\xa7#\x18\x0f\x8bi\xff\x17\x94\x9c\xb5\x8dT\x14$]\x95\n,\x8el\xb8Am\x8e%S\xcc\xc1G4\xcc {\xc5\xf5\xf1\x1e\x87~\xfe\xe4T\xde\x15\x8a|\x10\xc0\x96$\x844 \x94\x88W|{\xe6q\xd8%\\\x02\x1e\xdf>Sq;Y\x8aV\xcc\xc7uJ\x85\xfdX\x13\x95\x80\x9bf\x9cpAY\x92\xe5\x95\x06\xbd\xcdo\x16t\xf4\xebw\xca\x83\x86\x89\xb0\xf4\xd4\xb0M\x851ij\x99\xa0\xa9f\xdf4\x12\xcb\xfc\x03\x109i\xc5i8\x05\x81tk\x02N\xc1\xb4\xeb\x04\x9c\x02a\xe8\xf6\xe3\x9b6\xfd\xa6M\xbfyY\xe97E\xfc\x12\xb2r\xb6;4\x06.\xcc\x7f\xcf\xfc\xdaC6\xe2\x95\x13\x95a/\xf2&gkf\n\x12hr5K\x0ej\x1d\xe4\x940\xb3s\xcfS\xe7\xc7\x1cA3n#'\x7f\x12\xdf\xfa31xk\n\xeb0\x8cj;)&\x1awl\xf4\x8bg\x17\x0b\xecA\xc5\xb6_\xf9\x831)\x94\x99\x1f\x8b\xb1\xfe4\x0c\xcb\x1cT\xf3[V\xba\x12\n\xef[\xee\xbc\x00i\x9f2\xae\xfbC0\x85+\x0f\xd9l]\xb5\xa5+G\x19\xd9\x04#\xabpY\xca\xdf\x1c\x85\xdc\x0c\xa1C\xba6\xda*\x85\xac\xb3\xf5.\xf0\x1a\x19?%\xebs\x15\x8fU\x0bH}\xb0\x8c\xbf\xa3~\x9a%\x14\xdc\xdd\xdf\xb1\xbd5\xab\x01`\x9d\xe8nG\x84\xed\x8et\xa3\xa4w#\xb4\xf7\x81\xc4w\x85<\xf5\xb27\x1b\xf5\xdd\xdcO\xe3T\xa2\xdd$\x05\xde, ~\x08\x0d\xeep\xdc@\x16*\xbcAlk\x12\xe2\x15\x92\xea\xceC#\xa4x3\xb4\xb8\x95\x18o\x10\xf0F\xe9\xf1\xc3 \xf2\x83)\xf2Z$\xb9#M\xde \xbc\xcd\x92\xe5G\xd3\xe5\xcd\x12\xe6GR\xe6\x8e\xa4\xb9\x0bmn%\xce\x1d\xb6u]\xec\x9b\xbb.V\xfa\xdcQ\x89\x92\xaa\x0e\xaa\xa4\xcb\x91$z\x0d\xd2\xcdN\x90~\x03*\xdd\xa5S/\x9aNo\x82P\xaf\x03\xc2s\x93\xea.}{Rb\xbd\x06\xb5\xfeDK\xb4\x1e\xc1n\x15\x97,\xf5\xfa\xa6^\x97:\xeb\xdd\x95f\xafC\xb4;Q\xedu\xc8\xf6\xc6\xe9\xf6\x83\x08\xf7\x86)\xf7\x9a\xa4\xfb\x13\xd0\xee.\xc4\xbb\xe3\x82qY*\x0d\xd3\xef\xae\x04\xfc\x11\x14\xbc\x95\x84wD\xc7\x95\x88w\xc3\xb1a2\xbe.\xa7\\\x83\x90?\x84\x92\xb7\x93\xf2\x8e\xa0;A\xd9$5_\x1fH+=\xdf0A_\x8b\xa2o\x10\xe6\x83\x88\xfa\ny\xa5\x11\x18W\xe0\x1b\xe6\x80\x9bb\x81]\x033n\x94}\x83\x13\xd8(q\x7f8u\xff}O\\c\x14~%\xe1n\xeepb\xd9\x13^\xbd$\xc4\xdaR\xeb\xba\xb4\xd4zK\xad\x9b\xf2\xa3Q\xeb\x07\xbcR\x84\xec\xd2\x1a\xbb\x84o\xb7\x04\xb8\x1d\xcbyd\xcf\x1bK\npx\x149\xa3o\xbb\x89\x02*\xb2z\xf8S\xc9\xc8!w\xe0{y-mE\x0e\xc1\xe1\x94\xb9\x03\xf1j5B6\x17\xa81\xb2\xf5h\xa2\xf5 \x92\xb5\xfc\xe9b\x1b\xc1\xfad\x886G\xa86G\xa6\xd6%R\xad._9\x81z4~5ISK0\xc5\x05\xe7\x06\xc8\xd2\xe3\x89\xd2J\x92\xf4hP\x1b$F\x0f\xd3\xe5\x83\x08Qg2\xd4\x81\x08=\x1a\xc2\x83\xc8O\x07\x1ck\x13\x9f\xcd\x91\x9eG\x10\x9e\x0edg\x95\xcb\x8fl$\xa7\xc5\xf5G\xd6\xcdS\x17\x0b\xb1iU\x8a\xa4\x9aC\x1c\xe1H2\xd3\x91\xd8\xa8\xee\xc13\xf3\x7f\xd5\x9dy\xc1\xc4\xe5\xb1\xa4\xa5\xdb\xc0\x9f\x97\xac\xac\xee\xd3\x13\x92\x94\x8e\x04e\xa3K\xad\x1e)i \xd9\x1d\xfc\xcc\xaf\xeb\x9au#\"]IH+\x01\xe9J>\x1eB]Z\x82\xaf%\xf8Li >U\xbe[\x82\xef\xff\x03\x00\x00\xff\xffPK\x07\x08\xdd\xb1\xdfo\x88\x14\x00\x00\xe6\xd2\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x04\x1b\xae\x9a(\x01\x00\x00\xfc\x01\x00\x00\x16\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81\x00\x00\x00\x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x17\xa0K@,\x01\x00\x00\x10\x02\x00\x00\x1a\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81u\x01\x00\x00swagger-initializer.js.bakUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xdd\xb1\xdfo\x88\x14\x00\x00\xe6\xd2\x00\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x81\xf2\x02\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xe1\x00\x00\x00\xbd\x17\x00\x00\x00\x00" - fs.Register(data) - } - \ No newline at end of file + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger-initializer.jsUT\x05\x00\x01\x80Cm8|\x91A\xab\xdaP\x10\x85\xf7\xf9\x15\x87t\xf1\xde\x03M\xf6y\xeaB\xbb)\xb8(\x88\xabR\xca5w\x12\x07\xc7\x99ps/A\x8a\xff\xbd\x98\x84V\\t9s\xbesf\xe0\x0c\xac\xde\x86\xc2T\xccy\xac\xd1$\xad#\x9b\xbe\x7f\xe0w\x06\x94\xe5\x8a\xe5\xe3\xa1\x01\xa6\xa9\xbc\x14Fj\x0d(E\xe5\xfa\xf3\x80`\x1a\x81\xd0\xd7\x06\x9b\xd58\x03\x14\x19\x86(\xa3\xa4&\x0c\xf8kp\x00\xf0\xe1\x1cF%\xc5sxC\xf8\\L\xc3\x8e\x98h\xd7Jx\xc3\x9e\xc3\xf5\x82\xf3\xd7\x0b\xde]\x14\xac\xcaZ\x8b\xb7\xc7\xe1\xbd\xaa]\xc0\xbb\xeb\x05\x1f\xae\x17\x1c]/\x18k\xfc_\\0]\xdc\xb5\xa4\x088)\x0b\x1d\xce\xbc\x8f,Z\x1f\xb9J\x95q*\xc6\x83\xe5\x00\xb8\xa5\xf2!\x19\xf7V\x1a\xa7\x8fb\x98\x97\xe1\xd7TO\xdajXVb\xb8\xe1`G\x1b\x1c,Q=i\xdb$\x86*\x0e^\xd4\x80\xda<\xf5\xa4\xdfK\xe8\xfc(%uiC\x8a(-\xd2\x9eD\x95\x02\xedKe&\xe8 L\xa4\"\x13F \x8c\xa5<\x13\x86 \xbcJ\x01\x13\xba \\\x98\xac\xcaZ\x87\x93\xdc\x8a*\x0b\n\xa5X\xd4\x05;\x17\xd0a\xd4\xa2hiR\x0c\xd2\xe2&-B\xde\x0d\x8a>\x91\x8ai\xcd\xf9\x8b\nD\x17\x158\\\xaf\xc0\xeez\x05\xb0\xcdWT)(PLQ\xc1\n\x14\x14\x13E\xac@R\x0c\xd2\xe2&-B\xde\x0d\x8aX\x81\xa4\xe6_[\x01\xea7;R\x11\xfc\x18\xfe\xa2O\x8b\x12^\xb1\x06\x08\xfe\x96E\xca\xd8;U\x01\xa9&4\xe4\x13\x1e\xf2\xdaY\xba%\x0d)K\xee\xaa\xc4#\x12mV\xc8\x9a\xb5\xc0]\x95X(.\xd9\xa4J\x89NZ\\\xbd%\x16x\xde\x0dj^3\xcd\x01\xbd\xf3Pt\x99\x18\xd1;\x07E\x9b\x97\xbbBq\xc1D\xd1\x95w\xc6\x8aa3\x9bu\xc6\x9da\xb0\xe39\xcb+\x0e\x83\xd3\xe1\xe6\xeaaD\xef\x06\xa0\xa3o\xb3\xe9t\xd7\x03\xe1\xd1&R\x9e\xdeuA\xe8\xa0\xf6\xf6\x8aHj\xf3\x8e\xd9\x06\x0dj\xd1;\x15\xce+6\x98\xab2\x8d\n\x14)\x0e7\xa7C\xef\xeaa@\xefZ\xa0\xe3\x1e\xcbx\x00\xa1\x8d\xa6t@\xe8\xa2\xf6G(\xfd9\xae\xbbE\xef^\xe1\xfc\x08\xcf\xbf2\x8d#\xd0(\x0e7\xa7C\xef\xeaa@\xef\x96\x04\x94\xac\x08\x96o\xa3\xe8\x10\xb4\xc0E\xd1#X\xc6\x9a\x89\xaa\xb6\xa7k\"\x15\x95V\x8d\xd1\xb6v\xcb\x1cQR\xc8&\x85\xeaU\xa1B\xe7b\xcc*\xad\x881\xbc\x16\xd2IZX\xa9 \xc1\xbc\"\xa8\xda\x9a\xce\xc5\xe0VZY\xe6q\xb5:\xf3\xb8I\xc1R\x13BV\xb9\x14T\xadB\x845U\xa5\x15\xc1\xf9\x10\xd5\x9c\x04KM\x08Y\xe5RP\xef\xf7\xca\x9c\xefv\x980eq\xc7\xc0$\x94\xad\xb4\x0fb\xd2\xb3X\x12~\x8b\xb0:B2\xc0\xbd\x93\x15\xce\xdfw\xf1\x1a9!\x1e\xe5i\xde\xc2\x9b\xa0\xa7\xc9\xd7z]\xb60\x83\xd5\xd8=;\x93\x98\xfcXX\xed\xa2H4\xd4\x82c\x07~7\xef\xe2V\xe28J\x9c}\x0b\xcf\xbei\\b\xc1S\xbch9\x8b^7\xd7{\x177\x13\xc7A\xe2\xec[x\xed}\xe3\xb0\xe5\xfe\x01\x8d\xa3\xbe\xd6\x02\"\x1f\x81\x07\x1as\x8b\"\x18>hoY\x0c\xc0x\x18\xf2\xc9\x98\xa8G||r <>>9\x90+gi \x1c\x88\x8c\x9eE\x03#`\xa7\x0b\xf6#\x14Y\x1a\xcab\x05\x88\xab\xbb,\x98zHT\x17WzAb\x0dv\x80\x8d \x13\xd7oT\x8e\xbd\x96\x85ip6$\xf2\xa27\xcb\x8a\x94\xaa\xd0\x86\x1bP\x8e\xd8p\x885\xe3\xca\xd0TN:\x93\x9bC\xb8\x0dUMT\xf3\xf3\xbf\x1e\x94\x8e\xd3`\x03\xc7\x07Q\xdf\xb8\x0bx\xb7\xe3\x16\xc7\xf5\xd6R\x1b|@\xac\x12mpH\xb4\xc4!\xb1\xae,'j\x99M\xe8\xf6D\x1b\xa8\xa2\x96\x98\xb7\x96\xd0l\xc2Y\xd4\x96\xdc\x04\xc2uk\x19\xceF \xfd\xc95u^\xa4W\xc5 \xfe\xd1_\x8clvp\xbc\x83\xe3\xb8\xb7\xd5F\xec\x82O\xf5:\xbc\xd9ZNb|\x14\x85\xbe\xb8\xe5p\xab\x0bW\xf3\xc5\xc4\xc8\xa8%t;b4|8\xf2v\x89\x96\xc06\xab*\\\xf3\xfb#\x0f\xd3\xabb\xfa\xfd\xe8o\x00\xa5G\x89\x96+\x8a:\xc6S\xf4wh-\xf5\xff\xb5\xd6\xa2\xf5N#\xc5\xe75\x91!\xfe\xad\x89\xc9|\xe2\xe4D%w\x8a\xdc\x16D\x87\x97P\x86\xa7\x1eH\x12?\xf6\xc6!\xf1k {bd#\xda*n\x93|B\xf1\xe8\xe4$\x93\xbe\xc7Lt\xda.\x81\x04 \xc4KtZ\x1e\xa7\xf9\xb9b\xb4\xf8\x17+\xa6{\xb5u\x1a\x99\xe7\xee\x87\x9ej\x9br<\xf4\xa43\xe5rR8\xddRq\xe9j\xa3\xbdN\x86\x12\x1d\x9ad\xc2\xafw\x1c\xc8\xeb\x82\xb4%:tH\x1f\xea\x04\x17\x84\x9a\xe2\x1a\x05^4\xe2{sT\xbe\x8f\xaf\xeb\xc0\xf50\xecLS\x915q)%OO\xd7mV\x89\xf4y\xc2\xd2`\x91;rJ_\x86\xe3\x8d\xb8\x80\xa3\xc1\xb6)\x86\x0fZ\x83\xb7P\x8d\xd0\x8a\xda8\x0d\x8b\xb8Yp\xa4U\x13K9G4`\xdc\x14\x02\xa1\x8ap\x0e\xc9\x8e\xfb\xa1\xdf\xa6(\x17\x07b2J\xf9\xfcorS6H\xe8w~\xf07\xb9\x89\xfbsz\xe8^\x15-\x8d\x0b\xed\x0d\x8e\xb0\x86\xac\xf2@\xea\x99nHC*\x92\xf9\xd3P\xa2\xc6\xf3\xeb\xc7\x87e~\xa8\xbf^\xf1\xf6Y\xc29F\xbb\xc6@\x96\xf0\xff\xf7\x89Y\x94\x08\xc4\xe6{:\x90\xa8q\xa0O\x9f\x15\xb2I\xe1\xd2\x9db?\xe6\x13\xc7\xc9_\xec\xb5r\xa2\xc5\xf2\xc9\xad\x032\xaf(LuUy\xfa\xacPK\nW\xeb\x7f\xc6{\xd6E\xf7\x16\x13\x06\x1e\x92{\x15d\xbeh0\xd5V\xe3\xe9\xb3B-)\xfc\nsh\xbd\xd9\x90vtA\xee\x1c\"Q\x93h.\x91LeA\x1e\"\x10\xdb[\"\xd5\xe8\x82\xb4\xf0l\xdb\x15\xeb\xf6\"]\x90\xbe\x05\xe0`I$GY\x90\x97\x0d\x88C\x9fH\x96\xb2 O\x16\x91T\x93\x8c\\\xb1\xd1\x90\xa7\x0b2\xc3,\xc6\x92H+eA\x16\x04\xf3X\xc4\xc7b\xe7\x98iE\xe2\x82X\xae5\xc1l\x1b\xc2\xf3\x85<_$\xf2\xf9,\x85j\x11\x15vo\x96Da\x0b~\x8b\xa86\x91\x82\xb4\xe81\xd1\x02\xb1\x19\x17\xc2\xd2t0M\x17\xb6\x0cRb\xc4D\xd4?\x88k\xb3\xa1K2\xc64:l:\xa4D\xa6p\x8cY\x8c\xb8\x14\x96\x05w&,\xe2\x10\x9e)\x05\x04\x00\xb0|+\xd2q \xbf\xc9\xc0\x83\xbe\xa5\xb2\xde\x90\xca\x9a\xdc@\xeee@C\\\xa02)]\x12\xb8\xd4\x92'\xd0\xcf0Y\xd7D\x99J\xd4#\xea\xec\xb3\x82I\x7fF\xb8\x9f\xf1\xb5ALtp\xa9{Ml2b\xe7\x1d2\xfe1\xd1\xf95\xa2G\xc6\xcc\xad\x9f\xae\xc5\x82a\x16K@1=,/\x7f@\\\xfd\x1a\xd1\xa3c\xc6\xac\xa7K\xc2'\xc3\x14L\xaf\x8c\x7fL\\\xfd\x1a\xd1S\x98at\xad\xb0\xc8\xc2'\x93g\x89n\xc8\xf4\xe5\xb3B1\x16\x8c\x17\xbeJ\xffU\xbf\xb8}\x84\xfc\x1f\x87X\xf1\x90\xab\x12\x9fli\x8f\x95\xbc\xa3\xfd\x1f\x13ki\xf13\xf1\xf7\xe7\x7f\x91\x801\xd2\xe3+\x81\xc4\x80,\x13\x9f,T(\xdaR\xfb?&V\xd3bM\xb4\xd2/\xf95\x13\xfe\x14\x17<\xab\xd4~\x9bO\x8e\x0d(:\xdf\xe8\xff\x98XM\x8b\x9f1\xe6\xf3\xbf\xd7\xcc\xa6\xb6\xd68m\x9f\x9c6\x19\x90\xb0\x94S\xd2x\x1b\xe1=\x1c79\x001\x13\xbfXd\x90X\x0e\xc6\xdb0\xea5\xdcJ\\v\xb7\x12\x8b\xa4\xac\xf0\xd4\xc9\xbb\x87\x92\x1b Wq3qi\xfeWh\xa3\xb7q\x18\x9e\\-\xad\x12M\x10%B\n\xfc\x0d.B\xe6|\xe2ws\x11\x08\xa7\xcf\xd2\ni|j\x13\xea\xad\xdf\xe4\x00(\x12:I\xb7\x81u\xd1\x9f\xf1\xefY\xaf\xae.\xfa*\xf9\xbb\xb9\xe87\xeb\xa2\xfd\x92\xbf\xdeE\xcf|\x94\x1e\x1a\"O\x0b\xa4\xa6\x0c%\x9a'\xb7\xca\xeb\x7f\x9bX<\x89\x15\xe5U\xaa\xd1\x02\xc9\xa2X\xffo\x12\x99UUR U\xd2\x03\xabH_ZQ&\xea(N$\x0b\xc4\x11\x8ac\xc9\x04\x11\xab@\xd8\x8a\x87\x89]\x14\x1f\xa5\x1a\x88\x03\x14\x9f$\x0f\x12\x1b(\xce\xcfU\x9d\x15\xb4I\x8b \xabJ\xa4/9\xb4@6h\xf3\x9aU\x810\xb1\x8db\x07\n\xda(#\x14\xc7P\xd0F\x19\xa0\xc8\xc2{&vQ|\xe4y\xe3\xb3\x11$6P\x9c\x9f\xe7=;{V\xd0\x99Ug\x05m\xe0\xac\x8e\xe2\xe4\\4A\xec\xa1\xd8\x97\x02\x10\xa7(\xce\xceU\x9d\x95\xfb~A;\x10M\x822\\\xb5N\xe9>\xab\xd3E\xf23u\x07\xbe5W *\xd4\x14\xee\xc9\xf9\xaf\x11\x0eI\xa1\xac\x14\x88\x06\xc2\xdd\x7f\x91\xa0\xe2\x94\xb5)\xf4\x92\x03w\xbe0QGq\"e\xe1\xec\x08\xc51L,\x9b\x0eQ\xc4\xd9o\xd3.\x8a\x8fR\x19\xc4\x01\x8aO\xd2\nT\x19(\xce\xcfU\x9d\x15\xe4\xa4\xc53\xabvp\x16\xfa\xd7\x83;h\n\xe4\x15\xac\x18\xbdB\xa9\xaf0QF\x1d(\xf3\x15\xca\x18\x8d\xa1\xc4W0g\xf4$U\x99\x00\xa6\x8e\xd0\xd2\xf8\xcc\x86\xe5\x013G\xf3t\x9e\xd4\x99\x94\xea\x94\x05)\xd5\xac\"\xafP\x8f\xd1$-\xb0\xc6{\x85*\x8d\xfa\x92\xc7\xce@\x85F\xb3\xb4\x82T9o\xab\x0e\x98\x80cz\xb4 i})\xbb\xcf\x12\xa6\x94X\n\xad\xdf\xe1\xf5\x8d\x0d\x91\x9eKd\xa3L$Z\x84\xf9\xbaSe\x9a\x07\xd0C\xd0U&R\xa0\xca\xf4\x00\xa0\x83\xa0\xad\x8c\xe1V\xbe\x1d\x80+\x04\x970\x98e\xea\x01h!\xb8P\x1e\xe1v\xbf\x00@\x13\xc1\x1c}\x92\xca\xaaL\xcb\x00f)\x80u:O\x14TC\xf0\x96\x8e\x13&U\x11\xac\xd0\x89\x00\xf5\x12)#X\x82\x0b\xeb\xa2FE\x04\x8f\xb4/\xec\xf4H\x89\xe4\x05\xfa\x9aD\x0f\x88\xee\xd3\xe8\x0e\xd1m\x1a\x8d\x10\x0d\xd3h\x80\xa8\x9fF7\x88\xae\xd3\xa8\x87\xa8\x9bF\x1dD\xed4\xbaBtyBwW5\xec\xaej\xd8\xbd\xa9\xc1Bt\x91FMDs$\x85f \xf6N\x1a\xad!z\x9bF\xab\x88V\xd2h\x19\xd1\x12y\x85\x8bu\x11\x91\xa6\xb2\xba%\"\xc9\x86\x94\xc8\xd3\x82\xb0$\xcf}\xa9\xa6\xca\xb4\x8a\xe0\x0b\x82\xc3\x89\x18+\x0c|Ep4\x96\xf2\xaaL\x8b\x08\x8e\x11\xd4\xe3\x02\x188Ap\xfa(F\x15\x03g\x08\x1aO\xd2\xaa!\xd3,\x82s\x04M2O\x96\xb4 \x08[d\x9c\xb4j\xc9\xe1\x15\x99\x08\x98U\xd2\xe6\xb0C&\xc9\x8a\xb9\x1c\xf6H_2\x1b2\xad\x11\xa9LJd\xcd\xe1\x80\xccD=\xb2\xa4DB\x0eG\xe45 o9\xbcK\xc3{\x0e\x1f\xd2\xf0\x91\xc3\xf94\\\xe0p1\x0d\x978\\N\xc3\x15\x0eW\xd3\xf0-\x87ki\xb8\xce\xe1\xec v\xe8U%\x0c\xbe\xa2\x84\xc1o(\xc9q\xd8\xa4)xAy\xef\xa4\xe1%\x87Wi\xd8\xe6\xb0\x93\x86]\x0e{ix\xcd\xe1\xe04?t\x96x\x12\xa7Ud\xea\x00\xb8FpC;b\x94\xe9%\xe2#\x180\x7f\x87\xd4\xa7\x97H\x88`\xc4\xa8\x0fIR/\x91-\x82;\x9a$\xc9=\x82\x87\x13I\xea%rD0O\xe7 \x9d\x05\x04\x8b\xa9\x94%\x04\xcb':\xd5K@\x99\xac'\xe88Q\xa3[\x04k\xf45aR\x1d\xc1,}Lpl\x0eAF\xdf'p\x81d\xce\x88\x9e\x13\xaf^\"K\x04WJ_\xb4\xa8^\"6\x82\x8e2K\x14\xe4\"\xe8)\x8f ;\xd7\x08n\xe0\xceg\x91\xd2G0P\x92&\x85\x08FJ<\x0dY{\"\xb8c\xe1\xde\xa9\xf8=\xa2\x07V\xfc\xa9A\x11\xcc+\xf3D\xfe\x02\x82x\xd7c\\T \xd1\xaa2\x11J\xd9\x8c\x0f\x1b|\xb26^E\x970x\xcb\xe1]\xa3#Jc\xf0\x9e\xc3\x87\xc6XT\x97\xc1G\x0e\xe7\x1bO\x82\xbb\x18\\\xe0p\xb1\x91b\xaf\x12\x87\xcb\x8d\x98\xbfX\xea\n\x87\xab\x8dyR\xf7-\x87k\xe9\xd4u\x0eg\x1b\xf3\xa4\x819\x0e\x9b\xcdq\xb2\x96\x8b&\x9fg\xcd\xd7\xa4\x81K\x0e\xaf\x9a\x8f)\x16\xe4\xb0\xd3L\x91\xa3\xcba\xaf9I:\x865\x877\xcd\x98\x1c\x19\xecs8h\xce\x92E\x86\x1c\x8e\x9a\x8fI\xbb\xb7\x1c\xde5\xc7\xc9\xd4{\x0e\x1f\xd2\x06\x1e9\x9cg\x964djRlo\x0e\x17\xd9\xbf SJ\x1c/3S\x12\x0d\xce\xe1js\x9e\xd4r\xcb\xe1\x1a\xfb7Qh\x9d\xe3\xd9f<}\x0e\x84\xfa\xed\x02\x91\xd8\xa2\xd0gK\xc92 \xc8\\\xca\x82\x18\x10\x94C\"\xd5\x0009\xb0 R\x15\x00\x8b\x03K\x01\\\xa4H\xe8@\xa0\xcc\x81\x8aP\xba\xa2\x0c\x88\x88M\xa1\xd8:Z\x91%l5\xc8D\xd4\x90e\x1a\x1c\x00L\x0e,\x88\xb4\x02\xc0\xe2\xc0R\x00\x17)\x12:\x10(s\xa0\"\x94\xa2\x15&\xb5\xa9d\xd2\n\xd9R\xb0bG\xe7\xd2\x06D\xd4\xb0\xa3!\x01\xb3\xb6\xd4\xe4\xc0\x025l\xa9\xc5\x81\xa5\x00.R$t P\xe6@E(E+\x0e\xcc\n\x8bV\xc8B\x01+,\xb8s\x95\x89\xa8\xc1RB\x02f-\x14\x93\x03\x0b\xd4\xb0P,\x0e,\x05p\x91\"\xa1\x03\x812\x07*B)Z\xb1Rl\n]tD+\x18C1\xb3\x8f\\C^\xe1\xady\xe4e\xe4Y\x19\x16\x00\x16\x07\x96\x02\xb8H\x91\xd0\x81@\x99\x03\x15\xa1\x14\xad(2+\xf0\xb9]\x93T\xc8Z\xd5\x19\xea\xa8\x13I\xaf\x10\x17\xa5@\x9d\xf3$\x1bR![\xd5\xc3!\xa6\xae\x89\xb4\"\x15\x12r\xe0\xa0\xb2\xc2\x08>uZ!\x05u\x8a\xe8L\xb2X-Q,\xab\x0b\x91\xc8!\x15r\xab\x1a\x88\xce\xa1\xf8\n\x8aYu\x99L\xb4hL\x11\x9dA\xa2\x1cjZ5R\x9a\xdc\x06Z\xb1j\xac $\xb39\xb0i\x84\xc9ta#\xcf\xe1\x02\xa6\xf39phTR\xe67L\x1c,\x8d\x05\xc5\np\xa0\xda\xc0\x16\xa3\xaa4\xad\x10\xbf\x89M\xd4\x9cHF\x85\x84(\x1d\x9a\xe2\xd6YV\xe2\xb1\x89\x86\xe4\x9bk\x82\xaa9Pm\xa2ep\xc7F\x85\xdc6\xa1^\xb5\xe6\x0c\xb2\xd5Q\xb4\xee\x16\"\x11\xb3by\x07-\xb4\xba\x9bC\x1e\x1b\xc5\xcd\xdd2\x99\xc8\xbf\x83\xac\xc1\xdd\x0c;\x08\xc5CZ\xd3\xf1\x8e\x9bu\xc7\xfb\xb1\xc0\x81\xea]\x98Lw{\x87\xedS\xbb+`\xba:\x07,\xad\x924\x7f\xa9a\xfb\xac\xb4\x05\x85\n\xd8\x1c\xd8h6\x95\x0e\xacw50\xb6\xaa\xcda\xdcW4\x1c\xa4U\x8d\x93WE39\xb0`\xe13\x03,\x0e,\x05p\x91\"\xa1\x03\x812\x07*B)\x0e\xf4\x9a\xc6\xa7\x9b\xdfB\x1an\xe1t\xf3[\x9cB[|\xba\xf9-N\xb2->\x99\xfc\x16\xa7\xe1\xd6R\x00\x17)\x12:\x10\xe04\xdc\xaa\x08\xa5\x9c\x86[\x82\x86\xd1\x8al\x8b\xd30\xd7\x90m \x1a\xe6ed[\x82d\xb9\x15\xd9\x96\xa0\xe1\xcb\x14 \x1d\x08p\x1an \x1a\xe6V\x98\xf7\x82\x86\xef\x91\x86\xef9\x0d\xdfs\n\xbd\x174|\xcfI\xf6^\x90\xec=\xa7\xe1{A\xc3\x97)\x12:\x10\xe04|/h\xf8\x9e\xd30\xb3\x82u\xd1\xe2\x01i\xf8a\x0ef/\x1e8\x85>\xf0\xd6\\\xbdBJ\x1dh\x9erg\xc2\x98\xb0\x82R\xad3O\x90B\xbd\x83vd;k\x02\xaas\x1c\xb0\xba)\x92Yv\x91\xd3\xbb\xc8X6\x8a^7f,pN]$\xbb\xee\x1cY\x0e\xc5\xa8\xbbL&\xdab\xd6]\x17\xdd\xce\x1e\xc5|ZS\xa1\x8bV\x14\xbb\xbc\x0fK\x1c\xa8\x9e\xccb\xe9n\xbb\x9c\xfb\xba\x05LW\xe7\x80\xf9XI\x9a\xbfx\xc4\xf6\xb1\x1e\x17\x14\xc9\x90\x03\xde\xa3M\xe3k\xd2\x15Ry\xc4\x01\xf58\x81\x91^y\xe4\xa5>\xaeqPV\x1e\xa7(\xcf`\xd0V\x1e\x910\x1f\xe7\\<;\x9b\xc8\x8d@\x9e\x03\x05\xa1\x0e\xad\xa8\x81Y\x8c\x86z\xe8\xadz\x13)\x02\x91\xbb\xf2\x1e<\xb0\xc4\x00\x1cj\xbd\x19\xf0\x81\xdf\xc3\xf1\xd8\x9bs\xf1\xecl\"7\x02y\x0e\x14\x84:,?\xea1\x97\xc0\x08\x08\xcb\xcf\xf6&\xd2\x0eD>:z\xf0\x84\x14\x03\xd0\xd3\xf7f\x90\xbf\x8e\xe5g{s.\x9e\x9dM\xe4F\x80\x8ffV>\xaa\xc3\xf2\xcd\xfe\x82\"\xf5\xf4\xa1\xfc]\x7f\"\x1d@D\x0d\xbb\xfe\x9a\x80A\xdb>\x0e\x9e\xfe\x0c\xf2o\xfbH\x8f\xfd9\x17\xcf\xce&r#\x90\xe7@A\xa8\xe31\x04+\x1fHg\x00\xe5[\x83 \x06\x9c\x03>\x19\x06\xbc\x05\x17\x03\xf4\xf9\x83\x19\xc6\x8e\x03$\xc6\xc1\x9c\x8bgg\x13\xb9\x11\xe0\x8eyP\x10\xea\xb8K\x1e\xb0\xfa\xc7A^i0dh~\xf0\xcafq\x01\xa5\xea`\xc2\x93\xb0 \xaf\x0e\x0f\x911\xd4F\xa7\x7f\xcb\x01\xf3 \x82\x18A\x86\xcb\xa7\x11\xa2c\x9c\x07(:O3\x9e\x86M\xf9\xf5\x13\xc6\x94O\x13(\xddE1x\x9a'\xd2l1c\xf04\x864!\x8a\x87\x94\x9e\xc2\x13\x9apx\xb21r;r\xa0|\xb2 b\xca\xa7\x1d\x87\xf7\x98\xae\xc2\x81\xecS!i\xfb\xe2\xb9\xc6\xe1:N\xee\xdc\x13\x02\xabgl.\x8c\xf0\n\xcf\xd0>\xc5\xe7Wp\x10(U\x9f'<\x05\x94\xf8\x8c\x86\xd4\x9em\x8c\xf0\xea\x1c0_\xd02\xce\x86\x8b\x17\xa8\x96\xf52F\x0f\x81\xa2\xf32\xe3i\x98\x11\xee\x0b4\x8f\xf72A\x07\x81b\xf02O\xa4 1c\xf42F\x07\x81\xe2!\xa5\xe7\xf8\x82&\xe4_x\x0f\x168P>\xd9\xc4\xd2U^\xb0q\xaa/{\xde\xd3\x1c\xc8\xbe\x14\x92\xb6\xe7^\xb0q\xcca\x1d\x99|1D\xc0\x19.(\x84^\x85!\x98Z\x1cN`\xac\x17\x86\x9cc\x87\x9c\x9e\n\xc3)\xca3\x88\x80\nC\x03\xc59\x17\xcf\xce&r#\x90\xe7@A\xa8\xc3\xc1]\x1e\xf2\xc9\xe5\xbeb\xcb\xbd\xe2\xe4r_Q\x83\xf7\xca'\x97\xfb\x8aN\xe5\x15\xa7\x8f\xfbj\xa08\xe7\xe2\xd9\xd9Dn\x04\xf2\x1c(\x08u<\xbc}\xe5\xe4Z\xc1\xf2\xab\xafH\xae\x15\xae\xa1\xfa\xca\xe9\xa9\x82%T_\x91>+X~\xf5u\xce\xc5\xb3\xb3\x89\xdc\x08pr\x7f-\x08u\x9c\xdc_9\xb9\xfa#\x1c*#$W\x7f\xc4\xe9y\xc4\xe9\xc9\x1f!}\x8f\x90>\xfd\x11\x92\xfbh\xce\xc5\xb3\xb3\x89\xdc\x08pr\x1f\x15\x84:N\xee\xa3\x05\x06\x93u,?;\x9a\x80\xc1u\xae!;\xe2-X\xc7\x12\xb2\xa3\x19\xfa\x02,?;\x9as\xf1\xecl\"7\x02\x9c\xdcY\xf9\xa8\x8e\x93\xfb8&7\x16\xf8\x8ca~\xee\xc6\xaf,\x80\xdb\xa3T\x1cO\x12\xf3\xbe2\xc6\x89P\x1c\xdb\xdc\xf9s\xa06N\xf1HnBp\xcc\x92\xacQ\x8aRZ\xf6:\x1a\x10\xe96\x84e[.\xe7\xf5\xd8 \x96\xac\xa4\xef8\xbc\x87d\x05.W\xf5B\xd2\xee\xba^\xe3p\x1d\xf9\xef\x96\x03\xd6$\xe65\xbdB\x8e\x13\xf4\x02\x93W`9\x94\xca\x93Ib\xceW&\xdc\x0bLl\x9c\xf3\xb7\x1c\xc8NR\x1c\x92\x9b\xa0\x17\x98\"\x1f-\xa6 \xae\xa6\x82\x8f`9>E/0\x9d \xcd\xa1\xb8\x99\xce\x13i|\xcc\x18L\xd1\x9b\x84(\xeeRz\xf6S\xee\x05\xa6\xbc\xf7\x8e\x1c(Nc\x9b\xc0\xc9M\xb9\x17\x98\xee1]\x85\x03\xb5i!i{}\xca\xbd\xc0\xb4\x8e\xfc\x97c\x80Z&\xde\xcc\xa6\xf1}y\x15R\x99\xe1\xec\x9e!\xbbUf|~\xceD\xf05\xc3\xf9;C\xfe\xaa\xccpv\xcf\xe6\\<;\x9b\xc8\x8d\x00\x9f\xdd\xb3\x82P\xc7g\xf7\x8c\xb3\x9bo\xe0\xec6\x90\xdd|\x83\xcfOC\x04_\x06\xce_\x03\xf9\xcb7pv\x1bs.\x9e\x9dM\xe4F\x80\xcfn\xa3 \xd4\xf1\xd9mpv\xabc\xf9Y\x03\xd9\xad\xce5d\x0d\x11|a Y\x03\xf9\xab\x8e\xe5g\x8d9\x17\xcf\xce&r#\xc0g\xb7Q\x10\xea\xf8\xec\x9esv\xdb\xce1t\x9b#\xbbm\xe7<\xf8\x9a\x8b\xe0k\x8e\xc1\xd9\x1c\xf9k;\xc7\xd0m>\xe7\xe2\xd9\xd9Dn\x04x\xe86/\x08u\x93M\"\x02:\x01\x99\xf8\x06\x82SH\xb7 #\x8e\xf3\xa0\x8e\x03\xce\x82\xd9|\n\xeb\x16\xd8 \xce\x82\xf0\xc0\x8e\x03\xc1\x82U\xf6\x14\xda\xf1\xec\x01\xd3\x07\xc1\x1d\x07\x0ei}\x85\x057\xe8\xb0 \"\xc0\x13P9a#\xf0\xd0\x82\xec\xc4 \x11\xe4 (\xbb`\xadv\xaa\xcf\xc2\"5qB\x04z\x0b\x0e9\x16oN\x0c\xf5J\x16\xb6^\xd9\"\x10\xecU\xb8\\\xb3\xe2'\xaf\x80`-nV\xd6\"<\xe0\xcb \xc8ZrK\xc5\xae\xd8\x12+\xbbZ\x12\x0c\xfal\x0exK\xac=\xa7\xa1\xf5\x12\x1bo\xb3$\x18\xf8\xf9\x1c\x88\x96\xd8\x9a<\xdd\x96g\xdf1}\xe0;8\x90O\xeb+,\xb9A\xc5\xa5\xe8\xf1\x92\x80\xaa \x1ba\x03c\xc9\x9b\xae\xb6$<\x08\xac\x0b\xc8\\\xf1\xd6\x14!\xec\x8a7\x9d\xb5\"<\x10\\\n\xc8[\xb1\xd6,\xb2\xa2Vh|y\xc5\xc6\x06\x05\x00\x87yyE8\xe5\x95V8\x15\xca+2\x83\x8d\xb9\xd2\n'KyE\xe6\x02\xb8H\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbeS\x0b\xf6\xb0\xe2\xd76o]\x9bO\xde\xb5\xcd5ml1y\xd76\x96\xb6\xb1\xf9\xd4\\\xdbh\xcf\xc6\xe6\x93\xf7Z\x8a\xa4\x16\x0e\xe5\x05T\x88\x15\xa3=\x81M8\x99\xdfr{j\xcc\x9e\x00\x01\xd4T\xe3\xaf\x07\x01h\xca\x11$\xed[nO\xcd\xe6\xd7n\xae\xa5Hj\xe1P^@\x85X1\xdf\xde\x01{\x18\xb9\x87\x0e\x1fl\x0eAz\x0f\x1d\xae)r\x08\xa7\xc8\xd0\xc1\xd2\"\x87 \x89\x87\x0e\xda\x139d.\x80\x8b\x14I-\x1c\xca\x0b\xa8\x10+F{v\x0e\xb3\x87ua\x8e\xdbc\xbad\x02\xd5\xc8 M\xa6+Z:\xc7K3]2\x83J\xe4\xb8=\xa6K\xe6\x02\xb8H\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbe\x9b\xe3\x9e\xc8\x96\x85[.\xb2\xc1\xc1%\x10\\\x1e\xb9\\vc\xaeeTp\xeb\n\xd2r \x0fQ*\x02\xca\xbai\x1e[x8y\xb3.\xe7\xc6\x9c\xcb\xe9\xc2\x8b\xb9\x91\xcd:\xd7\xc3\xf6Xy\x04\x02M\x9b\xcb\x1b/\xa6Z\x96,\xe4\xea6\x1e\x81`\xd3\xe7\xf2.\xad\xed\xe8qsv\xf0&\x14\xa3B\xf6\x02)z'\x03!\x02\xf48\x0f\x14=\x82AgI 5\xef\xc4\xb3\x10.{\x9c\x06j\x1e\xe1\x81g]@\xab\xf5\x89g\x99\x97Zc\xcb\x15\xd7\x04\x82\xcf\x12\x97\xab\xeb\x98g\xc1E\xad\xb9U\xb55\xe1\x01h]@\xe6&\xcda\x8b\x0dV\xd5\xdap^\\r\xc0\xd9\xc4\xbc\x08Nj\x83-\xe7m\x08\x06\xa2k\x0e\x04\x9b\x98g\xc1I\xf1\xec\xd1\x86{\xc1-\x07\x0ei}\xc7\x0d7(\xbf\x11\xbd]\x10P9a#\xb8\xa8\x0do\xba\xea\x86\xf0\xa0\xf4V@\xd9\xcd\x89g\xc1Emx\xd3\x99>\xe1\x81\xe9\xc2'\x18\x99n|\x12\xef*\xb2\xd0\xf4\xd6\xe7l\xe2\x13\x0cNo}\xc1\x03>\xe1\xe1\xe9\xad\xcf\xb9\xc2'\x18\x82\xde\xf2\xcb\xd15\x9f_\x8f\xbe\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cM|\xc1na\xc0\xd9$\xe0\xec\x16\x06\x82\x07\x82\x98\x07\x02\xce\x15\x01\xe7\xae0\xe0l\x12pv\xbb\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cM\x02\xc1n9n\x8f\x19rv\xcb Mf(\xd8-\xc7K3C\xce]9n\x8f\x19rv\xbb\x96\"\xa9\x85Cy\x01\x15b\xc5\x9cMB\xc2C\xd9}\x88\xf6\x1c\x98=;\x04P\xd3!$<\x9c\xdd\x87X\xda\x81\x95\x16 `p`.\x80\x8b\x14I-\x1c\xca\x0b\xa8\x10+F{\xf2\xa1\xf0\x8e\xcb\x88\xb3K\xc4\xbd\xe32\xe2\x9aV\x91h\xe9e\x84\xa5\xad\"\xee\xfb\x96\x11\xda\xb3\x8a\xb8w\xbc\x96\"\xa9\x85Cy\x01\x15b\xc5\xfc\xdaB\x94\x0em+\x11'\x89\x08C\xdb\x12\x97kQ*\xb4\xcdE\x82$\"\x11\xe8\xd4\x05dm\xd3\xa1\xad\xbd\xe5$\xb1\xe5\x93z\xc9\x01o\x9b\nE\xfd-'\x89-\x0fm\xd7\x1c\x88\xb6\xa9\xd0v\xcf\xb3G[N\xdf[\x0e\xe4\xd3\xfaJ[A\x12[\x11\xda\x16\x04T\xdd\xa6]B}+Hb+B\xdb[\x01\x99\xbbth\xbb\xdc \x92\xd8\x89\xd0v! o\x97\nm+;N\xb1;\x0cmo\xb9\x9c\xdd\xa5B\xdb\xdcN\xf0\xeb^\x84\xb6\x8b=\x87V\xfbthk\xef9\xc3\xeeyh\xebr`\xb3O\x85\xa2\xfe\x9e3\xec\x9e\x87\xb6!\x07v\xfbTh\xbb\xe7\xd9\x0f{N\xe1G\x0e\x14\xd3\xfaJ\xc2\xa0\xf2^\xf4xE@\xb5}\xda-\xd4\xf7\x82_\xf7\"\xb4\xcd \xc8:\xa4C\xdb\xe5Ax\xab\x83\x08mm\x01m\x0e\"\xb4\xad\x1c\xd0\xf8\xea\x81\x87\xb6\x95\x03\x1f\xe6\xd5\x83\xa0\xc9\xca\x01\xa7B\xf5\xc0\x03\xd7\xca\x01'K\xf5\xc0C\xdbk)\x92Z8\x94\x17P!V\xcc\xb7\x05\x0eb\xf2\xfaG\xde\xbaG>y\xfd#\xd7\x14\x1c\xc5\xe4\xf5\x8fXZp\xe4S\xd3?\xf2{\x91\x8e|\xf2^K\x91\xd4\xc2\xa1\xbc\x80\n\xb1b\xbeMp\x14\xe4_\xe7\xf6d\x8f\x9c\xfc\xebBS\xf6(h\xb2\xceK\xcb\x1e9\xb5\xd7\xb9=\xd9\xa3\xb8-\xe9J\x8a\xa4\x16\x0e\xe5\x05T\x88\x15\xf3m\x83\xbc \xffm\x9e\x0f\xb6<'\xffm\x9ek\xda\xe5\x05Mn\xf3X\xda.\xcf\xa9}\x9bG{vyN\xfe\xd7R$\xb5p(/\xa0B\xac\x98o#\xe4Eh\xbb(\xf0}\x84\x02\x0fm\x17\x05\xb1\x03P\x10-\xbd(\xf0]\x82\x02\x0f\\\x17\x05\xbe\x8fP\xe0\xa1\xed\xb5\x14I-\x1c\xca\x0b\xa8\x10+\xe6\xfb\x08\x85Th[*\xf0m\x84\x02\x86\xb6\x05.W\x0b\xa9\xd0\xb6^\x10\xa4U\x10\xc1\xce\xad\x80\xccb\x9a\xc7\x96E\xbe\x8dP\xe4\xdc\xb8\xe0\x80SL\x05\xa3\xeb\"\xdfF(bh\xebr9(\xa6B\xdb-\xcf\x1d\x141\xb4\x0d\xb9|Hk+\x14\xc5&B\x91\x87\xb6G\x81\x94\x8b\xe9\xd0\xf6\xb6(\xf6\x10\x8a<\xb4\xad\x08$[L\x87\xb6\x8b\x92\xd8B(\x8a\xd06W\x14[\x08\xa5Th[*\xf1EA C\xdb\n\x97k\xa5Th[/\x89\x15AI\x84\xb69\x01Y\xe54\x87-\xcb|MP\xe6\xbchs\xc0+\xa7B\xd1u\x99/\n\xca<\xb4\xf59\x10\x95S\xa1\xed\x96g\xdf\x95\xb9\x17\xdcs \x9f\xd6W(\x8bEAY\xf4vI@\xd5r:\xb4\xbd-\x8bUAY\x84\xb6u\x01\x99\x95th\xbb\xa8\x88-\x84\x8a\x08m\x97\x00\xa9U\xd2\x86\x1bSd\x9a~]\xd1\xe5/>\xec\x8d\xef\x1e\xc3'S\xdf~U\n\xb3\x14\xc0\n\x9d\xf0ow8\xb4NV\xea\x00R*\xafP\x13U\xcaB\xf6\x81D\xb3$T_S\xcf@g\x13\xefjJ>c\xed$\x9e\xb1N>\x1b\xbdJ\xe5~\xf66\xb0\xb3W\x0e\x9c\xbd\x13\xac\x9c\xf8\xdd]\xbc\xcd8}\x96\xce\xe1#)\xaa*Mm\x8a/\x9a^\xd1\x15\x85\xf7fs\xd4\x85;\xa2W4O\xf7,\xa2\xb4\xe9\x91NQ\x9eI\x16M\x89&}\xef\xec\xa7\xf3\x16\xe9\x8c\x9b\xcc\x86\x90E\x98\x15\xbe\xa2\xb2S\x81\xe2\x12\x18m\x1e\xa0!\xa2\x11\xde\xa0\xcc\xe4\x11\xcac\xc9K\x8b\xce\xbbg?\x97W]\xd1\x832K\xb4\xb5 F\xb8j\x93\xa5\xf4Tx\xd9\x11<\xeb3\xb5\xe9\x1a\xd1\x8d\n\xb7\x0e2y\x842\xeaK\x88\xabw\xcf~.\xaf\xba\xa2\x91:;u4v\x9d\xdd\xb0\xa0\xeb\xbc\x06\x9a\x86\xa8\x0f\xb74\xafh\xd4\xe0\xa6\x85\x0d\xacj\x83W\xf5$\xae\xde=\xfb\xb9\xbc\xaaC{3\xf19\x1f\x976z\x12uh\xfbE\xbc\xc8\xd3\xa5\x0f:C\x06s\xfe \x96\xa9K_\x0d\x86\x18K\xb8\xc2\xda\x84W\x07+\xfc\x95\x8c\x86\xac\x9e>\xa6\x81\xdf=\xb9\x17\xdf\xdb\xc07\x0cG\xf0\xc9\xa8\x15\x89\x13b\xa3\xec\x84\xf25m3\xed\x01\xbc\xb3\x85c>\xa3\x1d\x87Ft\xc2\xdf\x837u\xe9\x91\x82]E:\x87\xb7\xe2]\xb3B\x15\x9f\x00\xda\xc0\xd7Z\x0eoX\x91xoo$\xb4\xdf*`EV\xe9\x9f\xaa]W\xc0\nS\x9d@|\x02\x98\xad\x82\x15\x9e:g\x95|\xcb\x8a|\xc2\x8a\xdd{V\xf0\xf7l\x08\xeda\x03\xac\xd85\x12Vl\x1b`\xc5\xa1\x91\xb0\xa2\xd4\x00+\xe0\x91\xa1\x9f\xb4\x82\x96\x9a-\xe0U\x95\x7f\xff\x08o9\xb0@!~\x84\n\x19MP\xe6\xe9\xed W\x12\xaa\x8d\x13U\x9e^\x14r=\xe1!\xc1\x97\xfc\x9d!\xef'\xa49\x02_\xe6j\xaa\xa7\xd7\x02\xdf\x89\xaf\x7f\x15\xcf\x07\xd8\xe6\xdd\x84\x891\xe0}\x9c\x90\xfb\xaf\xf7\x13R\x97\xb6x\xed#\xe1\xa7N\xef.J;\x90\xd3\xcb\x81D#\x9c\xbdG0\x8d\xd35i\xa4\xa0@\x1c\xc7\x05d\x13~$~\xcfn\\\x0c\xfa\xa9\xb37\xa5\xc6\x85];Kg\xe2\xb3h\xf0Y0\x13z\xa2\x06L6<\x018\x8b\xcb\xf0\x06J|\x9d\x19\xe2Hn\"\xe7\x8a\xbfa9\xa5\xcb\xbcc\xad)\x80fC\nT\x19\xbf3\xd7\x16\xba\xf8k\xa4!\x00\xc0\xf7!\xe2{\x95L\xf1\x01\xb2\xa6x[\xa2GN\x14t\x99\x0b\x1d}Y\xc1\xddEv\x8c\xd6l\x08#+\xa4\x0cC~\x163\x06>\x86\xc6_\x8c\x0e\xe1\x08\xb3O|\xf9'\xa2\xf8&\xda^\xfc\x11\xa9;\xfe\xe54\xcc\xd1\x96\xef!\xc6\xb9\xe3\x9f\x92\x82SX\xbe\x8am\xd2nH^\x83)\xacRZ\xb8k\x9c\x06\xd4[\xbfj\xfa}\x8cb_\xef4+\xc5\x9a\x85\x96\xd8\xd8\x83v5\nTe\xce&O\xe1\x03\x18=\xb9\xcdf\x7f\x81\xf6W\x00\x0e\xd7\xf0\x04\xb7\x06m\xa0\xc8\xd2\x14\x7f\xc4\x0c\xf2(\xd7\x01\x17\xff\xf3\xd4\x98H\xa3\x02\x9d\xc3\xf1t\x02\x8af 8d\x0e6\xa0\xf2q\x04\xca\x8d#\xe1\xaft\x9f\"!)\xac\x19\x84n$6\xbd@\x03\xf5\x9e\xa5\xf6\xd5\x07 _\x98\xeaA\x03\xe9\x05j\xc1\xeb5\xe8B}\x95j\x04\xdeS\xb4!r[c=\xd0\xe0\xb6Z\xd0,\x066>\xbc.\xaf\xd9\x82\xf6\xd1\xf0c{\x01\xc4\xc1Y\x12\x03\x06\xcb:\xe0V\xb4\xf8w/|\xaa\xa3\xad\xc2\x04\xd0\xa4\x9e\xacu $\xd1X#\x821{\xc5\xbdc\x95\xd0X%\x1e_\xa4\x80\x95\xcb\x9aa\xafl\xef\x98\xd2\x9dr\xb8\x93%}\xab\xb8w`\xe3\xeen\x06>\x03U\xe0\xdb\x994\xfc\x92 \xba\x18\xfc\xf5D'`B\xb5\xc5\xdb\x00\xbd\x15\xda\xea\x11\xf9^4\x08\x8eE\x873?\x7f\xd7\x16\xe3\x1b\x15\xd8\xef,\xa7C\xe4\xfb\x16\xf8D\xa1}\xf3\x86\xf62\x91{\x1a\x8e\x00\x9d\x7f\xf3\x8d\xcaROn\x83\x92V<\x84\xee\xe1\x939\x9a\xc6\xbfm\xb8\x12\x94\xd3b\xfd\xa9\xf1\x01 \x06\x99\xca\xe6>\xbe\x94Y\xe3\xca\xa7\xf1(9(\xbc\x83\xdb\x1a\xbcaX\xe3\xbda\xaa\xf2H\x93\x8c\xadr\xdb]\x12\xe8\xc5\xaeE$\x9dY2d\x1a\x86l\xf4\x0d\xb8{\xee\xc1\xecg\xe6m\x95-O\xbf{\xbc\x03\x16\x86\x0f\xaf\xb0\xce\xa3|\xec\xb6\xc5&\x8aG\xe5>\xab\xe7=\xb4\x01~\xad\xf3\x9e\x9b\xe5(\xcc \x87ux\xaf\xcfGm\xa4lz\x0dI\xdf+\xeb^\x1fF\x9c\xd5\xeb\xc5C\xaa\xcdf\xdaV9\xf6T\x18\x9a=\xf8\x0c\x1f\xd6L\xebK\xa6\xb2W\x16\xfdV\xac(\xea7\xd8\xd0\x0d\xfb\xa8\xc8\xeb\xf7\xb0\xddz[\xe5\xd8\x07\x0d\xd9\xfe\x0b3y\xa8IF\x89\xae\x1fe\x89\x16\xa9\xf3\xc8j\xbbW\xc2AKz\xd6\xab\x8a&\xd1IN\xc1\xd1o\x0eN\xc3[\xe5\x9f\xa9\x84V^\xc1\xb8[\xd1\x12-uA\x8b\xf9\xd8\x926-\xa6\x99U/\xf7\xd4\xe2\xe39R\xf2O\x1dV\xbd\xe5s\x0b\x06v\xf1Ic\x03\xbb\xf0\xd4\x82\x81\xbdy\xe6\x9d\xb7![\xe5\xf6 \xa6\xd6\xe6\xa9\xc3\xa6\xcc\x03hl\xb7Y\xe1\x06|\xd7F\xe5\x83|#f\x15\xbe~Y=\x8d}\xfc\x04\x11vO\xb3\x05o\xe2g\xfaaM\xbeW\x8e\xc3\xd3<\xb7\x86\x1di\xbaWrC\xaci\x95\xb5 \xab\x13\xb3\xc3\x1d\x82\x1d\xbb\xe1\x0b\xf8.l\xef$-\x0d\xe3\x91\x16(\xf1\xd8\x1e\\\x1d\xdb]>\xb6\xe1\xa5\xf7M\x0d\x83D\xee\x95T\x19\x9et\xd6\x98?\x83\xe7\xcd\xe4\xdc\x10(N\x81\xa9#\xd2\x88\x11\xbcU\x1e\xc0\xae\xde\x0b\xaf\x98G\xb6\xca\x0b@\xfa\x8bTUE\xaa9\xb6\xe2\xeb\x0b\x9b,\xeb\xd7+\x1a\x0f\xb1\xc6\xbb{\x96\xb6\xfd\x04\xaf\xf9G\x8d}\x80\x86\xf0Z\x04\x9ej\x02\xd0\xee\xf5\x89\x0d\xef\xe3+\x8c\xf5\xb4\xc6r\xac\x91\xadh\"\xe5~\x0c\x91/j|\x04\xe8y,ec\x8dc\x80\xca\xafl\xb1\xb9U\xea\xaf\x03)K\"Ey\x82\xf4t\xc0N\xaaO ;[`A7i\xe7\x13@\xa3\xa4\x9d3\x80\x9c\xd1\x13\xa3\x0dwt\xa5\xe6E\xe5D\xfd^\xac\xea\xa1\x0b\xed\xfa\xca\xba\x83\xabz\x01\xc8\x1b\xbd\xb2n\xd9_Su\xea\x16\x05\x1a\\KvK\x07\xa0A\xb2[^\x01\xca\x8f^\xd8\xf8\xbd\x1d]i\xc4j\xacQ\x85\x16\xa0\x13\xf8:\x02j\xbc\x03\xa8=\x91\xcc\x86H\xd5\x07\xa8\x0c\xf7\xa6\xcb\xf6\x18\x1c\x01h\xdc*\xed)\xcc\xf7\xd1\x8b\xf4,\xaf\xc7-\xd4o\xc6\xb6P\x98\x03\xea\x8c\xb70\xcb\xd1\x02\xa8;\x93\x9cX\xff\x13@\xdex\xc6\x1d\x07z\xfd\x8dh\xc2n\x9f\xb9\x856\xec}\xdd\xf1/\xd9\xeal&p>o\xb7 \xa8\xd4\xa4g\x98\xaep8d\xc4\x85\xdf\x1d\x83ii\xf1\x10A\x13t9\x88\xa7\x96\xc7<\xb3!\xc7\xf4V3:\x8c9n\x0d\xee\x99\x0d\x0d\xdd<\xb0\xd2`\xabT\x0ch\xe0\xd5\xbc#\xad\xb8S\xa00\x0b\xefp_\x8e\xab\xdd\x01\xff\xe5 \xf2}\x83\xc5\x91\x0f\"\xc4x\x96\xe1;\xa4Mf\x06\x906\x1a\x8b^\x8d\x8d\x18\xe1\xe1\xe0\xdb\xc0M^gOx\xdb\x16Cq\xba\x8f\xa5\xe0n\xaf\x84\x16I~\xdb\x99\x99]\xb6\x88\x9c\xb0\x9b\xd1\xfb\xd2\"\xe8\x08,\xf2\"e\xef\xf6\xcarI\xe4\xb3l\x9b%\xd1\xe2\xa8\xe6h\x11\xa8j\x8de(\xdf\xed\x95\xc2e\x86Z\x9c\xa1\xb7U\xec%f8,\xc9\x18\x96\x1b,\xca\xd6Z\xdc\xef\x833\xc5\xbe]\x01\xdd\xe1\x12\x90\x93\x14s4\xa9\xc0\x0e\xbf\x06\"x58\xf1/F5\x06\xab|B\xb1\xa9\xee\x95\x9csa\x9f\xe7\n\xfbX\x13\xec\x1d4\xb0\xea\x90\x17\xd8T\x14>\xce\xa2{%\xe7^\xb4\xa2\xe3\x11h \xdf\xc5\xa6;\xb8\xe4E\xda){\xe5\xd6\x85\x92\x1e\xbb\x12U\xb4G\xf08+\x8f\x80\xcbYz\xa4%\x19\x14\xe7z\xd9#\xaf\x92I\xf7\xca\xadw\xa9|Mx\xd8l`(\xb3U\\\x8f\x97\xe3\x91\x17)R \xdbE9k^\xce:QNqM\x1ea\xc1\x04\xd1n<\xc7\xd9\xecy\xe1_r\x9eBdBX\x7f\x1c\xa8l\x12\x08\xc4\x1a2\x0bS|\x9f\xc0\x14\xf7|\xf2\x04Nz\xeb\x13Yz\xd6=\x95y\xe9\xad\x8a.5\xbb!\x10,\xd6\xd9\xbf\xcc\xa9F,\xd5\x8a\xca\x8f\xfc\xcb\xde\xd0\x0f\x1b\xc2\x7f\xe1\xbd\xf6%\xba`\xadJ\x8b4\xeb\x92\x16\x9f\xd3S\xd6\xe2\xb8@\xc0\xf9\xb0\x13\x9f\xbe\x16\x11\xbc\x11\xcf\xce*\xc4\x9fY\xae\x8ee\x8c?\x93\x80\x0b<\x03\x16I/0\x031\x86\xef\xb0\xb96`\xb3\xee\x91i\x1a1\xc3\x1e!\\nr\xf5&\xc1\xaf\x03\xe3.\xc9#;\xec\x88\xb99d\xa7,\"?\xf3\x85L\x0d\x83\xef\x12\xcdm\xb0\"\xa6O\xe0k\xb0-\x11\xffN\xe39\x1f\xc1\xb0\xc6\xf8vt\xa2[\xbaW\xd6[r\n\xa0\xca[\xd2\x10\xc3|\xafT\xb6\x04\x03\xa9\xdd\x96\x9cB\xb2{\x0c\x11r[\x02\x11\x95\xb3#\x0d\xeeH0F:\x10\xb9\xbd \xac\x01\xba\xd0\xcd\x0d\x1e2\xe0\xe2)\"\xb8\xbe\x11\xed\x89\x91\xa3\xe0\xa58N\xad\xd1\xbdr\xdc',\xdb\x1c`\xefe\xaf\xac\x0f\xdc\xa8\xea>a\x94v\x8aZ\xdb`\xc2\x03\x8bA4\xe6b\xb6Jx@S\xcb\x07\xd2\x91\xb2T\xd65\xa9\xdcd\x8b\xad\x1a,\x93\xf9u=\x8c\xda)\xcb9d\x8d>\xc5\x9ex`\x9a\xdb<\xa0}\x96'\xa7\x08\x07\xe4\x91p\xff0\xdf\x9b\xec\xe7@\xe4V\x1f\x06\xfb \xe8\xc2=\x1cH \n\xaf?\xc4p\x07\xb1\x8aaA\x16\x84B\xcc\xef\xd4\xf3\xc8\x06\xab\x02\x01\x0f\xc5\"\xa4\xad\xe2\x16p\x0ez\x05\xf2\"\x19\xf2\xb0%\xd5\x1a\xf2\xa3\x86\x01\xa9\xc1\x97\\\x83\x14kk\xe8rZ}\xb8\xee\x1c\xcb\x9a\xb0Og6DP\xfa\x08\xc7\x86\xca\xa7\xcc3_\x99\xaa\x1a~%|G\xf0\xe3\xd5\x0d\xd1\x00]\xac\xc3=\xeb\xd3\xbd\x92+\x139\xb1\x0c\x0d\x08\xc5\x85\xe7\xaeBf\xac\xeb5\x15\xa7\x8e\xa7\xb0\xe19\x8d\xfb?\"2\x8b\xed\xd9\xdc\x0f\xc0\x8c\xa1\x9c\xf8\xe4U\x8bO\xc6\x91,\xe2\xee\x0dp\xb7\xce\x19\x03,V@\x8b&\xa6\x89q\xe6\xee\xf0rF\x177\x18\xc4^\x08~\xd3\xfd@N\xde\x8b\x8d\xec\x0e\xff\xd8'\x0edS\xf8\xba6\xac\xf2\xa0\xe1\x9ab\x91\x87{P\x84\x16\xb2\xa4\xcfJ\x1bj|[3^\xba\xc1\xb5\xdc\xa3\xd2\x95S\xab\xf3\x832\x97\x93+\n\xeeu\xc8^\x193\xa3!\xa3\xbf\xbc\x13\x1fm\xc5\xae\x8ahI\xe9\xa5\xa7J\xf1l\xaa\x1c8\xb9\xe1\xa7\xe5\xee\x19S\x16\x14\xaaI4\xaf\xb4Z\xe8\xb5\x86\x05\xa5 \x80\xca\x08P\xb1ZW\x9b\x8e\xd65\xb1W\x87~rG\xe4;@\xee{|'gG\xe4G@\x9e{b\xff\x10?\x90\xdb\x97V\xa4\xa4\xec\x89vfj\x99\xa4l\x9d\x16\x94\x05[b\xe4\x95\x0d\x9dI\xbb\x16[$@\x83\xee\x88\xdco1`\xd0fE\xddw\xa4\xea=sH\x18\xfb\xc7-\xd2\xe2\x17S8\x13\xf1/r4e\xa9\xdaQ\x82\xc6\x1b\xb5b\xea\x1b\xdc\xe1P\xdeC\x0e\xdfbC\xcfr\xda\x0e\x13Ib\x92\xef\xb1\x91l\x02\xaf\xc0a\x16\x12\x8f`\xd4\x9fP\x93\xca{$\xbc\x1f\xc9\xa2\xf5Y\x8f\x0f5F\xa3w|x\xb1f\xdcjrj\xd7\xaf\xa88\x9a,\x19%\xc5\x86\xd5PQ\xd9h@\x84\xf7|\xdf\x0c\xd7V\x05\xa5~\x07M{\xd0^8A\x1e\xa0\xe4<\x94\xc1F\xc5\xbe\x05\xa3 j\xb5\xa0\x9cJ\xabu\x163\x16\x95\xa8\xc5b'%l\xb5\xa0\xa4C\x8b9\xb7xc\x17\x88gX\xa7aC\x96h\x8d\x9a\xcd>#\xf6\xb6&\xe9\x05\xa5p\xdfe\xca\x83\xfbG>\xe9\x02V\"\x82\xe5\xfbG>\xffud\xe8\x92\xb2|8\xafd\xf4\x00}\xa1\xc8R\x9e\x94\x14\xff\x01-\xd8=\xa0\xed\xf6C\x1bl\x7fx\xe1[;`K\xa4\xc8\x06\x9e\xf7\xdbP7\xaf\xdd\xe2^\xa6Jp\x83\xf0\x11\xe6\x95\xce\xc6\xea\x0bod\x0c\\Gr\xff\x14\xb5h\xec\xfc\x90\xcf\xa3\x9a\x88\xcb\xb5\xbe\x94\x85\xe3\x83J\xb7\xdd1c\x8b\xb6&>\x9d\xf9\xc0\xb47\xf9\xf73\xdb\xc8\xb1\x82;<\xca\xdcH\x9e\xe0\xbe!$o\xf1(\x99\x7fn\xf3^\x8e7\xc7\xd9\x825G\xabl\xb4fi\x8e&\xc6;r\xfb+_>\xc6;\xa8q\xec\xdbc\xe1Z\x16*:d?#VO\x11@i\x10@\xc5\xd13\xb4W\x11\xd6\xe5zIq\x81,'\xfd\xd4\x12\xa7\xac\xd4h\x8f\xaf&K\x8aMU\x89\x16\x95\x03\xedHeZQB\xdaJM\xee\xb2\x92\xa7\xbd\xd4.`I\xa9c\x16Oyav\xf7D\xa0kR\x1c\xa6Lo\xdcD\x1b\x85E\xc2U\x85[(\\\xd4\x94/\xb0[R\x91\x15\xaa\x8aB\x8b\x8a\xd5hH\xdd\x8a\xb2h\xf4\xb1t5U:\xb4\xf2\xb4\xa4\xe4TU\xa2e\x05\x1fw\xbcUF\xe9\x0d\xf4\xaa\xf2\x18\x13\xd2-\x0bB\x0c\xda~f\xe9\x1f\xe1]\xa3M\x0d\xa2\x87\x16\xdc\xa0\x80\x9b\x85}>\x7f\x0cV\x85\x0d\xc1^\xef\xc2\x18z8\x0d\x9f\x9e\xb8\xa6u\x80\n\xe3\x15!1\x12T\x08\x82\xf0z\xee@\xe3\x1f@D\xae\x1f2%<\xa4\x06:m\x9f\x96\xd6b\xfb\x1a\xa7\x1en\xd4(xa\xe1N\x94\xccwE\xb4>\xa7+\x1c\x16\xc5\xc4ByG\x18\x8f\xe6\xc5\xa5\x07E\x96\xf4\x8a\xb2m@#9\x8d\x06\xf7\x8a+\xce{\xa7-\\\x12_\xbe\xd9p\xb7\xdb\x14\xfb\x02\xc3\xd3\xe8dQ\xc4\xbd4\x95\x8d\x07\xe9\xa0&\x02@\xb6\x1a\x0b\xee\xe4x\x83$\xb6\x08\xe7ll]\x8dG!\x8c\nOQ\x93\x13o\xd3\xb7\xf8\xc6\xb6 \xa9q\x93Ng\xa1M\x11\xe2n~\x97\x1fA\x9f\xdeL59\x18\xec\x88\xfd)~\xbb\x99\xc6B\xdc\xd3%\x81f\x9f/\x17\xd9P\xb9}`c\xed\xb5\xcbZ\xa6\xda\xbe\x93\x0c6\xcf\xf4[\xa5\xfe\xc0\xe2\xcb\xaaR~\x80M\x0c>\xd4\xc4\x15\xa8\x8aRo7Y\x96U\xe7\x0e\xee(\x14\xbb\x88XtW\x8e\xb7\x87\x8aXcr\xabl\x99b:\xeeJTy~\x04\xdd\xc5\x8e\xd8\xb4\xaa(\xdb.\xe8+w\x1f\xe13!Z<\xc8X\xdc\x0f\xb3\xaaHN\xf1\x8c\x93\xe0\x8aDx\x87\xdb\xa1Et\x00\x8a,\x96+\x07\xbe\x9eg\xc4\xa3b\xa8w\x97\xda\xe4\xea\xf2\x01\xd59]\x13\xba\xefs\xde\x8b\x07\x11l\xcb\xa7 \xafxn\xe9\x8aw\xe7=\x1b\x9a\xb7\x8a;`\x13\xf1\x89U\xb9\x8bU\x8e\x06\xb24\xad(\xf5\x014\xf8\xea\xe9\x11.\x9d\xf0\xb5\x14\x06 \xe2f\x03\xad/\x05\xf4VY>1\x1d\xf0U\x08%G\xc6\xa0e\xf3\x94\n0LRQ\x8e\xfd\x11\x0c\xeeA\x9fG\xb6\x0e\x04\xc3\x91\xb8\x96\xa5\x8aU\x04\"\xcf\x15\xc5\x7f\x86\x1c\xbb\xe7\x05\xe1\xe0\xf4\xf4\x81}\xbd\xa2\xac\x87]\x89V\x95NG*\x92\xbab\x11%E\x845e\xc2;oCn\x95\xe76O\x8a[f\xc6)\\\x19\xf2y\x8dW\x895\x95_#\x1b\xb2\xa2\xf0p\xc37T\x9a\x10\xbd\xa0\xd7U\xc4\x0e\x0d\xae\xa7\x93w\x84`\x14\x9d\x88\xb2\xef\xc7\xfc\xce\x01\x9d{\x0e\xbc\x98.\xf6\x14u\x0cPA\xd7\xfdi\xb7\x95o\x15\x88\xd5\xdf\x8a\xd0\x9c\x02N\xf4^\xe3t\xc6C=\x18[\xbd\x11/\x18.\x1d\xe3\x8c^\xc1\x15\x8cUr\x150\x80\x97\xa6\xe6\x14\x97\xb4R\x04\x9cUv\xa7\xfd\x89\x9c\xc2\xa2&\x93d\x95<\xe9I\x1bRW\xd6D\x95hM9\x90\x0e\xb3&\xc15=\x99/6\x91\x0d\xb1\xdc\xf2i\x8f\xd1\x90\x9f\xfbRY\x91\x9f\xd9\x0c\xcf)\xb7\xea8\xe5\xd9\xb2\xcaN\x1d\xa5/Y\xb1\x9f\xba\x92S\x1aP\xa0:\x83\x9b\x00E-\xf8b\x87\xc2'B\x9bb\x85#n\x1ah\xc1m\x1d\xe2*\xab\x07\xbeb\x80\xdb\x9b9\xa5\xd4H\x07\xc1Y%\xdb\x90\x93;2+RW\xfc\xe63\x14\xdb|9\xcd\xb3x\x16=\xf3\x99\x1e/\x9e\x1d\x82;c\xf7r<_\xc5\xc5$\xe8\xf4\xaa\x92SBM\x93\x9ei\x87M\xb0\xe6#4tY\x93\xc5=\x139\xa5\xc2\x04\xda\xea\xb2R7l-EsJ\x8e\xcd6\n_hQ\x16\xf4\x152y\xadD\xa65\x13h\x96%\xa8)\xf9\xbb9\xdc\x8b\x127\xb8*F)\xdf\xb6\xe1_\x83\xd6\xf8\xec\xc2f\x19\x9e.#\xc3\x821\x00\x0d\xcf\xd0\xd2\xa7v3\xb9^\x88\x87rJ\xe9\xe1\xbc.f;a\xd6\xa2-\xea\x92U:\xaf\x10\xa71\xbf\x9dS\x9e\x01\x1a?J\xd3\x9c2\x82\xe3\xd6#c\xbf\x86\xc6\xd7\x04#W9\xb0\xe1\xef@`\x11\x90\x85:\x90\xc5\xc5MG\xc91\xfe[\xa82c\x06S}\x10\xcb \xbc\xde*.\\\xbbJQ\x01\x0d[E\xe6a\xf6\x00\xdbC\xeb\xf31\x0bk.\xd8\x07:`\xaf*|*\xe1w\xb9\xefx8\xa73\xfa~\x8e\x03\xc1\x9d\xc2\xaf(\xde3\xf7\xd4\xe1[k\x03\xce\x1f\xa7 \x88\x1f:\xd64\xfcx;\\\x9bt\x12\xa4\x96U\xf8\x95\x17U\x84\x8a]\\(\x9cn\xc9\xb8\x87\xa8v\xa0Ac\xba,^\xca*\x96\xda\xc0\xd88O\x16j\xa8\xf6\xcf.\xf9\x9a\xea*\x1dn\x99\xc4U:-\x89z\x10\x8f\xad\x04i\xe2MC\xc2\xe3\xae\x12\xe1'\xae\xb2jb#\x89\x8a\x8d$C\xc6E\x04\xae\xec\x99[Z\xaa\xeb\xb3\xab\x02\x96\xba#\x9a4]\xa8/m\x89\x9a\xaa\xf1\"\x1d\x9aK\xb5\x94J\x15\x10:}fg=\xf2\"yd\xa9.\x18\xe3Q\x87\x0e$\xaa\xf8\xf4 \xd4x\x943\xf5\x8a,T\xe5\x9e%\xbf\x7f\xe0\xbb[\xd3\xa4!\xb0\xc5\xb6T\x0b4\xbdH\xb1\xd4\xac\xa0\xcc\x1dp\xd2D\xf4\x0f\xc1_\x97\x8d\xc8\x85jc\xb6Hm\xf1k-\x07\x1e\x81,\xd5\xd2EWZjV\x1d\xe1\x98\x1d\xac\x95%\xe9Kt\x03\x9dX\x13\xb3T\xec\x8a\x9c\xee\x9b@Wb\xc1u\xf4\xfci\x1f*1\xc67\x17\xdd.n\xce\xc1\xad\x9f{X\xf1\xde%<{|O\x06lR\x0d\xe2\x95\x928\x15\xef\x9b\x95\xa12\x18\x1e\x9e\xf6`k\x0d\xce\xcb\x18_\xf5\xc4mH\x18\xb8>\xdbjAI{\x9e\x95\xbaQ4\xc9\xb0\xd5\xb5\xc2zm\xa5\xd6\x14FO}Y\x1a-\xd5\x05\xeb\x0dK-\xe3\xfd@\xf1\xa5\xae\x03\x0f@\xba,\x04\xb2UWMo\xc5\xac\xd4\x88\x0d\x9c\xa5\xbaW1\xbb\xda\x81\xa6W%}\xa9\xee\x95&\xc3\x0e\xca\x9d\xb8D\xd2\x14\x1d\x97'\xf2\xfd\x0b\x8f4,B\x8f\xb8\xa1{\xaf1\xce\x84\xcd\xf9\xd4\xa6G\xe7\xb4jm\xa7\xa2-\xbc\xea\x10QW\xed\xa4\xab\xea\xa8\xc3\x9ed\xb8\xea\x0bs\xae\x8e:\xeaI=[\xed\xa8\x12]\xa9Ct\xac\xaa\xa4\xdb\xaaO(\x83v\xe4\x8e\x0f\x1b\x8c\x15<~\x11\x0f\xee$\x89c\x98\xc3)\x16s \x90\xc6\xa5\xdd(\xee\xc7\x80\xba\xea:^#\xae\xd4*mH]W\xadP\xd6v\x8e\xba\x13+\xcb\x9e\xad\x96(\xd8\xe2)3\xce\xa0M\xa6\xf0\x99\xbb:T\xd8J\x80\xe2\xce\xdc\xb1\xd8\xaf\xff\\z\nKE\x1c\xba\x1a\x85\x9b\xe1\xe4\xf8R\x17\x9b\xe9p\xf3\xa1\x06\xf8\x9d\x1c/]\x9a2j\xf1\xc4@lH5E\xbeW\xe3\xb0\xdbW\x1f\xd98\xd8P\xd6\xe0{\xd8\xd6\xdf\xa8l-\xe9\xab\x1d\xa6\x01\x85\xb5j\xb2\x04\x9e\xba'\xf8u\x02U:\x1c\xdb_\xa4/\x81\x17\xf9S#\xf8\xf2\xed\xdf\xbe\xec\x8c\xc9Z\x9f\xae\xbe\xe5r\xc1N7M\xc3\xbf\x89\xac\xdc\xd7\\\xe0OsAx\xb0\x8d\x9c\xa3[\xee\xd7`\x1a\x04_\xa4\x8f\x13\xffGxX\x1b\x9fO\xbd\xd5}K\x9f\xd8F\xf0A\x16\xd7\x9b\x19\xff\xe1x\xb3\xc86\x82\\\xa8O\x17\x07\xcf\x0dn\x02=\x08r,c\xee?\\\xcfwt\xdb:~T\xf6\x87\x8af\xc6$2o\xa6\x0b\xcb\x9e\xf9\xc6G\xf5\xfe\xa46\xd3\xb7f?\xabi\xe2\xedo\x02\xebh\xb9\xe6\xcfj\xd2\x83\xb51\x0do|=\xb4\xbc\x9fnw\xcb\xd1\xcd\x9f\xef\xbd\x89>]\x99\xbe\x17\xb93V\xc7\x9f\xee\xc3\x84\xba\xb5\x17X\xa1\xe5\xfdtGzQh[\xee/\xa8\xa9\xe7\xcf\x0c\xff\x17\xa9\xb9\x99z\xb6\xf7\xf3\xca~\xd9$\xe4V\xf9\xfa\xcc\x8a~\x952 \x8a_\xa4kg\xcd\xc2\xc5/0l\x7f\x13,\xf4\x99\xb7\xfbYMSo\xf6\xd3U\x9bz\x9e?\xb3\\=\xfc\xf9\xee\x9b\xda\x86\xfe\xf3\xa3in\x1b\xfb\x89\xb7\xffY53+X\xdb\xfa\xe1g\xd5\xccmO\x0f\x7f\xbeN\x9e\x1b\xde\xccu\xc7\xb2\x7f\xde \xa6\xea\x97\x0cj\xd0\xb43,s\x11\xfe\xbc*\xdf\xf9\xe9FZ\x80)?\xad\xc66\xc2\x90\xcd\xfb\xb5>\xfd\x05\xce\x8e\x91\xf6\xcd\xe2\x974\x92m\xb9\xab\x9f\xaf\x9d\x15\xfc|\x139\xfa\xfe\x17q\xd9\xaf\xd1\xe2m\x0d\x7fn\xff<\x1f\xfe2g\xcd\xc6N\xf8\xd3S\xd5\xf7B\x16#\xb9?\xdd>\xc1\xca\xfaEJn\xd6\x81\x11\xcd\xbc\x9f\xd6\xf5k&\x97k\x98zhm\x8d\x1bG\xf7\xcd_P\xc5\xf0\x97D!\xa1\xb1\x0fof\xc6\xd4\x83\x08\xf7\xa7\x07\x13\xa8\xd3m\xcb\xfc5\x9aB_w\x03\xc6\xb7?\xad\xed\xb06n\x82\xa9\xfe\xf3\x8e$<\xac=\xd3\xd7\xd7\x8b\x9f\x9e1Qh\xd9Vh\xfd|\x1fn\xad\xc0\x9a0]?m\xd2na\x85\x06x\x93\x9fn\xa7\xad\xe1\x87\xd6T\xb7\x7f\xcdhX0\xd6\xfc\xe9\x86:\xdeX\xee\xcc\xf8\xe9h\xcb5\x82\xd0\xf8h\x8d\x9aX\xb7\xdb\xfa\xc1\x8b>\xf2\xa8\x89\xf4\x93(\x0c?&\xd2D\x06\xc7\xda\x7fL(\x89\xf4\x9f\x98QI\xed\xdeL\xb7\x7f(\xb9a\xff\x801\x81\xe1\x7f\xa2o\x93\x9b&\x8c\xf8~ \xb9\xb7\x9e\xe8\xfe\xe7\xd3[.k\x9e\xcf\xb0a\"\x93\x1e\x85\x0b\xcf\xffx5\x9e\xc8b\xf8\xfe\xc7\xcb\xd1d;\xadm+\xbcY\xeb\xaeq\xe3|\xbc\x14Jv\x88\xee\xaff\xde\x8e\xd7\xe6\xdf\xe3\xfd,\xea\xb9\xa1\xe1\x86_\xbe\xfd\xdb\x97\xaf\xa7\xbc\xdf\xdd\xbf\x7fw3\x99L\xe6_-g\xed\xf9a\xe6\x7f\xff\xff\xd2s@H\xa0\xee\x7f\xff\xed,1\x0e\xc5\x0b8^5_\x9ca\xcc|\x01\xe2\x8c\xb9\x80\xf9\xc4\xb8\xc0Y\x87]Z\xc2\x86\xed5\xd4\xb0/5\xf0Axi\x1d3\xfa\x12\x85!u\x01'F\xce\xc5\xb9x\x80\\\x9c\xc1qp\x82\xdd\xa9\x1d\xcd\x8c\x0c\xf3\x7f\xff1\xf1f\x87?\xff\xe5\xc2\xd8\xf4H\xb8\xac#\xefpv\xe2?\xbf\xbb_\xa4/\xff\n\xdd\x92\xd0\xf9G\xd8\x0c\xf9\x96\xf9#\xb8Y\x06\xdd\xcc\x8c\xb9\x1e\xd9\xe1\x0d\xac\x94\xe0\xf4_\xe2\xb1\x90X\xd2}\xcb\x04:\x1b\n\x86o\xcd\xff\xf6\xdd\xc5\xf3B\x1b\xfc\x8b\xa5~w\x93\x85\xb2\xc5\xfbY\xa1\x0c\xfa|\xa1\x8e\xe7z\xe0\x97\xfe\x968\x89\xeb\xb9o\x99j>\xffyS\x16\x86>c\x0b\x9d3s\x04\xfcy\x93>\xd7\x0e_\xa4/\xb9\\\x86\xe8\x81\x91\xa1\x9e\xedE~\xf0\xdd\xfd\xe3\xc4fS6\xf3\x87|>\x9f\xf9_\xbc\xc0\xbf}w\xff\x08\xfe\xf7[\xe6\x0f\xf3\xf9<\x85\x9b\xbe~\xb8\xa9\xe4\xbfelVa\xc3\xfd3j\x902\xf5\xe2\x9f\xferJ\x99\xc9\xe5\x8c \xfb\x13Y\x8a\xf9+y\xaa\xc5\xaf\xb7\x95\xb3l\x99?\xe8y\xf6'2\x96\xaee\xacT\xbf^\xe6\xab\xe7\xd9\x9f\xc8W\xbe\x9a/\x7f\x91\xab\x96g\x7f\xa7\x9a]\xc9U.]3\xf36\xcf\xfeD\xc6\xea\xb5\x8c\xa5\xdb+fV\xf3\xec/\xcew\xad-K\xa5\xaf\xa5\x8b|\x15\xf8O\xe4\xbb\xbdZ^\xe1k\xf1\xb2\xc0J\x9e\xfd\x89\x8c\xb5k\x19\xaf\xe4*\xe7\xd9\x9f\xc8U\xbf\x96\xabP\xbb\xd6.\xa5<\xfbc\xe3\xf0\x8fSov\xc3\xb2\x7f\xcb\xfc\xa10a\x7f\xa9\xa1\xa4\x9bzh\x88\xf3%\xf8/u~\xe2\xb3\xf2\xe2\x04\x93r\xa1RH%p\xf4\x95'N\x97\x0b\xe5r\xd9H\x0fa=4|\xdb\x8b\x93\xdc\xcej\xe5z1m\x82\x1d\xc6\xa7gu\xf6\x97.\xc0\xf0\xa7\x91\x7f\x10)\x8c2\xfbK\xa5\x98z\xee\xd47N\xd50j\xec\xef\xac\x0c}\xa2\x07\xa1\xe1\xb3\xd9t\xcb\xfe\xd2\xa7\xd7k\x9be7\x0c\xf7[\xe6\x0f\xd5\xa2\x9e/\x9d\xcf8\xc3po\x16\xfa\xd1\x80iZ\x9f\xdd\xa6\x15,u\xc6\xbf\x81qc\xeb\x91o\xd8\x90\xa8v>\x9d\xd7\x86\x1fX\xba\x1b\x97\x93gs,\xad\xc74\x0e\x81\xe1\xdfL\xec\x88\x154\xab\xcdfF:\xc1\xcc\x9b\x99\xa7\x04\x85R\xbdp\xc6\x0d\x86;3\xf4\xad\x17\xc5i\xf2\xf9\xcaLOwJ0\xd5\x9d\xb5u\xb3\x8e\xfc\xb5\xcd\x92T*zZ\x87mLC\xdf\x9a\xdel-\xcf6B\xd6m\xa5|\xde\xa8\\\xad\x8do\xcc\xbee\xfe0\x9d\xb3\x01w62\\\xd3\xbb \xd9/\xeb\x94\xfam%\xdd\x1e\xdf\xdd\\.\xf3\xb40\x1c\x83\x8fS\xdb\xf3o\xd6\xbe\xe5\xe8>\xeb\xc5Z}2\xcf\x9fw4K\x12\x18S\xcf\x9da\xa2z\xbeP\x9c\x1bW\x121\xe7\xcbFd\xbd\x9e7\x8aW\xce\xeft\xdf\xb5\\\x13\xc8\x95Q\xc1\x95$3\xdd5q\xc0\x9c\xdb\x9d\xb6\xf5\x06V#\x89\x99\x99:+e\xd2\xf4\x03\xf9\xff\x83'\xf1\x82\x10\x8c\x9cN\xebi\x0bx\x02\x13\x1a\xbfZ\xd0\xe7g\x95\x14\n\"v~>\xd5\x0b\xa5\xab\xf9g\x86m\xa0\x07\xa9\x97\x8c\xd2U\x15\xcc\xd1]oHQ\x86\x1eN\x17l\x90\xe4\x8d\xd2\xb4x\xb5\x14+`q\x11S\x83\xfe\xe6Z\"o\x0d\xdbAl@\xce*zz\xd8\xc3H\x90EH\x04-\xc4\x02\xa4\x9b\xa9\xe7\x86\xba\xe5\xb2\xf1\x9e\xb8f\xf3-#\xdcDz\x0e\xb3\x1c\x01\x0c\xdd\x1b\xdd\xb6o\\\xcf5nl\xcb]%\\\xb7\xf0\xc50<\x92\xb9\x99O\xc6h\x12J\x9f\x84\xeeM\xe2B\x18\xcf\x0b\xdb\x0fk\xdd7\xdc0U2\xa4\xbeb`\xf9l\xfe\xb3tI[,wa\xf8\xd65]\xe2\"I\xac\x0f\xc8\xfel\x10\xb1\xa4q\x1c\xf9\x83\xe6&\xf2\xa5\x0dO\x8c\xccw2\xa5Z\xf4sY\x82\xady3\xb7l\xfb\xa3l<\xe3Tw\xa7\x86\xfd\x83\xb5\x12\x99\xd2UJM\xf8\xb7\xf2\\\x19#Wr\xf0<\xc6\xde\x98F\xe1\x8f\xb6y\x9c\xeb\x9ay\xe7\x032\x95#e\x1c\x04\x85o+?3\xe9F\xb7\xc37\x0baT\xbf_\xeb\xee\xec\xc61\xc2\x857\x0b.{I\x04d\xa9\x02\xdf\xcd$\xe80\x8et.f\xba\nK\x1c,\x1e\x0eov\xbe\xbe^\xb3i~\xd1\xa0i&K[q\x96\xf7\xea@\xbe\xccw\x99\x93\x8b\x81\xc3h#\xd5\xd6\"\xaa\xbc\xa8B\xc3\xf3\x1dP\xc5\x96x\x82u\xaeX\x1f\xc7\x1d)\xcbS\x99\xd2f\xc7\xe1\xd4;\x19>\xc5\x0e\x90\xc5r\xd7\xd1E\x11q\xbcuY\x04O\x7fY\x8f\x8bA'r\xb0\xc5\x92\xee\x1b\xfa\xa72\x9de\x99{\xd3(x\xa3\xdfL\xe3\x9c\x15\xd2y\xa7\x91\x7f\x8d\x1d\xdek\xbft\xde\xf7\xe7\x94\xc83]\x18\xd3\x15kq[\x9f\x9c\xb3\x84\x88\xc9/K\x8as]10\x15\xac\xbe\x97\xf5\xb2\x9b\xdf\xcc\nCR;m7\x80\xfdl\xb2\xe3\xaa\xfa\x8a\x15\x17#&\x91\xfc\x1a\xb9\xb3(\xe1\xac} \xc3g\xfd\xeb\xd5\xd41S\\;y\xad\xb4\xd0\nm\x83\xcf\xd3k\xe3-\xb9\xd6\xf8(\xff\xda\xff\x88W\xa1U\x1f`\xeb Tx\xeb\x89\xedMW\xe7\x03\xf6\xb2)O ?5SE\xf2P7\x85\xee\x89\x17\x86\x9es\xcauZ\x84]-\x08r\x9e\x13\xbfh\xdc\xf7\x8b\x9c@\xd7\x1a>\x1cZ\xa1\xe1\xdc\xe8S\xb8,\xb5(\xdf\x04k\xdd\xbd\xd1\xe7\xe1ub\xbe\x16\xe2$T[\x81\xb76\xdc\x9b r F~\xa3b\xef\xd8&\x14\x18S6\xa4\x85\x99\x9f\xa2\x99\x0fT\xfcX\xb7\x88\x1a\xa0\xb7\xfb\xdcdz#\xef\x07~\xfc\x8d\\\xb0\x1f\xf5)\x83\x0d\xbcj\xa7\xdb\xcc\x1d\xb3n\xbb\xca\xff\x895\xe6\x99\x066\x06l+\x08q \xcc-?\xb8\xea\x0c\xae\x15\xee\x1b\xc1\xdas\x03\x83%\xba B=\x8c\x82\x9b\xc8\x9dy\xd3\xc81\xdc\xd0\x98]\xa1\xce\xd2\xc5\xd8I)\x81[\x06>\x95\xed4\xdff\x87\xabN8\xde\xe3xc\x9a\xce\x0e\x1fR\xc1\x1f\x83)[\xa9&\x97$\x9f\x19\x89\x97\xb9>7\xf8p\x03\xfa\x87K\xbb\xc8\xf5\x7fY\xda\xd4s\xd6\x11\xeb5\xe6)/\x9d\xc2\x1bS\xdf\xf6\xf4\x99\xe5\x9a\xc9\xf2\x8d\xb9\xe7_D\xbcb\xcf-e\xfbG\x99Co\xfd\xd9\x01\x08\xd71n\xe0\x1a/\x13|\xcf\x0en\xf4\xe9\xd4X\x87\x82\x02\xae\xc7^g\x9b8)\xf3~L\xfde$\xf9\x8en\xf03mo\xa6\xdbP\x91\x99\xa5\xdb\x9ey\x13a\xf40\xf3\xbd\xf5'\xe7`*/\\\xee\xf8\xdc\xa8\xb9\xc8\xf4\xf1Z\xfb2\xcb\xa7\xc6\xd9y6\xd1\x96\xa9\x96\xba\x1a\xc1]\xc9\x1c\xb3\xf95\xc7r\xc5h\xd1\xcc\x86\x8dK\x0f\xb8\xf4s33\xd6\xbe1\xd5\xaf3T\xf1b\x88c\xa6\x85un\xf4\xb5FJ\xa4\xfd\\\x07\xfeQ8*\xbc*u\x11h\\\x8f\x02.\xf3q\xb7\xb7(\xbf\xd18\xef\x14\xf3\xbe\xe2E\xf9\xe3\xe5\xd1\x95\x9b\xb0\xdbqC\xf5\x03-\x96\xfb)_s\x9e\xed\xady\xfcv\xc9\xac-\xe0\xc2-\xea\x83\xc3\xeb\x0b\xb6\xd9\xd5\xdac\x86\xcb\x05\xd0\xb5\xe0\x81'\x9ey;\x97\xf99p\xab\xf1\xee\x83m\xb0\x10\xe9b\x95~\xba$\xf1 ex)\xfcj\xf0s]\xcf{Z>\xaa\x0ek\xb9\xc3\x1a\xf7i\xdf\xbb`\xfc\xce\xca\xe5\xbdK\xbe\x1fe{\xe7\xd2\xec\xdbY\xbfH_\xc0p\xea\xb9[\xc3\x0f\x8dY\xe6E\xdc\x83\x80\xbe\x93\x9d\x8b\x82\xd0s2mcf\xe9\x99^d\xf8\x87\x8bD\x7f\xfd_\x99\xd3\xd32\xd3 \xc8lo\xbf\xe6\xbf\xe63\xff'\xd3\xd6\x9e2\x0f\xd6\xd4p\x03#\xf3\x7f2\xa6\x15.\xa2\xc9\xd7\xa9\xe7\xe4\\c\xea\xd9z\x90K\xe7\xfbk\x0e\xf5e\x14\x1e\"\xc3\x15\xe3\x7f\xfee\xff\xc5\x05\xfc\xf5\xbb\x9b\xf9k\xa6\xf05C=\xdf7\xa6a&\\\x18\x19\xd6|\x19\xbc\xb37c\xb9\x19\xdd\xb63\x13\xdf\xdb\x05\x86\x1f|\x85\xf4\xc5\xaf\x99G\xdf\xd8\x1an\x98\xd1g\xcb(\x08\x99\x89A\xc6\x9b\xc35\xefL`\x1d\x8d\x0c\xac\x0c3\x9eo\x19.\xde\xeb\x99\x99.\xd8<\x0b2\x96\x0bJ2\x99\x8c\xa6f<73\xb4\xdc\x99\xb7\x0b2\x8f\x0b\xcf52\xba;c\x85Z\xdd\x01\x94\x05v.B\xc7\xce\xc0U\xf5\xc4M\xc7\xdf2\x85\xaf\x85\xca\xdf2\xb9\xbff\n\x90.\x93\xb9q\x02\xbe\x1e\xb2\x8e\xc6\x0d\x9a\xf6-S\xc8\xe7\xff\x04\xc9\x8a\"\xd9\xce\x98\xac\xac\xf0\xe3\xa4\xff\xc9{a\x80\xcc\x1d\xfc\xbe\xbd\xd07\x1cok@\x0f\xe0]\x9f\xe7\x8d\x9f\xf9\xb3\xb7\xb6\\\xb6\x84\x0b\x8d\xd9_N\xcd\xc3&\x186\x0f\xe6\xfb\x96\xc9\xff-6\x1eu\xcb\xb3\x19(\x9e\xf2n\xe6\xcf\x00\xb0\x1245S\xbf9)\xd3\xfd\xd0\x9a\xda\x86\xf4\xdd\xd5\x03k\xc6\xfe\x9d{^h\xf8\xd2w\x17c*\xe9\xbb\xeb\xea[\xe9\xbb\xcb\xfd\x19\x96\xcc\x15~\xcb\xc0\xaa\xe9\xbc\xf8\xe4\xe8J\x0c\x11w&j\xea\xb9\x99\xdf\x16\x85\xdf2\x9c\xee\x82\xcc\xce\n\x17\x96\x9b\xf9\x8d\x17\xf2\x1bK\x0c\xaa~\xe3\x06\xfe\x96\x81\xf8p\x1f\xb2\x01\x95\xa1\x0b\xdfs\x0c)\xd3\xb0|c\xee\xed%\xd0=\xd0\xe7\xbao%\x86Q\x01m\x05F`\x16|\xcb\x14\x0d\xe7o\xa9\x86\xfbZ\xbd5\x9cd\xfbe\x9a\xbe\x17\xad-\xd7\xcc\xf0x\xf4\xf7\x1d\x04\x9f\xea(6a\xdfMx\xaa\xf3\xdc2\xa7:\\\\\x93@\x88|\xd6\xa5\x8en\xb9\x99\xbf'\xa7\xce\xfb\xfdw^\xd8i|jj\xa6\x96*-\xf2\x8d\xf4X,\x18N\xa6\x9c_\xef\xcfu^\xa9\xc3\xc4\xdbg\xf0I<\xa6\x9a\xf7eL9\x83\x85\xb7\x83\xe4\xe2\xa6x\x96H\x9d\x998\x90\x92\x95^\xf8h\xc2\xe9\xc9\xbeo\xa2\xf7X\xc0\x96\xe2\x0cA&\xf9\x14*\x8a\xf8\x96\x81\xfbem\xe3\x92\x15\xaeR'\xbfh\xa7\xbbS\xb4*\x98\xea6\xabN\x8a\x1a\xdf\xe2\xd4\xa4\"o6\xcb\xfcf8\xbf\xc5\xd9x\xa3\\d\x84\n\xafE\xa3\xc3\xd0\xbe\xb8\x0dJJ\xdc\x11\x95\xaceb\"\x14\x0c\xe7\n\xf1=1\x86\xb4\x8d\xadag\x02\xc3\xd1\xdd\xd0\x9a\xfe\xce$X\xf8\x9a\xe4A\xf0\xd3\xa7\xb0\x85\xd1\x04n@f`\xff\x87\x0f\xc0B>nB\x9e\xd7\xd4\xd7p\x12SE\xee\xcc\xf0\xc1\xa9\xa1c\xc9\xd4\xb2 ~\xc8\xd4\xb2 \xf6\xe3\x03\xe7\xbdKwi\x97\x93\xf4%\xa7[\xe3o\x82\x95\xb5\xfe\x96\xf1&Kc\x1a\x06\xef\x0c\x9eDe1\xb4\xce`\xa4w\"\xb5L\xe5\xf6\x06\xcc\xe5\xf3!S\x12,P\xbc\x9cA\xcc\x8c\xcc\xc9\x8c$5\xb2\x99\"e4U\xcat\xd7\x86\xaf_\xa7H}2\xf1\xff\x0d\xd6$\xff.\xa6P\"\xec\xff\x96q=7=\x84\xce\xea\xfd\xed\xd4\xd8)\x97\xfbv\xb2\xcc\xcc\x0bCc\xf6V\x13\x898\x83Ur\x16\xadm\x8bE\xf1\x19\x16\xb6\xb2#VEo\x9e\xf9m\xe2\xd93\xc3\xff-39@B\x97\xb5\x82\x1f\xd9\xd0\xe1\xbc\x97\xab \x7f\xc9\x9cW\xe8{\xae\x99\x984\xe2\xf6@>\x83?b@\x98\x96\xbb8FJ7\xf2\xb5\x96}\xb7P\xb4\xff\nC\xfe\x03p\x0b\x8b\xc3\xa5\xef\xeej2c5\xd0\x9d\xf5\xef\xc14\xef42\xdc\x98\xcc\xcc\x93\xdd\x99\xefY\xb3L\xf9k)\x11\xaf\xcc\xe6n\xd2\xab\xb3\xc4\xdf2V\xa8\xdb\xd6\xf4\xa3>L\x10\x0bkO\xdc\xe2\xb8\x8c\x88\x1c\xdd_\xbdE\x0b\x7f\x98\xcf\xf3\x10@\x089\x9f\xff0\xf6z\xbf\xb3\xa0H\xd8\"\xbc\x08Vj\xf9?\x9d\xeb\x16\xd3\xe3\xb7 \x9a@\x8c\xc4\x8e\xd6\x898j\xee{NF\x9f\xcfY\x18\xe5\x9aW\xc2{P\xf3\x86\x15\x11\x0c\xdah}a\xc9m\xe5O\x7f\xbb\x08\xc7\xb1!\xc4\x93f\xdf2\xbea\xc33L\x00\xa7\x9f\xf0\xf8\x96\x99\xe8\x81\x01,\xc1+\x14D\x13A8\xc847\xf9\xaf\xc5\nDg\xfc<\xb7\"\xf4\xd6p2q.\xf7\xd7\x8c\xeaL\x8c\xd9\xcc\x98\xfd\x03\x05i\xc8\xa7\xd1\xcc\xf2\xa4\xef\xee\xd6\x9a\x19\xdeY\xa4l\xb9\xd0|\x9f\n\xb8\x12%0\x07V\xbe\xb9=+\xe3\x9b\xeb\x85\x7f\xfe7\xb1\xe3\xfc\xef\x7f9+\x0bx;\x1d\xee\x9c\x95\x98rD\xe0\x81\x98\xfb\x80w\x10d,\x97-\x05\xce|n\xa2\x96\x96c\xa6\xbc\x05\x9f\x85\xbc\xd0T1wL\xd1y\x10\x97\x8c\xdd\x82\xad u\xf9\xe6{^\xc8\xabq\x8a\xc6\x16\xd6lf\xb8\x89\x8eox\xbe\xf3\xfb\x87$\x14\x96\xae\x89\xe5\x0b\xab`\xf0\x89\xf5Y\"&I\xaf\xeb\x843\xbf\xea*`\xa3E\xfa\xee\xc2\x05:\xe9\xbb\xeb\xadCF;kXt\xd9\xc6\x94a\xe2~\x85+l\x9c\xb8\xd7\xfc-\x0e\x16\xeb\\q\xee\xfdu\xf5iY\xf9\x06q_\x0d\xcdy\xaf\xb2\xf6{3t\x7f\xab\xd2\xe9\xc5\xc9e4\xfe\xf6\xe0MzIo\x8e\x01Q\xfcd\xa0(\xf6l\xa1\x98\xb0\xf4G4%\x17(\xe9:`/\xa5+\x91~F\xf1\xfa\xec($6V2Ccro\x85\x99Idfv\x0b\xc372\x7f.\xfe%33X\x10q\x082.pk\xe67\x98\xfd\x9c\xfa\x81e~\x03M\xf0|\x01\x92A\xdaw^\x0b\x08,W\xc7G\x023\xa1\xc7\xfd\xed\xd4\xb6\xa6+}b\x1b\x99\xf0\xb0\xc6\xa1\xce\x88\xe7\xdd\xe1\n\xdb4\xff\xc6\xd2\xff\xf3\xf7/\x88~\xff\xf2\xef\xd2\xa9\x11\xc49\xdf\x08\x8c\x90\x9d:AA4q,\x86\xe1x\x16a\xb5\xbe^\x1b\xba\xcf\xba\xe0[\x065\xbe5\x04S\x1d\xe7\x1a\xbe`1f\xf1Z\x9f\xcd\xae,*\x13\xd6\x7f\xfbv\xe3xG~\xcf\x11\xe4O\xd8\x16W\xe5\xddT\xa2R\xef&\x8a\xaby\x99\xea\x1d\x06\xcd\x88\x1a\\\xe5\xed \xf4|\xc1M\xd3(\x10\xe4\x14\xb9\x81\x11\x8a\x88x\xed\x1b[\xcb\x8b\x02\x88\x8a/*\x7f2\xc5\xb7\\\xf3j\xcd\xdfL\x12W\xfb\xcd\x14\xa7:\xa7\x93pn\xc7\xd7\xbf|\xcb\x14\xd6{\xbe\x16\xe07\xdb\xb2\xc5\xe7{\x1bI\xef\xf5\xea\xdc2\xec\x19\xab\xff\xdf\xd3\xad\xf7\xb5T1\x9cL\xfe\xeb-\xfeS-\xa6\xc2\x88\xaba7\xcc{\xd8\x8e\xe7\x85\x9do9\x9c\xcf&\x11G\x9e\xd8\x03\x82\xb0\xdf\x84M\x89\xe8,\xc1\x92\xa5\x14\xf7\x88\xba\x05^f\xc6\x96\xdf\xde\x9a\xf9\x17\xdd72\xae\x17f\xa6z\xc4\x827/\n\x193\xb8,\xc7!s4|/\x03w#\xe1\xf4\x7f\xa3\xbc\xeb\xa1\x9em\x98\x86;\xbb\xdc5\x89\x97\x7f\xe9M\x13\x1e\xed\x8a\xb5Rr\xa5\x17\x87\x1cp\x0d\xe6\xcc\x8d\xf0\x97+\\q@\x89\x01\xce\xe0\x12\x87\x13\xcf\x18\x7f\xe3{\xeb\x89l\x1f\xed']\xdf<\xbb\xb2l\x16\xd1i\x06\xa2S\xd6V\x99\xb76\x15a\xf1\x9c\xdcy\xf1L\xdf\x08\x82\xf7b\xbbd=\xdf\x8c\x83?\xa65~\xb9\xe2dl0\xf5=\xdb\x9e\xe8\xfey\x0c\x95\x8e\x0dN\xdeS\x8fB\xef\x87\xb7\xe1\x12\xc1\xdeY4\x93\x98\x80\xe7\x11\xa1\x98\xfb\xe2\x86\xc54\xd9\xfb\xfa\xcc\xf2b\xae\xff\xc4x;\x1b\x1dW\xda)5\x01#?\xf0|\xee\xc8\xbcy\xc6r\xa7>L\x00\xe8\xc0\x99!$\xfe\x84\xe8\xa9\xab/\xedw#gb\xf8\xc8\xd7\xdc%\x01Y\xdf\x04k\xcb\xbd\x89=\xdf;\xc9\xbd(L'\xc7J\x8bX\xeb\x8d.9_\xae\x9f\xfc`bc\xe8\xcc\x19_,\xf3\x91YO\x0b\xe8s\xc7\x1d\x13\xb4\xa1\xfb\xd3\xc5\xbb\xbe\x97\x8d(\xe0\x93\xf4.)\x96p\xe3\xcd\xe7\x81\x11~\xcb\xdc\x14\xd7\xfbO\x0cdtwb\xf4\xc0\xd2\x1bn\xb3\xbf\xec\x90\xe46\x9d\xe7f\x1c}\x9a\xbc,ta\xff\xa9\xd5\x11\x8ao\xf9?\xef\xa7\xb7s$\xf6\xce\xdel\x8c7\"\xb7_\x12QA'\xe2j\x03V\x1ak\x9fQ\x7fh\x19\x01\xd3\xf4\x1bg\xdc\xdf\xaeu\xe7\xa9.s\xcb6n\xa25\\\xb9M\x0e\xba\x0f\xa2\xaa\xe4B\xe1\x1a\xb9\x8b5\x97\xe6\x86\x86\x8f\xfb\xb0\xbf\xd7\xca\xeb\xfb\xa7\x97\xd9\x1f\xf0\xfei\xd73\xb1\x85zj\xb3\x99\x11\xea\x96\x1d$bT\xc7p\xa332?[\xa1\x7fd\xdb[\x9b)p\xdb\xe6\x99\xea\xf8~\xca\xc4\x92v0\xf5\xaduh\xb9\xe6\xef\xd5\xb8\x1f\xd6\xe0l\x13c\xaa\xbb[\xfd]\x0f\xf7\xf9\xdd\x8b\xb4\x9br\xd6\xb6\x1e\x1a\xd7\xf7*Ds\xdc\xc1\x92\xff\xbf\xb3-\xd2\x9e\x0d\xb7 \xfe\xfdM\xa3\x7f\xd5\xbd\x04\xdf\xa1\xce\x8aJ\x9e\x9b\x19z\xa7=(}\xb5\x03\x887\x0d\xbee\x16a\xb8\xfe\x96;\xbd_\xc1\xf2r3o\x1a\xe4\xe0\xb5\x989\xcc\xdb\x8a\x820\xa3\xf3\xaa\xc1\x89\xcc\xd4\xd6\x03`\x12\xdd=\x88\xb0\x10(\xca\x88\xfdE\x00\x1b?!l\xaa\xc4/\xebd\n\xb1\xfe_Q\xd1_3\x7fO\x87\xee\x81g[\xb3\x8c\xe91\x17\xf1\x9f\"\xd9\x0d\xde\x1f\xf2Fb8\x99L\x8dwM\xbd\x91\x1aNB\xea_\xdd\xc6\xbc\x91\x9b}M\x01\xf1\xdd\xb6\x85W\x8e\xf2\x06\xceP\xdd\xcdL\x8cL\x14\x18\xf3\xc8\xce\xcc=\x1f\x9b\xd9d~\x0d_K\x91\xb1\x82 2p\x87\xca\xf33\x0b\xc3\x86eD\xe8e\x1c}ed\x82\x08\x96n\x96k\x06\xb8/\x1b\xad3k\xc3\x9f\x1b\xd3\xd0>|\x85\\\xd0\x8b!k\x18\xcf\xc5\x8d\x88\x85\x11\x18\xd8\x93\xd0Y\xac73\xfc\xa92\xde\xa5\x17\xfd\x05V\x9fob\x7fK>\x8f\x16\xf9\xf6\x9fgz\xa8\x7f\x83=\xbf\xdc\xda5\xff\xc6b\xd3jY\xb2^H\xb7\xbf\xcb\xdf7MO\x96e\xb93x^\xa8\xcf&;\x84\x1f\x8d\xca#Y\x96\x15U\xb9\xad>0\xa0\xf9\xdao\x0c\xef\xfaO\x93\xe28?+6\x0e\xe3\x1e!\xe3f\xdd\x1a\x0fHk2l\xb8\xe3\x97\x96=\x1a\xf6+\xd3\xa9m?\xb2\x0c\x87\xc5\xfa\xa5\xb1\xc8\x0f\xd5B\xbb\xebt\xb6\x93Ae\x81\xe9+\xe5\xc9\xab\x8c\xff)\xbb\x9cqG\x16\xa3bh\xcf(\xb1\xc6\xc3\xd9z\xb2\xcc[\xb7\xb7QN\xb3\xc8z\xac\xe4\xad\x97\xe3K\xa7\xad\x16v\xbd\xe2\x8b\xa7?/\xaaS\xe7\xe5\xc9XU\x9eG\xa5\xb5?:\xda+mY\xcbj\xca\xbe\xdcu\x17\xe1\xb4Y\xb0gM\xd54\x9a\x85`\xe2\xb6\xab\x86\x92\xb7F\xc3\xfev\xe4\xde\xb5V\xe3\xe5z\xd0WG\xb1=S\xa7\xef<\x0eZ\xde\xec\xae\xbf\xebZ\xb5\xed\xac4+=\xb8\xd3\xe3\x83S?\x8c\x0f\xb5}\xf7iUy8\xca\x87\x87\xa3vxxm\xad\xc6V\xe1h\x0c+\xf9\xd1\xab\x19N\xdc\xf62\xa1W\x1d\xbfv\x96S\xc7\xde\xcd\x9a\xf6vb\x91\xc3\xb89\xaa\x8e\x86\xad\xed\xec\xb5W\xd7,\xed\xd4\x06\xcd\xc2\xee\xe99_\xd7\x9cE~v'W\x1f\x0e\xf5hz\x88\xfbb9)\xe6\xb7F\xb3\xb1{8\xaaQ\x9b\xd6\xc3 \xb4\xcf\"\x9c4+\xc7\xae\xdb\xc9?;/)\x9b'n;\xe2m\x1a\x8d\x8a\xf5\xf0\xa1\xb4XLim\xff\xb0\x94\xb7\xd3B\xbf2m>o\x9f\x9d\x97\xe3\xa4\xf4r\x18\x15_\x06\xe3\xe1h\xa9Y\xa4<\x19\xee\xa3\xe9q\xcd\xfa\xfe\x93\xb6\xa0\x1dS\xb5\xd0\xe9\xae\xfa\xdbQ\xe9%\x1c\x0f+\xf9\xc1s\xaf\xae\xb1\xbe\xa6\x95\x95>\xecU\xdbO}\xa5\xfb4*w\xf2\xcf\xc5N\xfe\xa5\xd1~j4:K\xb3\xd8>\x8e\x95\xder\xb5\xeb\xacz\xe5\xf6\xd2\xdc\xb5U-\xa1\xcf\x8e\xa6\xa5\xfeb\xe2t\xec\x84\xbeuZ_\xefs\xfa\x94\xb52u^\x16\xb3f\xfd\xf0\xd2\xaco'J\xde\xeaa\xfb\x98\xcf\xcd\xc5v\xd6\xac\x1f\xf5f}\xa7\xa9\x1dES\xb4]\xfb\xe9\xd9\xbcW\x0b\x8bQ\xd1\x8e\xe0\x1c]Y\x8f\x96\\\xe3\xfdT\xed7_\x0e\xfa\xeb\xd8\x1e\xab\xe3\xc3\xa4\x987\xa7\xa5>k\xc3\xaa>\xac\x1cg\xcdF4*\xbe\xb4\xfaJ\xdeb\xe9\x1f\x1c{=V\xbcRg9=\xf4V\xbdRg9*\xf5\x8e\xcf\xfb\xf6\xf3s\xb1\xb7l\xd1^\xfe\xf9\xd0Q\xe4r\xfbI\xde\xb5\x97j\xa9=\xd0b}\xe3f}9\x1b\x16\xec\x89\xdbO\xe8\xeb\xa7\xf5\x1d?\xd4\xb7e\xb6?\x94\xae\x8cI6Vi\x1d\xc6\xe5\xf3\xaa\xdf\xc4t8\xef`\x1e>\x95\xcdG\xa5^\x9e6\x1bK\xbd\xf8\x92\xd7\x9a/\x11\x9b\xefSK\xcb=\x06d\x90m\xb6\x19C,\x07\xcf}\xf2r\xb7\xd4G\xdbc.w\xac)\x0f\x81R6\xa7\xcdWk\xa4\xcaM\xa2\xdd7\x89k\xe4r\xf3\xc6z'\x9b;\x99\xd4k\xb2\xde(\xae\x97\xf6s\x8fe'\xad\xfesE\xf5W-\xd34\xff\xf9\x9f\xff\x92\xf1\x8d\xb5\xa13\xdf\xb8\xce\xd8\xc6<\xde\x88J\xd0\xe9M\xa1\xfa\xab\x19\x95\x00\xd7\xf5\x90Q\xe5y-W_\xfc\x0f\xa3\xfe\x0f\xa3\xfe\xa32jW\x19\x1d\xfa\xcb\x85\xdaW\x18\xa3\x8e\x0e\x1f2\xe0\x07\x8cz\xd2\xd7\xfb\x9c\xbe\x7f F\xed=}\xc8\x80?\xc4\xa8\xbd\x8f\x19\xfa\xf7a\xd4-\x1d\xe4\x0b\x1a#\xa3v\xcc\xa8N\xbf\x9c\xabdI\xe3\x91\xcc\xe5v\xc3\xc9\xb5\x89\xb9\xaf\xf5\xe5\xe6\x90\xba\x05Yv\x06f\xa9\xdc\xab\xae\x88r\xdfn\xb6\x15\xba\xd3\xa8\xd1\xd6\x0c\xa7\x91\xab\xf4\xf4\x9dj\xad\xe5\xe1\xeey\xb1S\x97me;\x91\x87\xf6p\xb5}!\xbb\xa8\xb6\xedi2\x91\xd5\x1d\xa1\xebE\xed\xb9:\xcd\x03/\xa9v\xe3i5\x88z\x0e\xa5\x9fb\xe1\xda\x0d\xae\x0f\xce\xa9\x18\x97\x1eg$\xbc\\\x1b1\x0b\xe7\xea\xcb\\\xb9'\x8f\xfa\xaf\x8b\xf5\xd8\x94\xe5\xc1\xf3j\xc3c\xda\xd3\x7f\x8f\xb9@&\x0du6\xec\xf8F\x8f\xf1sO\xd0g\xae\xdck\xef\xf5\xbb~~\xaax\xdb\x87b\xe5\xf8\xe0 \x9b=\x00\xe3\xd6\xcb\xa3Wy\xdb\x1e\x94w\x0f;\xb9\xf6XZ\xecF\xc3\x8e?~\xed\x99#\xe7\xc5\xd5\x87\xe5\xba\x16eo\xb7\x07\xcd\xd4\x87\xbd\xbafO\x0bOO\xa43U;\xb6\xde\xb45\xc3m\xd9\xcf\xa5u\xf7\xa5\xd9\xa9\xea\xc5veL\xb5\x1c\x8cT\x85\xcdb\x12\x8e_\xfb\x8b\x13S\x98u\x8d\x97\xddu*\xc7\xae\x03L\xbce3\x1f\x98\xf9\xae\xef?\x0eZ\xc2c\x8c\x9e^d\xb3W\xac\x1f\xc6\x03\xb9\xf0\xb0\x1c\x85\xa3\xa3\xbao\x0f\xe4RwP\xdew\x9e\xccc{\xf9\x1c\xf0\xd9\xb2m+\xabm\xfbI\x0e\xdb\x8aZm?\xc9\xd5\xf62\xc1\xb4Tc\xec\x1f\x8f\xb2\x93=lD\xe6\xad\xb8mJ\xb3\xd2\xecP)\xb5\x0f\x95\xed\xd4\x99n\xdbO\xabJwP\xdb\xb5\xad\xda\xa1m\x15X\xfepZb3\xb2Q~\x18V\x8e\xda\xe1\xa4\xb7\xdf|9\x8eJ\xad\xf5\xf4\xae\xbf\x9e\x14\xcb&c\xf1\xae\xd3\xb0&\xa5\x97\xfc\xe3@K\xb0%c\x83D\x99\xef\xf5\xc7\xe1\x1f\x90\xa1_\xe5j\xaf\xd4\xb2G\xaf\xfd\xed\xd4\xeeo'\xc5]\xc2;\x12oR\xeao\xa7\xc5\xc5vJ\x89\xd2;\xc8\x87\xb6\xa2\x164\xba\xe8\x8c\x86\x9d\xf5\xc4e\xe7\xcc5\xea!\x9d\xa7\xa7uk\xe2v\xf2\xa3ae9~\xb6\xd5\xc7A\x8b\xe9\x8f\xf4\xa1\xbd\xea\xae\xb4}{\xa9\xe5\xbbO\xd3cg9\xa3\xed\xa3\xba\xef?\x8di{\xd5R\xfaOZ\xbe\xad\x98\xfb\xb6\"\x1f\xdaO\xd3}B\x9f:)v\n\x93\xe1K4SO\xfa\xc6\xcd\x94\xbe\xfc\x87\xfa\xc0\x83\xc6^\xc5\x9e:vq<\xec7\xa7N=\xd4\xee\xb0-\xbb\xce\xdb\xde\xa1\xb7T\x0f\xede\xaf\xd29\xaa\xc5N^;\x82wXi\x87\xde\xaa\xd3h/{\xbb\xae\xa2\xee\xda\x8a\xb6\xef\x1cU\xeb\xa4\xefm\xefu\xd2\xa7}\xa8\xef\xe1xb\xd4\xb31\x99\xd5\x94\xdd\x16\xc6\xa5\xddR\xfb\xc8\xbc\xc9\x88\x88\x9dOFZ\xf6\xc4avh\xd6\xe3\xf16wk\xca]\xee\xb1\xe41\x84\xb12\xc9\xd5\x03y!\xcb\x93\xe6\xc2[\xdf\x0dl\xd2\xb2\xc6\xa4g\xd5\xb6\x0f\xf9\xd6\xdd\xe3\xb1\x9c}\xcc\xcf\xee\xfa\xff\x97\xff\xcb\xfd\xfc\xfa\xfe\xa9\xe7t\x94\x9aw\xaf\xd4\xef\x1e\x8f\xcf\xb9\x8f\xf2|\xfc\xff<\xb7\x93\xe5>\x95eM\x96ME\x1eh\xb2\xbcP\x89\xbcWI\xae\xd6\x93\x87\x8c7{\xf2\x95\xffFD\xee\xa9WpMUe\x95\xc8r\x9b\x9c\x9d \xb2\xa2R9\xaf\xf6eYU\xc8\xa5\xce\xbe\xf6\xd4 \xcfCu\xa0ms\xba,\xef\x14\xb9'S\xb5\xd7\xee\xcbJM\xf6\xba\xee\xd3K\xa1\xf7\xa4\xdc\xb6Z\xc1\xe2\xb1\xb4\x1d\xb4K\x8f\xb9\xdc\xf8S^\xa6P\xfd\x117\xf3C\xb1>\xf3\xb5\xb4\xb7\x1a\x9aE\xf9\x7fb\xfd\xffO\xc7\xfa\x9f\xf5\x04\xe9\x98\x9c1\xec'=W\xb1\x10&\xbd\x17\x8f'?\xeb\xbd\x8e/w\xf6n<\xa8\x0f\xc6\xaf\x9d\xed\xec\xb5\xb5dcil\xb5\x7fY,\xfd\x99\x18\xbfs\x1c\x95\xda\xab\x96\x8a\xbb0\xed\xc2\xfb,\xfe\xf1\x1a\xe4\xa4o\xf4\xa1\xbe_\x16\xeb\x7f\xbc\xdb\xf1C\xb1~_\xf9P\xdf\xef\x14\xeb\x1b\xd5Vi\xc5\x18\xe2x\xbe{\x92\x7fV\x82\xf6\xae\xbd\x1c\xf4\xbd\xd1c\xa5\xb9)\x0f\x1e;\x93\xfe\xf2\xa5\xad\xf6\ns\xdaW\xcc\xac\xe5\xe6\xaa\xd9VAn=\xef\x03SV\x9b\xb2\\*\x10\xb9\xd5\x1e\xe4\x9b#d\xf5\xc1\xf3K\xb7\x7f_\xa1#M{kG\xe5\xd7\xee\xe4\x93\xeekf\xa0\x8d\xb5N\xf3\xb4\x01\xbe\x08\x1d[\xc2\x87\xe4\xa4\xef\xee\xcc\xdaJ\xc9\x87\xdc\xf8\xf3e\xfc\x99\xa8\xabO\xbb\xcd=\xdf\x91N\xb7\x14I\xe2n\x19 \x9e\xbb\x91\xe2;\xe4u\x96\xa9 -\x8a\xd2\xa2$-\xca\xd2\xa2\"-\xaa,\x91\xf4\xdd\x8d\x98 \x1e\xfb\xb1-f\x05;\x9a1U\xb3Y\xe2^Nv\xc8j\xc5\xfe\x05|\xc1~|qS\xa4\xb8zm8\xbae\xe3\x1d\x15)<\xbe\xfb\xe0\xfc\xc4Z\x0f\x82\x9d\xe7\xcf\xae\x9c\n\x8dk\x9a\x98AW\xe0\xc8\xe7\x89\xbf\x9e\xee\xd3x\xf7\x1e\x8e\xdf\xa1\x8b3\xf2\xe0Q\xa5O\x99\xbe\xfc\xa4u\x07\xa7n\xce\xfd5\xf3\xb4\xb0\x82\x8c\x15\xc0u\x98\xb9\x1dY\xb3\x8c\x03\xfa\xc2\x85\x1e2\xdc\x107\x89\xc3\xfdX\xe1\xc2\xf2g\x99\xb5\xee\x87\x87L`\x85F\x90\xb1\xad\x95\x919xQ\x18M\x0c)\xb3\xb5\x1c\xc3\xcb\x18\xe1\x14/3\x0f}}-n\xab0\xfc\xf8\xda\x99\xe5f\x92_}\x83\xab\xcc\xe1\xc2p3\xc6>4\xdcY\xc6\n\xe1QF~ .\xb0|c\x96\xc1\x94\xd6W\x03\x14\xb7\x13\xd7\x81\x0c\xdf\xe07y\x89\x1b\xf4\x99>\xb8g*\xa3\x87\xa1oM\xa2\x10/\xd01}q}\xa0\x9a_\xf9\x95L}\x1d\xf2*\xe2U\xc2\xe0[.\x97x\xe08\x88\xacp\x1a\x04\xb9\xa9\xe7\xac=\xd7p\xc3\xe0fn\x1b\xfb\x1bP\xc6T\x80\x1au\xaf;k\xdb\xf8\x16\x03\xff4\xb3\xb6x\xcd\xe9\x9f\xbf\x7fI\xd78!\xdc\xdc\x14\xaa\xfb\xfa\xf7/\xff\x02y2\xffd\xcd}\xdd1\xae\xe6\xbb\xb9\xc1\x87\xa3\xbe\x7f\xf9\x97\x7f\xcaa:\xcc\xf5O\xb9\x99\xb5\xfd\x97\xb8`~\x15+Ud\xea\x0e\x9aw\x1e;\xf8\xcf\x8b\xach`\xe6\xef\xe2\xee\x93\xf8\xc1\xa6J\xf5k\xb1\xf2'\xbc\x18\x99\xceP\xdf\x17\xaaW2\x14no\xbf\xde\xde\xfe\x89_\x90<\xcbS\xde\x972\x7f\xcf\\\xe4\xb9\xbd^Bi_\xbe\x96\xbaP*}-\x95\xde(\xa1z=O\xb5\xfa\xb5z\xb5\x8c\xf2\xbez\xb5\x8cJ\xfe\x8d\x02j\xfb\xca\xd5\x02\x8a_\xafW\xa2\xb2\xaf]-\xa0\xfaV\x01\xb7\xd7\x0b\xb8-|-\x17\xdf(\xe1\xf6j \xe5\xb7J(\xec\x0bW3\xe4\xdf\xca\x80#\x12\x87WrH\xe9\x93\xc0\xb3\xa3P\xbcN\x1e\x1eA\xc9s\xc1O\x8e\xc2\xd3\xe3+Bf\x9e\xee$%\xef~D$\xbe\xe7\xfe\x04\xf1\x0f\x8f\x00&\x06\xf1\xbf\"\x93\xfd\xe1\xef\x7f\x9c\xf8\x86\xbeZ{\x96\x1b\xde\xb8^\x88/\x13\xfaOnq\xba:n jr>Y\xd2\xb5K=\xa7\x93a\x0ds\xa9\x0b\xa6\x0dh|o\xe6\\\xc9\xc7f\xcf\xf5|\xc9 t%cy_\xc2|\xff\x7f\xf6\xfe\x84\xc9m#\xd9\x17\xc5\xbfJ]\x8f\xc7\x92|\x1bl\x02 \xc8nz\xda\xff#\xdb\xf2Xqm\xcb!i\xb6\xfb\xef\x17\n\x90\x04I\x8c\n\x00\x0f\x00\xf6\"\x85\xdfg\x7f\x81\xdaPK\xd6\xc2V\xcb\xe7\x9d\x1b\xaf=cw#\x7f\x99\x95\x95\x99U\x95\xb5\xa0`mE\x00Sz7\xb30\xc9\x8d `\x9c[\x19\xc7\x16\x05*9\xb7\x95\xc7\x1b\x16\xc0uq\x97\xd9\n\x13\xad\x0b`\xcb\xee.l\x85\xcd\xed\x85-\xac\x85I-\x0d,ma+mf/-\xbe\x8bm\\S;\x17mwJ\xc0:\x9a\x1f\xd2\x9b 2\x9b!\x02\x9a\"2\x9a#\x02\x9b$\x82\x9b%2\x9b&\xa2\xcd\xc5\xdeB\x87g\xc7\nn\x9e\xd5c\xb7\xce\xeaa\x8d\x13b\x0bh\x9b\xd5\x03\x9a&\xc8\x13\xd02A>o\xc3\x84K\xf3\xb4K\xb8(_\xb3\x84\x8b\xf2\xb4J\xd8\x82\xdeF \x97\xe5i\x930\x93\xbfIV\xff\xa7\xb5H\x9c\xb7\xbb\x02n\x90\xf8\xb1\x1b$~X\x83\x84\xd8\x02\x1a$~@\x83\x04y\x02\x1a$\xc8\xe7m\x90pi\x9e\x06 \x17\xe5k\x90pQ\x9e\x06 [\xd0\xdb \xe1\xb2<\x0d\x12f\xf27H\xfc\xdf\xb6A>\xf22\xc0\xcb_\x9e\xff\xf5\xc5\x1b\xf2\xab\xfbD,\x7f\xf9\xe9\x9c\xbe\xcc|\xae,\x19\xbc\xa6\x17w\x967\x05{\xd7\xf9\x7f\xb0 'y\xa5\xd9|c\xe9s\x9c>\xfd\xee\xf9\xf7\xff\xeb\xaf\xaf_\xfd\xed\xd7\x1f\xd0\x9b\x97\xff\xfbE@\x95\xfa}Q\x15\xdd\xb9t\x1dAW~(\xf8\xa1T\xb9\xcc\x17w}Qw\xe4\xd3\x1a\xccEC\x96u\x85\xc4\xd4\x81?\xad\x10\xbaB4]\xe1\x8f\xf0\xf0\x88\xf4\x97\xb2\xc9\x06\xea\xabm_\xd4\xe8\xd8\x15\xe4\xaa\xaeuS\xad\xca:'\xefL\x90\xb5\x0e\xe9^\x05bT\xd4\x15=\xca;\x94\xd7\xec\xd48}#b\x90\xd4\xd4\xc3S\xf2\xe2\xe8xt\xf5kV\x93\xc9\xba\xb9)Z\xf4\x11i\x15]\"B\xf8\x1f\xf4\x13fy\xdd\xb363aW:\xc2\x1c\x84\xa4\xf1x'V\xb4\xb5QEhb{\xa2.V&H\x1do\"\xa9\xa8S=@\x1b\x0b\xcfi\xca\xd01T\xd1\x05?@\x17\x0b\x8fE\x97Gntr\xab\xfb\xed\xd5\x9b\x97o_\xbe\xfaU\x90\xf2\xae`\xcde\xb5CW\x92\x92\x1c\xf1K\xb3)\xb7e\xd1\xf2V\x15\xad\x8b\xba/Zt\x85\xd8/\xf4?\x8c\xd87\x07tE\xd6\xbd\x95\xc7\xa4?\x1eY\xc8\x9f\x8cD\xfb\xe5\xa1h\xfa\x8b\xc27t\xd0#\xdb\xf0\x97P\xcb\xd9\xf2-M\x1fj\xfbz\xe3\xe7\xabp\xab\x1d\xaf\xe9Gt\xad^\x88BW\xf7\x97\xa8n\xd8\xaf\xdfh\x80q\xb0Rl\xf4\x0d\xe2\xebt\xab\x1d\xb1\xd4\xc7\xa1|\xafp\x1d1J\x1f\xed\xfc\x0d\x95$\xa4S\x83\x7f\xfc$\xe9\xb2\xb3\xbeQ\xa43W\x05\x18\xc6.]q\xb7b\x19\xe2\xf4\x8f\x9ff\x19)b\xbe\x19-\x13\xd6\x03\n\xcf\xd3\x0e\x8d\xb5\x0e\x9f\xfbC\x03\x00\xd1\xce\x98\x96\xd37\x07\xb6\x86\x80B\xca11\x8eXP\n\xa2w\x81\xd2\xa2>\xb1 #,\x94\x82\xa8[\x83-\xe7*\xc8\x88\x10\xa5\xa0\xc1\xb5\xdcv\x9fX\x90\x11,aK\x1dF\xb8Tau\xf6k\xe2\x88\x96\xea\x0f\x0b\x96\xea\x8f\x8a\x95@\xb3}b\xa8T\xff\x15\x91\xa2\xa4\x0fc\xa0\xe0\xb0\x1a\xfb\x15q\x04\n\xfe\xc3\x02\x05\xffQ\x81\x12h\xb6O\x0c\x14\xfcY\x03\xe5\x91s\xbbW\x7f{\xfb\xf3\xcb__\xbc\xb9\xfe\xfc\xf3\xa1 \x7f\xc9\x1eze\x91\xa4\xae\x1c\x11\xc9\xaf\x86\x80/8*WL\xca\x9cS\x19?=i\xe2\xc2E\x901\xc1\xa2\xa1\x04\x93T\xb0\xb1\x18jJ\xecS\x8diz\xd2\xac\x86K\xa9NV\x15\xe6pkZ\x9d\xa2\xa8\xd2eq\x19\xf8d=a\x0e\xb7\x9e\x18\xd4\xf3\x91[\x0c\xfa\xee\xd5\xeb\x1f^\xbc\xa6\xcb)\x81\x8b\x0f\xe4\x94Gw~mN\x9a\x10Z\x91\xa9\xcb\x00\xb8\xb6\xcc\x98\x10\xca\xd1\x15\x92f!=\x9d\"\xf1?\x87\xb9\x944#\xe2\"\x87\x8e\x8a?\xc1Cs$\xb3\x1f\xfawM\xdaq]\xfc\x01\xcd~\xe8\x19\xf3a\xfa\xaa\xdc\xd6\xc4\xfc\xcf\x1e\xf2u\xa3\xc3\x1dw\xea\xaa\x1fY\x86\xd1\x08d\x1b\x08\x00k;\xb2\xd2\x01\x06d\xa6$\x80}5\xb2\xb3q\x03\xe4g4@\x00\x1e\x05\x90\x01\x01d'\x14\x80\xb96LE\xef\x91U-\xc5{\xb6\xd0\xbem\x95\xb3\xc5\x95\x13\x9d\xa0p\x9d\xec\x07\x85\xfbA\xaeP$<\xd0\x1b\x8a\x8c\x078\x04\xb2\x9c\xdd'\xa1=\xf8*\xa7\x0bL\xa7:\xa4\xfa\x14\x7fT\x9f\xea\x8e\xea\xd3\xbdQ}\x9a3L\xa3=\xc4\x17j^\x9dG\xf8!\xae\xc0\x9f\xe2\n\xfc\xa9\xae\xc0\x9f\xee\x8aO\xeb\xa8\x00\xa3y\\\xf1\xc8#1\x1d\x88\xd1\xf7\xaf~~\xf5:dw\x03\x1e\x8d\xbf#\x7f\xd2k\xda:\xb4\x16\xb7TlP\xdf\xf0\x93\x89\xfd\xbe \xb7\x8f\x11\x86\x15c`\x97J\xac\xf2\xb3U\x7f\xb6Z\x9d\xad\xda\xb3\x15F\xdb\xe6H\xbf\xca1\xf0\xbcce\x91\x0f\x95lKr\x9d \x91\xf1\x96 T\x84\xa1\xd5\xbd\xb8\xb8\xec\xb6\xc4\x98\xec\x05\x8c\xb7\xe4\xd1\xeb,\x18\x07\x91\xd27\xf4\xbc&\xa3\xac\x8f-\xc9\x98\xc9-|\x84g2\x14$]\x80\x91\xb7\x059\xf1I\xd0y\xc7\xee\xda\xa07f\xde7Gv\xeaR@\x88\xa0\xbc\xde\x08-\xa9\x8d\xfaf0\xd1\xa6\xdcn\x8b\x96_\xa0\xa1e5FR\xa3\xe54\x11\xfb~U\x9dW\x05\xbaBE\xbe\xde\xb3Z\xde0g#B*;\x94\xe3\xaeA\xb9\xa2\x02\xa1I\x13\x8bU\xc4\xaeC\xf9\x88\xd8\x0f\x0bA\xe5\x13S$\x0e\x07l]\xe4\xad\xc4\xa0aG\xaa`\xd8\xe4\xed{\xfa\x1d\x9c\x8f\x80pA\x15\xf8\xaa\xdcHp\x1d\xcf\xa9\x02.A\x01\xb8\x02\xedJL\xb7y@(\xa5\n0\xa6\xfd\ng\xd1\xc02u\xd4\xbcij{M\x05U+B0\x80E(\x0c\xc4\xba\xf4= \x9b\xed\xa5\xabnV\x91\x84\x85jf\x0cRWa\x89\x11N\x13\xf2\xe9\x038F8M\x03\xc31\xc2i\x1a\x18\x8e\x11N\xd3\xc0p\x8cp\x9a\x06\x86c\x84\xd340\x1c#\x9c\xa6\x81\xe1\x18\xe14\x0d\x0c\xc7\x08\xa7i`8F8M\x07\xc3>\x17D\x1dn\x89\x91\x91*\xc5\x08\xe9\xd3\xdbbcv\x9b\x9c\"\xa4\x83(\x19@{A\x10&H\x02\xdc\xb4\xe4>C\x03I\x9f\x0b\xd8\xae\xc1\x80\xb8\xf1F\xb1U\x14\xdd\x17\x187\xb7&\x88>\xd7\xb4\xb3\x81e\xaa`a\xdfO4\xc0\xf4\xb9&\xd9\x06\x96\xa9\x82\x85\x18\xf7P\xd6\xef-v\x1fH\x02\xbcoz\x0b\x96SF\x8dA\x98\x02a\xfa\x80\xc0\x91\xa6jJ\xbf\x05\x08\xabJh\xa3\xbf`\xa4\n\xe2\xc3%\x08\x95\x88\x82\xa1\xceo\xeeM\xe4\xf0T\xd5\x93|\xa0\x1aVs I\x0d\x05\xc2)\x10\xaa\x06\x0c\x1ci*\xbc\xe8\x9c\x1c\x9c,\x98n\xf3n_l,,\x12Qg\xb0XN\xa6\xea,\xb6\xb8W\xc8:\x13\xd8\x94G\x9a\xd4\x8d\xa8\xeb\xd8\x1a\x87\xb1\x86\xbd\x8a\"v\x91\xa8\x01\x16\x17\x8c\xfa\xd73\xbf\x1c?i\xb0D\x11\xfdhew\xdf\xf5Eu\x86\xbe\xc3e\xfd\xfe\x97|\xfd\x86\xfc\xfdcS\xf7g\xe8I~S\xd4eK>\x04\xf4\xe4\x0c\xd1\xbf\xce\xd0\xbe\xc07E_\xae\xf33\xf4D\xfc\x8e\xea\xe2X<9C\xc7\xd5\xb1\xee\x8fg\xa8mVM\xdf\x9c\xa1\x9a\xfc\xfbIW\xec\x9a\x02\x1d\xcbAL[\xe6\xf8L\xfa\xbc\x82\xf6e[\xa2\xdd\xaeh\xda]\x99\x9f!\x13\xb1n6\xf4\x84K\xd7\xe0\xbc#\x9f\xca\xc9\xd7\x8d\xf4\xc9\x1c\x05->\xd7 >i\xb9D\xf3\xb6\xa8,\xa0\xee\xb8\x1aq\x99\x1d\x17/Qj\xa7&K\x94L\x12\x07{\xbaD\xf1\xc4A\x9f\x0dt\x97\x80l\x89b;u\xbeD\x93\x8b\x85\x83}\xb1D\x13\x93\x8e\x8b\x9e\xde\xb2\x9c\xaf\xcbz\x17\xf5%9\x99\x18M\xa6\x99\x1b\x18/\xd1$vC\x92%\"\x1f\xa2Q1\xe3\xe72\xe8\xb5\x00K\x14[\x01\xe4sZ\xd4,V\xcc\xba9\xdc\x13\xcb*\x88\xaa\xc8\xbbc[,Q:\xd5\x14`\x94\xa8\xce\xdb\xb6\xb9]\xa2\xc4\x06\xb8-\x87\x98Kg\x1a\x99\xd7\xaen\xc8\xb6\x02H+\xee\xfa6\xa7K\xae\xc4\x06\xba\xd19\x8e#\xac\x00\xbaH\x08\xf8\x9d\x03\xc8\xca\xd5\x12%6:\xd5\x84\xa1fn\x94\x82\xbd\x08\xc1*\x1c\xb1\xd1\xc48\xcb\xe0\xa2\xa8+\x0ey\x9b\xf7C\xf7\x15O\xf4\xa8`\xbe\x8c\x81\x9a2R\x02T\x92\x91R\xa0f\x8c4\x03*\xc2H\x19\xa41Y\xa4\x02\xd5\xa0\x14H\x0bJ\x81\x94\xa0\x14H\x07J\x01U\x10\x07gA5F*\xa4\xcaH\x85\xd4\x19\xa9\x90J#\xd5\xa3\xd6|\x89RG\xc9\x8b%\x9a9\x84_,\xd1\xdc\xa1\xd9\xe5\x12]\x1ae\xb3\xc1\xaf\xcd7\xe5\xb1\x03\x1b\x9e\x8a }\x93\xd9\xeaTP\x02\xb6L\x15\x93BmS\x85\xcc\x00'\xa9\x88u\xd9\xae1\xfbr\x90\x03v(\x87\xae\xe0\xf2\xf2\xf2\xf2p\x07\xc1\xa8}\x1c\x95\x17A\xe3\xa8\xbb\x08\x1d{\xd5E\xfcXk.b\xc8Vq\x11FF\x98\x90\x97\xdd\xf7\xf9\xa6\xb9\x1d\x14\x9d\x1e\xee\xc8\xffg\x87;\x94\x1c\xeeP\xbb[\xe5O\xd1\xf4\x8c\xffo\x92\xa0g6\xf6dd\xbfx\x00{\xba$,\xc9\x03K\x9f\x8d\xec\x17L\x8bS\xd8\xb3%)uv\x12\xfb01\xa5\x9f\xc9S\x9e\x8f\x0b\x94K\xf4\xa78V\x07S\xb1\x18\xb9D\x7fJ\xd3Tmtl\xe1q\x89\xfe\x94e\xea\xe8\xc9\x1e/\x16\x0b\xe51]\x1d\\\xa2?]^^*\x04y\xf1p\x89\xfe\x94\xe7\xb9Z\x12_(\\\xa2?\xad\xd7k\x80\x95\x11\x8b\xa20\xebFVm\x96\xe8O\xdb\xd9\xf0\x8fB\x17\xa4\xad\x9a.J\xb9\xb4\xf2\xfdQ\xd3\xa0\xd1\xe5tIm?=\x1b\xfe\x99\\\x02V\x8f.4\xd0\x05\x04Zh\xa0\x05\x04\x9ak\xa09\x04\xca4P\x06\x81f\x1ah\x06\x81R\x0d\x94B\xa0D\x03%\x10(\xd6@1\x04\x9af*h\nj>MtX\x02\xe3b\x03\x18\xebH\xbe\x8a\xcbpI\x96\x9d\xf1\xff\xeb\xae\xe4k\xb8\x10\xf4\x02\x82.@\xe8\x02\x82\xceA\xe8\x1c\x82f \x14\xac\xd6\x0c\x84\xce h\nBS\x08\x9a\x80\xd0\x04\x82\xc6 4\x86\xa0\xc2\xf5\nT\x0f\x00\xb1b\x0b\x82a\xe7Ja\xa0\xc2\x8d`\xe0\x8bqCO\xb2\x98\xce\xa6j\xa7@ \xdb\xed,N\xe7@\x17\xc4\xc9\x8b$S{(\xba\xd6Fh\xf3T\xeb|w\x0d\xa6\\\xab\x85F\xa1k\x05\x84\xb6\xd1i\xf22\xda\x80Xm\xe3\\\xedP\xe9B\xd8\xd03\x17\xc9:\xd7'?\xe3R\xd9\xd0\xd9\xce\xe6\xe961\xedp(\xebaD\xd8d\xd3\xe9\x85j\x08\xbe\x1e\xc6\xac\xb1R\xfbTA\xb9\x98\x82]\xb5\xa0\xe7\xe9fa\x16K\xd6U\x86\x91(],2U-A\xba\xcc/\x173@4\x07\\\x16\xc5j\xad\xea\\\xe77\xf7d\xf0\x8bW\xb3\x99Y\xea\n\x1f\x0bB\x9e\xcd.\x0b\xad+!\x944[\x14\x9b\x0dP&\xa3_\xce\xd7km\x10QV\xa3\x86\x91kS\xe8\x10i\xf5i0\xc9|\xbb\xdd\x16\x10\x80W\xac\xb8\xd8n\xb6\x19\x84\x90\xc2e\xbb.V\x10\x84\x07\xe8f\xbbQ\xb4\x08\xda'\x07\x8f\x03-\xd1\x93nMV\xc9\xf2z\x83\x9eVe\xcdw\xe9\x87Y\xf3\xb3'\xaa!\xf5\xa3+\x1en\xf6t|\x0dp\xee\x94\xc9&\x916\x91&\xb3|\x06\xef\xef\xcf_\xbf|\xfe\xdd\xcf/\xc4\xa5F\x9f\xe7h\xc1\xeb\xe7?\xbc\xfc\xdb\xc9G\x0bX\x82\x7f\x0e\xed\x8b\xb7\x08\x89\xadq\x86\x83w\xc8\x11\x9a\"\x82\x9d\x9e\xd3\x83z\xe4YL\x9f\xc5]\x8f\xba\xbe8\xa0\xb2&\x9f\xb6\xe6\xe4\x84\x92\x93z\x03\x92SJN[\x98<\xa3\xe4Y\xbf\xd7\xc9\x04\xf0s\xd9\x17m\x8e\xd1M\x8e\x8f\xc5x80\x9eN\x07\x8d\xa6\xd3?\xf3'\xc3\xc4\x06]\xb1\x99\xcd\xf5\x1fs\xc2\xb0\x9d\x1a{\xc4\xd4\xbaK\x04\xcc&\x11?\x86\x13\x87r\xc5\xdf\x08\x9e$\x94'\x19y\xd2P\x9et\xe4\x99\x85\xf2\xccF\x1e\xe2\x8d\x8f\x01\xdb\x00\x01H~\xec\xf6\xf0\x10\xdd\x83\x9b\x03,\xfc3\xb5\x06\xf5\xd4s;\xe5\xef\xf8\x9d\xd6\x18\xc2\x98\x94\xc6\x10\xc6\xa24\x860\x16\xa51\x84\xb1\xe8\x8d\x01?\xb41\xe0\x876\x06\xfc\x80\x80\nk\x0c\xa6\xe4\xc7n\x0c\x0f\xd1=\xb81\xc0\xc2?\xb51|\x9e\xa9\xe1\x9b\xb7\xff\xfa9\xe8N\x1d\xf8\xd4\xf9\x0f\xc5\xa1\xa87\xe4zZ\xf9\x1cx\xd5l\x8e\xf4\x03\xc4\xf2\xd1qh\"9\xce\"\xd9\x051\x84`L\"#\xdaz\x91x\xdf\x8b=e_\x8f\xbfb\x9f\x91\x1f\x9f\x93\xa5\x87\xe19\xf9E<\xa7o\xdf\xa1+\xfar\xc0g\x9d\xd4\xa1\xf1T7\xd3R\x7f\xcd\x80>\x16\x87f\x98\xce\x06\x8a<\x16(\xf6I\x02\xa4\xa1\xa4\xb7OW\xccX\xd2!A\xe5\xbd\x86SRp\xae;\xf4\xf2\x90\xa4>\x83\xd2\xf5\x1e\x08:\xd6\x81B\x89\xbajRkT\x84\"\x07\x9dy\xd2l\xa9Mp\xde$jc\xbe}c\xab\x0c\x80\x84\xebR\x05V\xa5zXM\xd41OT\xc4|w\xc5V\x11\x00 W\x04\x07V\x04{*\xf2y\xfa\xab\x7f\xbc\xfc\xe1\xedO\x0f\xef\xaf\x94\xbe\xe7v\xec|\xc8j\x9d}\x05\xeb\nM\xd9\x95\xdc\x14\xcf\x08\xb1\xb6\x86%\x0b\xd3\x16\xb4\xd4\xd5,+0\xd5\xd6\xb5\xac\xc0\x99\xb6\xc2e\x05f\xe8\ne\x1e\xe0g\xec\x05y'x;\x1d\xe3\x8f-\x8d\xaa\xbb\xee\"t&\xab\xdb\xd8\x83\x8d90\xf1\x00\x13\x0eL=\xc0\x94\x03g\x1e\xe0\x8c\x033\x0f\x90\x1f\xc3\xa67\xce\x15}G\xc6\x83\xc9\xaa\x8f$KH\xaf\xd5\x99\xd6\xa0\x05\xb52^y\x8f\xce\xc6\xb1\x929\xd4\xf7\xe6l,Xf\x91\xdf\x94\x83\x19\x82\x87\x8f\xdb\xa92\x1a\xb8\x1dO\x18b?\xc3\x98\x92\xdf&~\xf4\x98\x8d\xdf\xa6~\xf4\x98\x88\xdf\xce\xfc\xe81\x07\xbf\xcd\xfc\xe8L\xa0\xfbhj\xbc\x91\xec48\xcd.\xa7\xc0\x8b\xc8^\xb6\x95\xc6\x16\x12\x10\x88\xbcV95\xdf8vr\x05\x0f\xc3\xb7SyX\x0d\n\n\x1f^\x89 \x1fX \x1fX\x89\x08\x1fX \x08\x1fX\x8d\x87\xea\x01\xe1`\xbc\x07\xed\xe5Z\xa9\\\xa7\x04\x83\xfe\xc2\xf3\x03cAMdn\xa7rb\x12\x14\n>\xbc\x12\n>\xb0\x12\n>\xb0\x12\n>\xb0\x12\n>\xb0\x1a\n\xf8\x01\xa1`\xbc\x87\xed\xe5Z\xa9\\\xa7\x84\x82\xfe\xc2\xb5/\x14\x1e7\x15\xfc\xee\xd5?\xa37?=\xff\xe1\xd5?\x86\xbf\x02\xb3@~\x84\x8d%\x82\xaed\x07Ju\x8cD\xc72\xd9\xe3g\x04\x89\x81x\x99\xc42\xe3\xf9A\x9aA\xf0\xe3\x80\x0ed\xa2 S\x072U\x903\x07r\xa6 3\x07\x92'0aC=\xaf\x1c\x1f3\\u\x1f\xe1\x89\x1b\x9eh\xf0\xd4\x0dO5\xf8\xcc\x0d\x9fi\xf0\xcc\x0d\xa7\xf6\x08\x1d\xe4\x84=\xaa\x93\xcc\xe1B\x9b\xd6p\xa1Mc\xb8\xd0\xa6-\\h\x9f)\x94>^X\x02\x9fd \x17\xda\xb4\x84\x0bmZ\xc2\x856-\xe1B\x0bK\xd2\xdb\xe2\x11b7\x9bLh\xda0\x1d(\xe4\xd7\xa5\xa0\xb0\xd4\x80N\x11{v{<\xa1\x90\xd1\x7fJ\xa4ar\x87<\x12W:\x91\x92b\xb5\xa4\xb8-*\xb9\xb0X.l$\xb2\xf2b\xa9\xbc\x91H\x8a\x8c\x95\"\x05\x91\x95\x9a\xa8\xa5&Z\xa9\x89\\j\xa2\x97\x9aH\xa5&j\xa9\x89Rj\xa2\x95\xaaW6\xd2k\xabV72\xea\xabT8\xd2j\xacU9\xd2\xeb\xacW:\xd2k\xadV;2\xea\xadT<\xd2j\xaeU=\x92\xea~]O\xf8\x97\x08\xa2hKN\xdf\x0c\x01(}\x8a\x80\x95I\xff\x18\x03h\xf8\x0b\x8b\x0f\x0f\x9c\x90j\x90\x10\x1e\x9a\x81R\xe3)\xef\xb7iL2\xba\xd0Y\x90Y\x98S\xfa\xc7Q9F\xe6\xb1N\xe8z\xbc\xb3\xc2c\xa3p\xe1\x0d^~\xac\x97/#X\xf0k*\xc8\x08\xde\x024-d\x08 tC\x91DW$\xd1\x15I\x0cE\x12M\x91\xc4T$\xd1\x14I4E\xa4\xfa\x9a\xe1/\n\x12\xf51\xdb\xc0X\xd4\x98B\xea\x0d\x81Wi\xb4\x9c\xd9\x1a\xb8>\x89\xa9\x8fYqQ-\xb3UH\xfa$\x9a>\x86\x89G\x03\x9a\xed\x03!\xaduD\xe3\xc1\x91\x87~S\xee\x84,\x946\x95\xca\xddR*wC\xa9\xdc\xed\xa4r4\x93\xca\xdbJ*o#\xa9\xbcm\xa4r7\x91\xca\xdbB*o\x03\xa9\xbc\xed\xa3\xf24\x8f*\xa4uT\x01\x8d\xa3\xf2\xb5\x8d\xca\xdb4t]\xc0\x96Q\x054\x8c\xca\xd7.\xaa\xe0fQ}\xd6V\xa1LHh\xa3\xc0\xeeF\x81\xdd\x8d\x02\xbb\x1b\x05v4\n\xecm\x14\xd8\xdb(\xb0\xb7Q`w\xa3\xc0\xdeF\x81\xbd\x8d\x02{\x1b\x05\xf64\n\x1c\xd2(p@\xa3\xc0\xbeF\x81\xbd\x8dB\xd7\x05l\x148\xa0Q`_\xa3\xc0\xc1\x8d\x02?N\xa3x\xec \xdf\xcf/\x9e\xbf\xfe\xf1\xe5?\xc9\x1f\x9ey\xde\x1a\x17y\xbb-\xef\xd4O0\xfdZ\xae\x1b\x9cw\xe8\xaf9\xc6\xf9n_\xb4\x1d\xfa\x9e\x01\x111@\xd9\xd0\xa2^\x17[1\x95\xac)\xd3\x8e\xf3\x90O\x1bW\xe5\xbam\"^J\xb4\xcf\xd7\xef\xcf\xf9Z\xdcz\xbb\\\x15\xdb\x86|\xaf{\xf8#\xdf\xd2\xaf\x98\xac\x9b\xba'/X^\x7f\x81\xae\xbf\xf8\x06m\xca\xee\x80\xf3\xfb%\"\x1f\xe2&\xaeP\xe0\x83prc\xfa\x9e\xd3\xc4\x89\xf6\x0f\x0di^\xe4\xf9@\xc1#\x1e\x93+\xcf ^\x92B|\xc7\x1e\xaf@\xe1\xf5\xf8\xf4\xe4\xe3\x1akv\xdaWWa \xb5\ni\xd4c\xa0\xad\x14\x9aPf \xd5\n)\xe0\xa0\x82\x9a\x80\xac\xe9aKX\xa1\xca\xaeOeU\xa7:I\x1b\xf5\xbbE\xf4\xb0\x1b\xac\x0c\xb6+\x83\xad\xca`X\x99\xc7mp?\xfe\xfc\xe2\x9f\xdf\xbd\xfa\xe7\xf5gY\xb8fme\x8b\x8b;\xf4ql\n\xc3\xdf4 \xe9\xe7\xbb\"\x1d =f!z\xfe5\x8a'\xe8\xc7\xf2\x8e\xdc\xbb\xf9\xfd\xbem\xaa\x02\xcdfhu\xdc\xd1\xef\x94\xf3/\x93\xaf\x9bM1\xd95\xcd\x0e\x17\xa4\x0d\x1f\xce\xd7\x03\xb8\x8f\xe5\xe7\xc9\xf8<\x91\x9f\xa7\xe3\xf3T~>\x1b\x9f\xcf\xe4\xe7\xd9\xf8<\x93\x9f\xcf\xc7\xe7s\xf9\xf9b|\xbe\x90\x9f_\x8c\xcf/\xe4\xe78\xef\xfa\x91t9\xfc\xf0\x8a\x13W\xee\x86^n\xca{\xbf\x1d\xb9\x95\x8b\x19`\xa4\xc7*=V$t\xfb\xb6\xac\xdf\x8f2\xe8\xdf\xaa\x14\x86\x89u\x0c\x97\x14\x96\x1a\xd2\xe1\xa4\x03\xc7x\x84\xe4Q^C\xe9\x03=\x975\x0c\xba\xd2b\xd6\xd6\x1c\x8d\x1d\xe3\xb1}DFr\x19\xe3\xd9\xdf\xad:,s\x00\x1b\xa1\x04\xc420s\xf8\xe0\x0f\x10\xcbGf\x0e$C\xe6\x88\xd4\xc6\xe6Q=\x10'\x8d\xce\x8a<6\x1e\x82r\x95\xc1R\xab\x9d\xc9\xe7\x1e\xa3\xe5\xda:y\xf5Az\x88\x83q\x90\xa6<\xaeAZ\xe0\x8bzcC\xf3\xeeN`\xe5O\n\xda\xc6i\x01\xe6\x83\x17\x00W\xc65Is\xd2?\x01x\xb5\xe7BH\x1a\xb2e48ds\xb4VO`\xc8\xe6H\xb3\x96\xc6\xa8\xcd\xa1P\x1d\x81\xa1{\xd4\xd8\xa8!4|#\xa4\x0e\xe0\x14\xef\x1b\xc1%.QW\xf7\x10.q\xc8uv\x0d\xe3\x12\x0b\x1b\xaf,<\xe6\x98&\xb1\xd2a\xcb\xc9\xa9\x8c\xe7\xec+\xb4bD\x97\x0d\xe80\x874\xa8\xdb9$c\xa8\xa3:\xc8\xa2\x9aB\x1b\xd9A\x0e\xd0\x10\xea\xf0\xee\xe0\x93\xcc\xa0\x18\xc1\x88#\xcb(\x8f\x10\x1f\xe7)X\x19\xea\x051V\x88\xb1JL\x14b\xa2\x12S\x85\x98\xaa\xc4\x99B\x9c\xa9\xc4L!f*q\xae\x10\xe7*q\xa1\x10\x17*\xf1B!^\xa8\xc4!)P\xe8r^\xc0\xbb^\x9a\x19H\xbd\xae\x9c\x1c(\xa0\xd8\x00\xc5\x9a,\x9e#H@5M\xd0\x801\x00\xa42\x7f\x0fZ\xb2!\x8cUH\xa2P\x05\xe7 \xd5\xe7O\x13*o\x96P\x85' \x95g\x06\xaf\x8c\xebUX\x9aP\x9d\x96%\x00RC\x92\x04{%\xbd9\x02\xc4\xeaI\x11\xaaS2\x04\x18lK\x10\x0c\xb43?0\xd0\xee\xf4\xc0\x80\xbb\xb2\x83*<9\x00\xa1\x96\xdc@\xc7\xbaR\x03\x1d\xeb\xcc\x0ct\xb0'1\xa8N\xcf\x0b\xec,\xf6\xb4\x00\xe4qg\x05 KHR\xe0`t\xe7\x04\xd5\xa9)\x81\x8d\xc1\x9e\x11\x00\x1c\xee\x84\x00`\x08\xc9\x07\xacl\xeet\x00b\xb3e\x03\x95#\x19\xa8\x1c\xb9@\xe5H\x05*G&P9\x12\x81\xca\x91\x07T\x8e4\xa0rd\x01\x95; \xa8\x82r\x80* \x05\xa8\x023\x80*0\x010pb\xfc\x0f\xd9&!\x9c8$\x01\xc0\xc1 \x00\xfe\xfc \x00\xf6&\x008<\x01\x80\xa0\xe0\xe0\x8f\xc3\x06\x7f|\xda\xe0\x0fH\x0d\x19\xfc\xed\x15\xf4\x0e\xfe\x96\nk\x8b\xf8\xda\xf0\x8fO\x19\xfea\xb0m\xf87\xd0\xce\xe1\xdf@\xbb\x87\x7f\x03\xee\x1a\xfeq\xf8\xf0\x0fB-\xc3\xbf\x8eu\x0d\xff:\xd69\xfc\xeb`\xcf\xf0\x8fO\x1f\xfe\xed,\xf6\xe1\x1f\xe4q\x0f\xff K\xc8\xf0\xef`t\x0f\xff\xf8\xd4\xe1\xdf\xc6`\x1f\xfe\x01\x0e\xf7\xf0\x0f0\x84\x0c\xffV6\xf7\xf0\x0f\xb1\xd9\x86\x7f\xec\x18\xfe\xb1c\xf8\xc7\x8e\xe1\x1f;\x86\x7f\xec\x18\xfe\xb1c\xf8\xc7\x8e\xe1\x1f;\x86\x7f\xec\x1e\xfeq\xd0\xf0\x8f\x03\x86\x7f\x1c8\xfc\xe3\xc0\xe1\xdf\xc0\x89\xe1\xffq\x0f&\xa0\x1f^\xbe\xf9\xed\xe7\xe7\xff\xa2\xbf\x87\xbc\xf6\xc1\x92\x85k\xe3\x0d\x0erU\x8bB\xd4_\xd2 \xffR\xae\x7fY\xb1'+\xdc\xac\xdf\xd3G\xe5\x8a>b\xb9\x88L\xe9\x15\n9\xeaC)=\x13#?ZK\x8f\xa2u\xc1_\xb3\xe8[\xf9y\xdb\xdcrx\x83%8\x19pG\xcaN\xa3\x0c^>\x1e\xae\xff\x80w=6\xf5x\xf5&\xfd\x11\xc9\x9aH\x91&\x9b\xd2\n\xa2\xb6b\xb0\x95\x15F\xac\xcc\x85\xe90==T\xc0\xbd\x07,\x1d\xc8\xda\xe8X\xf0\xd8\xd6\xa6_\xdbD\x8e\xbe\xe4PrR\xe3\xa3\x15*NkP$u\x1b\xc5\x9bHJ\x15xv\\\xe4\xa3E \xe9\xc8\x88\x00\x0b\xf9 X\x92O\xdb\x1fBo\xf7e'}_w\x00\xa3\xbeA\xdb#\xc6\xec\xae\x92\x9c~\xf2\x97DZ\x8e1\x1a*\xcfXV\x05*\xfe\xf3\x983$\x8d\x98A\x97h[\xde\x15\x1b\xf6\n\x07)\x9f\xb6\xdc%\"\x04\x92\xaf\xb3L=\x9eN\xff|\xda\x8b\x1b\x1b\xb6\xba\x0d;H\xce\xda7\xa5\x0b)\xc5\xe5\x80]\xb9\xb0c\xbc\x11\xb1\x00\xd6\x1e\xa1\x84\xa3\xf7s\x8c\x018p\x00\x0cP\xac\x12\xe8\xda!\\\x0bX*Z\xec`\xda\xf0\xd2$E\x8e[\xc1\xe4\x0c]\xca$o\xaa\xc2:)s&-\x82)\x9f?\x88)'\x8d7\xc2\xc3zLK\xd0\xe9aw\xd2k\x10\x1b\xba\x8a\x02\xdbY\x8b;;\xd0\x08;;\xd4\x88:\x1d\xea\x0d:\x1f\x83\x1esv]\x8c\x90\xb3\x8a\xb6F\\\xf5\x80\x80\xabN\x8d\xb7\xeaa\xe1V\x9d\x1em\xd5#\x07\x9b\xb2z\xb2\xa1);la-\xd6\xec@#\xd6\xecP#\xd6t\xa87\xd6|\x0cz\xac\xd9u1b\xcd*\xda\x1ak\xf8\x01\xb1\x86O\x8d5\xfc\xb0X\xc3\xa7\xc7\x1a~x\xac=r\xb2\xfe\xe3\xcf\xaf\x9e\xbf\xa5\xafh{\xb2\xf4-n\xf2^\\\x99\x16O\xd0\x8f\xc3\x83b\x83\n\\TE\xdd\xd3\x0f\xf0\xe7\xc7\xbe\xa9\xf2\xbe\\\xe7\x18\xdf\xa3\xb6\xa87E[lP\xde\xd1\x88D\xb8\xb8)\xb0`\x99\xd0\xba\"\xf4\xa6\xe8\xfb\xb2\xde!Z\xc8\x90\xb10\x8b\xb2h\xa3\xf9\xc9\xb6\xbc#\xef~o\x9a\xe3\x90\xd7Ty\xbb+k\xb4:\xeePYsIe1\x9f\xa0\x7f5G\xf4\xbenn'\x93 \x99\xf3\x93\xb7\xc8\xf3N\xbc%\x9eL\xd0\x0fM\xfd\xa4G\xdb\xa6\xdd\x0dyR\x83\xf8\xdb\x02\xe8\xbe9\xb6\\\x0f\xf2\xb6\xf9d\xbd5\xa7&h\x8b\xae(\xca23Ax\xc8\xbd\xc9\xeb\xe5\xe4\xcf\x16])o\x9e\xd7b\xd6r\xfd\xb9S\xfekz\xb2\x8c\xcc\xff\x9a\xbc\xe7\x87\xdc\xd1;\xa8c\x99l\xdb\x11\xc8\xce\xbc[\x80\xf5\x08<\xf9\xa5\x84-\xe6\x1b\xd2\x92F`9\x03\xb8U\xc0.\xad\x06t\xad\xa0\x03\xde\x07\xd0\xb7\xba\xd9Ry\x98f\xd5)\x8aU'\xe9\xa5-\xc0G\x86\x0b\x1dj\xe1S\xd4\xc2\xb0Z\x8f\xdd\xd7\xbc\xfa\xf5-\xfa\xf1\xf9//\x7f\xfe\x17\xfa\xeb\xebW\x7f\xfb-\xe4j\x88\xfe\xfe\xd0\xec\xda\xfc\xb0\xbf?'\x1f\x7f\xdd\xe6U\x89\xef\xcf\xe5\xe8\x9eH\x1f\xe2\xa5/\x01\x8c\xc0%\x92>\x19\xcc'&\x13;V\x85\x91/ GN\xf1\x90t\xc6f\xe3\x90\xc1\xe4\x0d\x89_\xf8w\x7f7\xe8\xed\xfd\xa1\xd8\xe6\xeb\xa2CO\xb7M\x8b\xd6\xcd\xa6x\x86\xc4+R?\xb6M\xc5-\xb5\xee\xbaAl\xd7\xe7\xeb\xf7\x93uS\x11\xd4\x80?C\x93\xe1?@\xc9\xdf\xf3/\x0e\xf3\xceR\xfc\xb0/\x10C\xcf\xa9f\xa2r\xeb\xe6\xd8\x96E\x0bH\x7f\xf2=#\xfdJ>\xb6l\xc8b\x9c\x01\x85\x90\xba\xbe\x19\x0c\xfb\x86\xd8p4\n[\xc3\x18\xbf\xd9\x0c\xa8a|\xd0y\xfc\xda\xb3Q4\xe0=\xf6\xc5h@0\xf8-\xe9\x00\x91\xb4:pM\xf2~_\xe0\xbc\x03\x8ac\x14\xb3\x00\xfeai\xb3d\xa5\x1e\x0c\x06H\x0e\x14\xd0\x97U\x01)F\x9e\xfb\x98W\xcd\xa6\xa9K\x80\xfb\xfa\x8b\xef(\xe9\x97\xb7\xd7_\x98R41\xeb\x1c\x97\x9dx\xb7G\x95\xf3=\xa3\x05 \xda\xe5m^5\xf5\x062\x07#y\xab\x94w\xef\x8b\xf6\xa6\xc4\x18j[\x12\xd5#\xe8s\xf4\xaa\xe4\xc2\xee\x07\xf4\xa6\xe4\x86^\x9e\xd3}\xce\x1cdR\nc|Dc\xd1KT\xf69.\xd7,\xa3\xe8\xa2\xbai\xab\x1ck\x18\xfa\xf0\xa4\xfc\x82,\x15y\xca\x1b\xc6>^b$\xee\xcc\xb0\x14\x1c\x9a=\x94\xec\x98Xh\xb9\xd5C\x8bU\x92\x83\x92\xbd\xbb\x1dZ*\xf6\x96\xfa9\xa2\xf4\x1f/^\xfe\xf5\xa7\xb7\x0f\x08\xd3[\xb2\xd7/_\xd7\xccbm{;\xa4\xe1#\xe4\xda\x92\x8c\x9b\xb7.\xc5S~\x97\x93y\xe9R\"h\xa9AK\x05mf\xd0f\x82\x96\x19\xb4L\xd0\xe6\x06m.h\x0b\x83\xb6\x10\xb4\x0b\x83v!h\x97\x06\xedr\xa0}\xfef\xad\xb6\xd7[v&C\n\xa5\xc9J\x89K\x8eX5\x98\xbd]\xb4\xbd\x8d\x01z<\xe5o\xbb\xdc&\x009\x19\xc9)@NG\xf2\x0c \xcfFr\x06\x90\xb3\x91<\x07\xc8\xf3\x91\xbc\x00\xc8\x8b\x91|\x01\x90/F\xf2%@\xbed\xe4\xf0\x9en\xec\xbf\xecN@h\xb2\x12\x1d\xa2\xcd\x13C\x07q;^\xd9\x03\xba\x83`\x12\x18\x93\xc8\x98\x14\xc6\xa42f\x06cf2&\x831\x99\x8c\x99\xc3\x98\xb9\x8cY\xc0\x98\x85\x8c\xb9\x801\x172\xe6\x12\xc6p\xb7\x85\x8e\x12\xa2\xf3\xf7\xf8\xac\nrY\xe5\xf7\x18\x04\xd1\x1c\x06A4\x7fA\x10\xcd]\x10D\xf3\x16\x04\xd1\x9c\x05A4_A\x10\xcdU\x10\xc4\xef)e`\x15\xe3\xa5\xc7Q8\xc8Q\xd8\xef(\x08\xa29\n\x82h\x8e\x82 \x9a\xa3 \x88\xe6(\x08\xa29\n\x82h\x8e\x82 \x9a\xa3 \x88\xe4\xa8G\xcfE^\xffB\x97\x1e\xc6\xec\xb4>\x1c\xfb\xa8-\xba\x82}\xda0\xba-V\xef\xcb>\xca\x0f\x87\"o\xf3z\xcd\xbfcA\x88U\xf3\x01\xa2\xb0y\xc2\xb1\xef\x9b\x9a\n[. v\xdb\xac\x8f]T\xd65\x99\xfe\xca\xa5\x99\x00Z\xfeJ\x9c\xa1\x19\xfe:\xe4\x9bMY\xef\x96\xfcR\xbcG6\xc8O$/\x0bY\x8dak\xc1\xf4\xec%\xf8\xfd\x8c=\xbaB\x94\xcc\x1e\x90\xb3\x9aC2!\xcelJ\x84\x1b\x95\x82\x86\xda\x94\xeb\x1c#\xf6\xe1\\\x85\x81\x80m\x88k%\xef\xbb\x1e\xd3>\xf9S\x1c\xac\x14\xd7G8\x00\x88\xfe\xf9\x0d\x00\xa2\x7fx\x03\x80\xe8\x9f\xdcP!\x0c\x14%\x19\x02n\x0f\xcd\xc4\xe7g\xb3)@\xcf\xc6\xcf\xd3. \xfe\xc5\xc8\x1fO\x81[M\xe9\xf7m9\x84\\\xa6q\x85\xba\xbe-\xeb\x1dC4[\xb2\xb2\xcf!e\xbd/\xda\xb2\x07P\x8c\xf2\x07\xa4\x9e\xe7_\xa3\x9f\xa8 \xdf\x0c&\x14KC1\xfa\x88\xf8\xd9\xe0/\xe9/\xfcv\xed}\x02\xd0\xd8\xcb\xe6\xfb\x14\xa0\xb1\x17\xce\xf73\x80\xc6^:\xdfg\x00M\xfa\xcc\x07\xd3\xf1\xb7\xa2]\x17u\x9f\xef\x8a\x0eE\xa4\xc1lP\xb3\xdd\x0e&c\x81\xd0l\xd1!o\x8b\xba\x175\x19\x82\xe1#\x12\xc2\x870`e\x0ea S\xb2\xa9\xa0,T\x9e\xc5\xc8C\xbf\x9e\xcb)dc\x89j9!\x0d\x90\xd1\xe5\xa3\xd5\x12\xe6\xfck\xf4\x8668\xa3B\\\xdf\x1b@\xe1\x1bv\x81\xd1\x0d\xa0\xb2D3\x94\x96h\x86\xda7{Y\xef\x1b\x8b\xe2\x02Eu\xa7a\xfa[\xdb\x1c\x86\xfeCZIdw\xc7\x908\xe3\xec\xe4\x10:\xb3\x1a\x0fuI?\xf6\x88\xc9\x0f\xcb\xd2\xf7\xfc\xfb\xb3ph\x0e\x88\xc4\x82\x10\xc7!\xf7\xa9\x05!\x0eE\xeeg\x16\x848\x1a\xb9\xcf,\x08q@r\xf0\"\xc5p\x08\x8f;B\xcc\xa6*\x91\x87\x1e!.4\xce\x85\xcc)>Xk\x84\x17Bc\x08R\x08\x18\x85\x08\xd1\x18\xd3j0\x86\x19\x05p\x0d\x81X\xa3\x80\x85!a\xa1J\x804\x1d\x01c\xd4\x81\xba\x8e\xc0\xfdx\x1d\x82\x19Z\x84\xce\"I\x85\xc8\xe1\x15:\x9f\xd8\xd3\xd7;\\\xc1\x05\xd1\xe5\xd0\x82\xe8r`At9\xac \xba\x1aT\x95#\xa6*GHU\xae\x88\xaa\xbc\x01Uy\xe3\xa9\xf2\x84S\xe5\x89\xa6\xca\x17LU@,\x01j\x1a\xa1Ty#\xa9:9\x90\x94\xe9\xce\x9e\x9e\x13v\xc5\x11D\x97\xe3\x08\xa2\xcbq\x04\xd1\xe58\x82\xe8j\x1caG\x1caG\x1caW\x1cao\x1cao\x1caO\x1caO\x1ca_\x1c\xe1\x808\x02\xd44\xe2\x08{\xe3\x08\xdb\xe3\xe8\x91'\x1f?\xbfx\xfb\xf6\xc5k\xf4\xe6\xb7\xe7\xdf\xbf\xfc\xf5\xaf\xd7\xfe9\x88\xb48\xdc\xb7\xf9\xfa}Y\xef\xfe\x90\x1d\x0cRX\xc1.\xe8\"wu\xf6}\xd1F\xdd!_\x93\xb9\x19\xfaR}\xc2\xb3N\xc6\x17\xf5%\xf9&\xbf\xc1\xa7\xb3\x11\x9c\xcaZ\x15\xbb<\xa8H\xda\x10C\x93\x12.^\xda*\xf1\x96 \xba\x02\xa5Zt\x04\x0b\xaf\x99\xc4?\xd4-\xa27n{\x0bO<}\x99:(\x8a\x12>\xb9v\xd5'U\xae\n*\xdaW7\xf5\xb6b&\x1f\x7fr\xd5\xf0'U\x0d\x07\x15\x9d|\xae\xae\xe3\xe5\xaf/\xd8\xe2\x05:G?\xbfx\xfe\xc3\xc9=\x089\xcaH;\xba?\xa0\x0fAh\x82\xf7\xe2c\xbdR\xd9\x83\xcd\xc7\xbf\"\xe5\xd3\xaax\x1f\xf5e\x8f\x0b'\x07AH\x1c\xeb\xe6p\x8f\x9c\x1c\x03\xe2\xa4\xde\x82k\xce\xda\xfai\xca\xfb\x98 \xfdy\xaf\xe0\xafBh\x8f \xaaP=\xa0\x06n\x1e\xb0\x02\xd5'\xeb\xaf\xb4z\xa1>~\x80\xfan\x1eP}|\x8a\xfa\x8f\xdf\xb6\xffW\xc8\x8a$?J:\xb4\xe4\xf7\x9dt.l2<\xa0\x86\xeb\x8b\xbb>\xda\x14\xeb\xa6\xcd\xe9;\xccb%\xb7o\xf3\x9a~G\x88\xbc\x13\xdd\xb4h\x12g\x1d*\xf2\xae\x88\xcaZ,\xe9\x0e\xa2\x96\xc3\xbf\xce\xf8\x1f7eW\xf6\xe2\x9d\x98\x00)\x94m\xdf\xdc\xd0[;Oc\xcb\xd7}yS\x9c\xccFV\x95\x83KC\xa89\xf6\x83\x7f\x97(>\xdc\xb1OF\xa3\xf5\xb1m\x8b\xba\xff~\xe0\xf8L'X~~\xf9\xc6s\x04Yrr\xd7kN\xee\xe4w\xc0\x86?\xe9y\x86\xa8\xbf?\xc8\xdf\x9e~d\x9d\x7fy\xfe\xcf\xf0\xafN\xb3U\xf3*\xbf\xa3\x17\x1a\x80\x0b\xe7\xd5\xed0\x84p\xc8u\xd8\x826}\xa5\xcb\xb5\x9em\"\xf4\xe5l\x13\xa1\xaff\x9b\x08}1\xdbD\xcc\xd1\x15\x9a;5]\xa0+\xb4pjz\x81\xae\xd0\x85S\xd3Kt\x85.mz0\x0cY\x1ft/y\x93k\x9e\xf5\xd5l~:\xfb\xfasg\x05\xe7_\xa3_\xf2;\xf4\x0f\xa2\xbb\xbcP\xccb\xbc\xba\xa5\xcb\xf6\x1f\xc7\xf0\xd0\xd7fG~e1\xbc\xba%_\x97\x92\xf9\xbe\x14\xbf\xf3\xf9Iu\x9b8@ \x07\xa5\x0eP\xcaA3\x07h\xc6A\x99\x03\x94q\xd0\xdc\x01\x9as\xd0\xc2\x01Zp\xd0\x85\x03t\xc1A\x97\x0e\xd0%hg\xdb\x8aru\xcbo\x0d\x97\xa4\x9d|>\x9e\xfa\x9ce@\xb0\xdb \x8a\x7f<\xc9\xe9b\x82L\xdc\xc8dD\xa6nd:\"gn\xe4lDfnd6\"\xe7n\xe4|D.\xdc\xc8\xc5\x88\xbcp#/F\xe4\xa5\x1by)\xdb^\xba\x89\x16ruhR\xca\\]y=]\x85:\xda\x05T\xfc\xec\x02*nv\x01\x15/\xbb\x80\x8a\x93]@\xc5\xc7.\xa0\xe2b\x17P\xf1\xb0\x0b\x088\xb8:\xd9\xbfJ\xd2\xce\xdc\x8b\xbd\xee\xc5\xa1\xeeu\x01\x15\xf7\xba\x80\x8a{]@\xc5\xbd.\xa0\xe2^\x17Pq\xaf\x0b\xa8\xb8\xd7\x05T\xdc\xeb\x02\x02\xee\xc5v\xf7>r\xcexj\xbeH4\x02s\xc5!U$T\x91\xc2\xe8\x89bH\xaa\x18\x92,\x86\xa4\x8b! \xa3'e\x14\xa8(\x06\xcf'\xfcy\x04$\x00 Q\x00\x99\xeb\x04\x05BQ\nHHe i\n\x00R\x190\x03\x003 0\x03\x8a\x98\xc9Ed\x00 \x93\x01s\x000\x97\x01\x0b\x00\xb0P\x00\x80\x1d\x16\xb2\x1d.\x00 \x17\xb2\x84K\x00p)\x03\xbc\x995BQ\xbf/[\xb6h~E\x88\xe8\x1c\xa5\xe8\xe9\xafM\x8f\xba\xe3\xe1\xd0\x90vU\xd6h\xc8\xa3rT\x95u\x89\x9a\x16\xbd|q\xf1L\x92q\xdbP9\xdd(#\x9ed'J!;\xfd\\\x13%\xd5\xa7g[\xc6\xc6\xe4L\xf6m\xe9>\x98\xf0\x9b\xdf\x84\x1f\xdf\xe6\x02\x12\xf6\xdb\x18\x91\xc9,\xef\xb9\xe4\xde\x7fr\x9b@D\x96\xa0\xdf\xa6\x10\x91%\xe6\xb73\x88\xc8\x12\xf2\xdb\x0c\"\xf2#,\x93a\xf8\x1a\x00\x8c<4F\xc674E\x89\x90H\x84L!d\x82\x90*\x1c\xe9\xc8\x91\xa6\n!\x1d 3\x850\x13\x84\x99\"j6\x8a\xca\x14B6\x12\xe6\na>\x12\x16\na!\x11\x94z,\xc6z\\(\x1c\x17#\xc7\xa5B\xb8\x1c \xf4\x90\n#\xc8\x87onY\x0b\x11\xc4\xa7\xbc\x91<\xe3\xbcR\xf8\x1b\xa8x\x92 \x1c;\xca\xc2\x10bc/t\xceq\xcb\xcf\xa8@\xd17\xd0\x13\x90.R\x8e\xdb\x14\xa4\x8bL\xe3v\x06\xd2E\x82q\x9b\x81t\x91W\x0cF\xa4\x08=\x16 1\xd1\x88\x89B\xcc4b&\x11S\x8d3\x959\xd3T#\xa62q\xa6\x11g\x12q\xa6\x89\x9d\xc9b3\x8d\x98\xc9\xc4\xb9F\x9c\xcb\xc4\x85F\\(D\xad\x9e\x0b\xb9\x9e\x17\x1a\xe7\x85\xccy\xa9\x11/e\xa28\xec\xa2\x070\xa1\x92\xd8T\xe8Z\x0cS\x94\x88b\x10*\x02\x99\x80\xc7\x933z4\x87N\xabn\xe3\xf1\xf2\x10{@[ rL[ rX[ rd[ jpW\x8e\xd8\xae\x1c\xa1]9\"\xbbr\x04v\xe5\x88\xeb\xca\x11\xd6\x95#\xaa+GPW\x8e\x98\xae\x1c!]9\"\xbar\x04t\xe5\x8a\xe7\xca\x1d\xceUp4\x03H \x98+e\x94\x0d\x08ge\x16y\x1b\x8f\xd7\x93\xd8\xa3\xd9\x02\x91\xa3\xd9\x02\x91\xa3\xd9\x02\x91\xa3\xd9\x02Q\xa3\x19+56\x02Z#\xeb1\xad\x93\xb5\xb0\xd6\xc8zd\xebd-\xb8u\xb2\x16\xdf\x1aY\x0fq\x8d\xacG\xb9F\xd6\x03]#\xeb\xb1\xae\x93\xb5p\xd7\xc8z\xc4kd#\xe8)\xdd\x11\xf688\xec\x01$\x10\xf6\xd8\x1a\xf6\x8f<\xbbF\xaf\xfe\xfe\xe2\xf5\x8f?\xbf\xfa\x07\xff\xdb\x93\xc5[\x92x(\x87\xd7Sx\x96\xac77E\xbb\xc5\xcdmtSv\xe5\x8al\xd0\xf3GK\xc4\x9e\x91\xca\x8e\xc8}\xb9\xd9\x90\x0f\xb5\x8d@\xfaH\xc3u\xeb\xb6\xc1X\xc1\xd1G\x1a\x8ee|#JJ\xfaF\xd4\x1d\xa0atg\xd3\xf1\xce\xd4r\x00\x83z\xde\x99\x9a\x0eXP\xd7;]\xdb\x01 \xea{\x0f\xe9{o\xd3\xf7\x1e\xd0\xf7\xde\xa2\xef=\xa0\xef\xbdE\xdf{C\xdf\xfb\x07$\xd5z\x90\xd0\xa4\x06\x8e\x13\x19N\xd5\xd7\xd1R\xa5d0\xd5_\x07K\xb5\x92\xc1cj\x05\x84\x8d\x0c\xbc\x83u\xd6#Ge\x81\xf4\xd6\xc2Ge\x80t\xd7bHe0\xf5\xd7\x02I\x86\xdf[\xeapo\xaf\xc3=\\\x87{k\x1d\xee\xe1:\xdc[\xebp\x0f\xd5\xe1>()Ps\\#\xb8\xaaSb\xab:!\xb4\xaa\xe0\xc8\xaal\xfd\x11\x1cZ\xd5\xa9\x91\xa53\xf8\x02K\xc7\xbb\xe3JG{\xc3\xaa:5\xaat\x06_P\xe9xwL\xe9\xe8\x80\x90R\xf2L#\xa2\xf0)\x11\x85O\x88(\xeb\xe8fD\x14>-\xa2\xf4\xc1\xc8\x1bQ:\x83/\xa2\x1c\xa3\x1d\x10Q:\xda\x1bQ\xfa\xe0\xe4\x8d(\x9d\xc1\x17Q\x8e\xd1\x0f\x88(\x1d\xfd\x19S\xb8\xdf^\xbdy\xf9\xf6\xe5\xab_\xc3Nq\xb2]\x92CCO5\xfd!g\xc0\xbb>\xef\xcb5\xfa\x88x\xa9KD\x1f\x11\x8bL\xda\x02\xe7\xec\xa4\x96\x84\xe0O)&_u\x0d>\xf6\x1a\x86?\xa5\x18z\xdf\xb2\x02\xa0wC\xa2\x132\x0f\xaa\x18\x1de@u\x11\x12\nGt\xd7\xdb\xa23BBk\x03\xa8(\x8e\xd0D\\\xddk\xd1>thc\xdaW!\xcaW\x81\xbaW!\xaaW\xa7k\xae\xf4\xa0Lq\x1c\xa28\x0eT\x1c\x87(\x8e\x1d\x8a?rCE\xaf~{\xfe\xfd\xcb\xb7\xf4\x8e\x7f\xdfa\xeb}Q\x15\xddys\xc8\xd7e/_\xdc7i\xd8\xa28#\x91/\x12 r\xd3\xe9\xa4!{O\x12ir\xf9\x8d ]h\xa4\x8b\x91\xb4\xd0H\x8b\x914\xd7H\xf3\x91\x94i\xa4l$\xcd4\xd2l$\xa5\x1a)\x1dI\x89FJFR\xac\x91\xe2\x914\xcdT\xd2t\xd0\x83\x91\xc8\x8e\x8aDJ\xf8\xb7\xad\xa3)R\xb8\xe8\xa5 \x8f\xec\xef\xd7\xaf\xde>\x1f:\xe67\x92\xf7\xda\xa6\xcf\xfb\"\x9a\x0d\x8a\x91\xb3\xa5\xdb\xa6\xad\x96\x88>~:\xcb6\xc5\x8emL0$\xd9\x1a1\x91\x97S\x03\x19\xa7\xb0\xd085\xa5\xc6\x17\xb0\xd8\xf8\xc2\x94\x9b$\xb0\xdc$1\xe5&\x0bXn\xb20\xe5\xa61,7\x8dG\xb9\xde^\x9b\xf6\x1e\xc2\xaa\xb4\xdfv\x1av\x84\xf3\xb5{\xa7uGx\x9cZ\xc5\xcb&\x96\x18.\xac\x05\xc8v\x1e\x19\x92\xc4Z\x82ll\x89aa-A\xb6\xf8\xc8\x90\xc6\xd6\x12d\xb3{\x87\x1b\xdd\xec\xd5IV\x87\xd1V\xa3\xc3p\xbb\xcd-x\xab\xc9a\xbc\xdd\xe2\x16\xbc\xd5\xe00>\xcc\xdet\x90\xd4\xcd\x8dO27\x8c\xb6\x9a\x1b\x86\xdb\xcdm\xc1[\xcd\x0d\xe3\xed\xe6\xb6\xe0\xad\xe6\x86\xf1\x9a\xb9\x1f\xb9\xab\x7f\xf3\xbf^\xfe\x1arF\x89\x0d\xeb\xdd\xfb\xb2\x16G\x94\xbe\xc7y\xd7\x15\x1d\xda6-\xea\xf8\x8d\xdeM[\xec\xc8\xd7\xa5\xc8\x97GV\xf9\xfa=\xfb\x93\xbc\x84\xd0\xa1\xa6\xd6\xae\x03\x7f\xb9E\xf7\xcd\x11\xed\xf3\x9b\xa2~\xd2\xa3M\xb1\xc69\xb9C\x9c]\x8aC\x19\xcf\xd0\xea\xd8\x93\x8f\x9c\xb0\xa7M\x8dr!\xea\x0c\x95=\xb93\x9cH\\\x15\xf4k(\x0d\xb9=\x9c\xbd\xd1@\xde\n\xa1\xb2&\xd7\xf2Y\xec\xb7\xe2\xb98\xd3\xbb\xc2\xf9\xfa=\xdb\xdbg?\x04\xb0D_r\x12\x1d\x10\xe8_\x17v\xe0\x85\x02\\\xd8\x81\x0b\x058\xb7\x03\xe7\n0\xb3\x033\x058\xb3\x03g\n0\xb5\x03S\x05\x98\xd8\x81\x89\x02\x8c\xed\xc0X\x01N3+p:\x9eO\xd9\x97<\xb9\xd0\xa1\x9cDe\xd2\xbf@\xdfp\x92\x0c\x04}\xc3I2\x10\xf4\x0d'\xc9@\xd07\x9c$\x03A\xdfp\x92\x0c\x04}\xc3I2\x10\xf4\x0d'\xc9@\xd07\x9c\xc4MN\\`s\x0d\x95V\x17y\x1bI8\x0e\x19\x9fS\xdc&o\xdfG\xbb6\xbfg\xe28N<\xa7\xb0\xaa\xdc\xc8(\x01\xe3\xcf)JF\xc8\xa8\x11\xd1\x95\x98\xbc\x80\xf5QC\xd0\xe7\x14\x83\xe9Kt\x14\xf9q\xc4\xc8\xcf\x99VMSC\xca\x8b\xe7\xb2\xc0\x11\xa7\n\x1cq\xc46\xc4\xd6\x80\xcd\xc8s\xc9S67q\x1f\x11\x03\x0e\xdd\xe6G\xd5\xa6-\x9b\x14NT\x9axL\x95R\x89\xe2\x19\x854m^\xef\n\x89N\x1f0\x1f4Xf\xdd\x89{>\xef\x0b\x8c\xc9\xa7\xb58\x89>\x90K5 \xf2c\n<\x1c\xdb\x03\x96\xcb\xa6\x0fd)\x06D~,E\xdd\x81\xbc\x1f\xa8ZgxF!\xfb\xa6\xd7\x11\xfc\x11\xd3D%\x8e\x04V\x9cJ\x1e\x1f*q_\x90m+-\xe8\xf9\xf7\x1b':]\"\xf1\xd8Q\x01\xd2S\x16R\xf9\xcd\xbdD\x1f\xfe\x94\xca_\xe1c\xa1\x17?<\xa3\x10\x8d:\x12h)\x1ay|(\x81\x8a\x0e\xc6\xf1\xe7,\x9e\xf3n_lt\xa0\xf4T\x81\xe9u\x96\x1f+@#\x9a\x94\xe7\nT\x0d\xf7\xf1!\x05\x91\xe7\xd2EP\x0c\xa7^\x035Y\xed\" M\x18\xf3\x9dh4\xa4\x921p\xb6\x8b \xb6\x0b\x9dm\x11\xc4\xb6\xd0\xd9\xe6Als\x9d-\x0bb\xcbt\xb6Y\x10\xdbLgK\x83\xd8R\x9d- bKt\xb68\x88-\xd6\xd9\x94$\xc5\xca\xc6\xf2\x95\x81\xcdLX\x00.5u\x11\\\x17!\\\x17:\xd7\"\x84k\xa1s\xcdC\xb8\xe6:W\x16\xc2\x95\xe9\\\xb3\x10\xae\x99\xce\x95\x86p\xa5:W\x12\xc2\x95\xe8\\q\x08\x97H\x91\xd8T\xe2;c\xb6\xc3'\x14\xbbHO\xa2l\xa1#\xf4\xd0S*\x80A\xcf\xaeV\xbbHO\xb0\x00.-\xd7Z\xed\"=\xdd\x02\x98\xd4\xcck\xb5\x8b\xf4\xe4\x0b\xe0Q\xf0z*\x06\xe0\xe5\\k\xb5\x8b\xf4\xc4\x0c\xe00s\xb4\xa16Z\x9a\x06\xd5F\xcd\xd8Da#\x97\xb50\x85KO\xe1l>\x92\xb29\x1ea\xeePP\x19\xc8\xa2\x00\xbb-\xf2#\xcc A\xa4\x11J\xca\nm\x81 \x86\xbd\xd5\xce\x8e\x94Ar\xc6h\xb5\x92\xcc \xf2G\x00-\xa7\x92CP\xd1l\x12\x8a%\x91X\xaev\xe3P\x0f\x00\xe5\xe1^h\xebb0\x93\xce\xd5nL*\x01\x069\xb3\x14%\xb8\x18\xcc\x84\x94\xbb\x86e\x8d6\xdf\x8c\xf9\xe3j\x17I\x19*\x80W\x93\xd5\xa1\x06V\xa8\x02S\xb2W\xbb\xee2\x8b\x92\xcb\xda\xfb\x17\x91\x9f\x91\xce\xc2\x8aV\x81j\x9e\xebh\x842\x13\xcbz\xa1\xc6'\x12`\xae7\xcb:mjK\xe9\xf0\xce\x81U`J~lU\xd9d\x91\xb2e\x1b\x97\x9a8\x0f]\x87\x92;C\x1d\x87\x9eF\x8fL\x0e\xab\x9aI\xf5\xc8\xe6j;@\x8a=2Z\xbb\x08=\xe1^\xed\xa4l\xdb\xc4\xcb\x89\xf7\xe7X\xfd\\\xfe\xf6\xe6\xc5\xdf~x\xc5\x175 w\xf9\xa1\xa0\x8b\x87\x83\n\xe4:d\xb1\xd6\x88n\xd9\xd7\x94Q\xd9\xa3\xb2C\xe4\xd6\x95b\x83\x9a\x16\x91\xeb^\x86_o\n\xba\xc8(\xae\x9d\x1d\x9e\xd0\x91\x9a\xde s\xa6=\xa4W\xb7\xc8\xb3/1\xa8S\xd88\xd4\xeb\x02$\x8a.E\xcf\x0f(\x83\x18\xffuI#A\x17\xa4\xa5\x0c\x14\xceS\x02]\x8cx\xaeKQs\x08\n\x86\x04\x80\xcc:#\x1d\xf4uV\xf6Tg\x963\x04\n\x943\x07]\x88B\xd3E\x99)\x07\xab5O)\x0cs\x08\x82a\x0f5\x0b\x91\x0b\x87\x04I\x14X)]\xd4\x98z\x801C)`\xccH\xe9\x07e\x00\xa5\xc0\x02\x94e))\xc6\xa3\xcb)\x18\xfb\xc3s0\xfc\xc5tH\x06_X\x84\\\xd8\x84\\\x00B\x16\x16!\x0b\x9b\x90\x05 dn\x112\xb7 \x99\x03B2\x8b\x90\xcc&$\x03\x84\xcc,Bf6!3@Hj\x11\x92\xda\x84\xa4\x80\x90\xc4\"$\xb1 I\x00!\xb1EHl\x13\x12O\x8dP\x05\x82M<\x07\x03V\x0b6>\xb3\x86\x85\x00\xc1\xa6N\xc5e\xb0\x19l\xe29,d\x01\x081\x83M<\x87\x85\xcc\x01!f\xb0\x89\xe7\xb0\x90\x0c\x10b\x06\x9bx\x0e\x0b\x99\x01B\xcc`\x13\xcfa!) \xc4\x0c6\xf1\x1c\x16\x92\x00B\xcc`\x13\xcfa!j\xb0\xb1\xdcD\x97\xc1\x1fk\"\xb4%D\x16\xdc;Kb\xb0\xd3Fu0\x0f\xd5\xc6ve\xdd\x00\x90\x08$\x0b\xb69+$\xdb\x9a:(4\x87d0\x91\x90V \x00\xb9F:\x01\x88\x852\x0b\xb6F\x01H\xf4I\x03$\xc1\x89\xc2HpH3S\x05mm\x03\x90\nf \xd6\xa9\x05X\x825\x1fQh.\x9bB\xd9\x89\xb2RbU\xdc'\x1aNW\x94\xf5\x14[\xec\xaa9\x87-v\xc7\x1cdd\xb7\x89\xf5J\x84\x84I\xcb-\x80H\x99\xea\x10\x0c\xac\xd9\x08\x11\"52\xa5\x0b\x92\xafc\xd0\x13\xa8\x9d=\x87\xda\x99i\x94U\xea\x05,\x15H\xaavf^e\x95\xba\x80\xa5\x02Y\xd6\xceL\xb4\xacR\xe7\xb0T \xed\xda\x99\x99\x97Uj\x06K\x05\xf2\xb0\x9d\x99\x8aY\xa5\xce`\xa9@b\xb63s3\xab\xd4\x14\x96\ndj;3Y\xb3JM`\xa9@\xea\xb63\xb37\xab\xd4X\x97*r6S\xaa \xf9Z\xae\xd9\nD\x12g\x93\xean\x05\x1c\x03J\x05[\x81 y\xa5\x1a\xad@\xa4y6\xa9\xeeV\xc01\xa0T\xb0\x15\x08\x92W\xaa\xd1\nD\"h\x93\xean\x05\x1c\x03J\x05[\x81 y\xa5\x1a\xad@\xa4\x8a6\xa9\xeeV\xc01\xa0T\xb0\x15\x08\x92W\xeax\xf0\x862\xf3ez]\xa8x\xae'\xaa\xea\xba>\x05\x03\xfc\x10\xab\xc6%\x16\xf3u\xde\x91\xa0K\xd0\xd6\xff)\x9c.\xf3\xebB\xd8S]\x82\xbc'@\x81\xbb\x06\x1b\x1a\x90g:\xeb\xb8K@AtaRgeOufy\x15S\xae%,D\xa1\xc1F0\x05\xd2=\x00]\x14{\xaa\x0b\x917\x0c\xe42a!\n\x0d\xd6\xc7\x14(v\x19\xc0\xd8:\x8c\x97Jk\xc1%\x9f\x9b\x19\xe0|\xf7A\x17#\x9e\xebR\xd4\xed\nf\x06@\x00\xc8\xac3\x8e{\x14\x16\xa3@B\xf4\x8d\x0d\xa9\xded\x19\x1c\xb4\x08\xa5\x80&\x91\xd6\xceY\x80BR`\x01\x06\xaf\xb4\xcb\x01W \x96cl\x8eP\x96:\xbf1ru\xf2L\xe7\x1f\xb7K\xa4:\xaf\xf0\xd1\x08\xb6\x91\x00\xdab\xdc}\xa0pH\x04\xc8\xad3\x8e['\xb0\x19@!\xfa~\x8b\xc4\xc0\xf7S@i\x82\x08\nT\xb7b(\x9b\xb4\xd9\xa2K\x94I\xbar\xabD\x9fY\x8d^\x94\x1f_\x80\xda\x97O\"$\xcc1\xb6kT\xaf\x19 \xf1\xd0`\xcf\x1f;\x04\xeaC\xbf|^\xc2fPep\xb3\xd9\xd3\xc8\x05v6\x99>q\x80${~\xa0\x12\xbd\x96\xb4\xc9\xb6%\x0c\x06\xddW\x02\x94>\xa8\xe79\x80\"\xa0$\x02\x9a6\xc2\xf9\x84v\xf2\xc3.\xdf\x1bm\xb6\x04C?$b/\xc2\xdf\xc3[3\x0e\xe5@\x89\xbd\x04\xcfH\xac\x9f9\x11\xec\x96\x1d\x1c\x89b\x97\xfa9N\xa6\x8cO\xc4\xcd\xc1\xf4\xa8J\xf0\x07\x13\xd9E\x19\xeckl\xfce\xbd\xe75\"\x9fq\xa2\x17r\x1f\x9a\xdb\xa2\xedP\xb3E\xfdmCo\xe5FCbA^\xe1k\x9b\nMQ\xdf\xa0x\xde\x16\xd5\xe4\xda\xbc\x90\xfc\x80\xae\xf8G\xea\xd9\x93\x8a|\xcd\xa6\xdd\x95\xe2\x0b*\xfc\x86r\xce\x93\xa3+4^\xc1A\xbe\x1b\xdf\xb4\xe5\x87\xa6\xees\xfe\xf0F\xfa\xe0;{\xd4\xa3+\xd47\x07\xf6W\x8b\xaeP[\x8e\x9f\x88_\xa1+\xb4j\xfa\xbe\xe1\xd7x`t\x85p\xb1\xe5\x1fwChJ\xae\xff\xa8\xf9\xbd\xe4\xfa-\xe9\xccH\xceO\xea@\x18\xfd\x96t\x08\xa3\xdf\x92\x0ea\xf4[\xd2!\x0c\xf9\xb4\x8e\x07C>\xaec\xc7P\x8f|\xc6\x9bR\xae\xeb\xc9!\x9f\xa2\x8f<*\x96\xe8K\xfe5@q\xc3\xfe\xe4\x90\xc7 \xa2\xb8\xeb\xdb\x9c\x16\xcb\x81 \x08T )\x08\xa1\xaar\xcc\x0c\xc4\x10\xdd9$s\xa8\xa4\x00\xe7\x0e \x00_x\xe1:\xd3\xc0\x86%\x1bFC \xc3\x86\xc4\xb1\x1dfZ\x13'v\xb4\x82K\xed8\xc5\xaexf\x07\xcaF\xc0\x99OM\x05=\xf7\xa1\x01\x9eE\x18\x0fd\xebV\xb65\xe9U`c\xb7\xb1\x03gZ\xbbM\x1cp\x05\x98:\x80\x8a\xbd\xdb\x99\x03)\x9b\xa3\xcd\xbc\xaa*\xf0\xb9\x17\x0e0-\x02\x99 \x9b\xafd\x9b\xd3\x9e\x1b6\xfa*v\x01M\xab\xaf\x12\x17^A\xa6.\xa4b\xf7\xd5\xcc\x05\x95\x8d\xb2\xca\xfc\xea*\xf8\xb9\x1f\x0fp-B\xb9 \xdb\xf7\xb2\xed\xfb\xe6\x00\x1b\xbe\x8f\xad(\xd3\xea}b\x05+\xb0\xd4\nS\xec\xdd\xcf\xac8\xd9\x0c}\xe6QQ\x01\xcf=`\x80e\x11\xc4\x02\xd9\xf8fJ\xaf\x85r\x98Y&\xc3-\x80~\xd2\xf1p\x13\xbbd\xc9\xcep\x8aT\x81Tr\xe2\x92\x1c S\x95\x96\xba\xa41\x07;\xc5 \x0c\x957s\xc9\xa3\xf6v\x8a\xe3\x10*-\xf3[1@\xa6\n\xa4\x92\xe7~\xc9'\xca7J!\xe5,B\xcbyPi`\x99{-\x8e\xa1TD\xa6\x83\xc3\xe7(-vJ\xb3\x85\xb2k\xac\x1de'N\xd9~\xa9\xba\xbc\xd4)\x0f\x08g\xcb\xd0=J\x9c9%\x9a\xee\x82G\xf8Q^\x16`M\xbfT\xd8\xef\xf3\x00\xd9\xa7\x95\x00\x97\xb3\x08.\xe7!\xa5AeV\xf9\x94})l\x98\xa5\xea\xb1Jz\xfe\x8aLPL\x84\x1cx\x0c\x98\xc0\xb2\x14L\nc\xe4!\xaf\xcag0H\x1a\x8f\xaa<\x831\xfa\x004\xa9\xc8$\xc5\x06\x04\xe0\x0b\xf214\x07Z\xe7\x19\xb8\xb0lG\xfb$\xa5\xc2\xb1\x1dfZ\x14'\x0e\xa9\n0u\x00\x15\xdb\xe2\x99\x03)\xdb\x01g\x0e\xa0i6<\xf7\xa1\x01\x9e\xd1\xd4\xa1\xc1\xce\xed\xdd*\xf6\xb6OT\xaa6v\xe0L\x8b\xb7\x89K\xae\x82L]H\xc5\xe6\xed\xcc\x05\x95-\xd2f.\xa4i\xc1v\xee\x85\x03L\x92\xd9C;\x0cn\xf7\x95bw\xc7d\xa5Z\xc5.\xa0i\xf9U\xe2\x94\xac@S'T\xb1\xfdj\xe6\xc4\xcavYeN\xa8i\xc8\xd5\xdc\x8f\x07\xb8$\xf3\x07'!\xdc\xfe\xbdb\x7f\xdb\x84\xa5\xeac+\xca\xb4|\x9f\xd8e*\xb8\xd4\x8eSl\xde\xcf\xec@\xd9\x12}f\xc7\x99v\xeb\xe7\x1e0\xc0\"\x99:,C\xe4v\xbe\x99\xf2o\xc6\xdbM-Q]s\x96\xea&v\x89\x92\xfd\xe1\x92\xa8\xe2\xa8\xe0\xc4\xa9\xa4_\xa6*-uJ\x93\x92d\x11\xfc\xdcS;\x90i\xc1.\xc7w\xf2\xe8\x9c\x94\x17\xebv\xb7\xce{\x08Z3\xbeo\xf6Cxt\x0f\xd8\xe7@\x04\xae\xbb\xc11\x13\"x\xdd\x17\xf6\xf9\x10\x81\xeb\x0e\xf1\xcd\x8a\x08\xd3<\xa4\xda \xa7\xea\x9a\xd0\xe66\xfa\xa75\xfcc\x9d'\x11\xb8\xee \xdfl\x890\x19\x1e\xb2\xcf\x99\x08\xdep\x91c\xe6D\x18\x0c\x1f\xd9\xe7O\x04\xcf?\xa0\x1a\xb4\xc6#\xb8t/\xf9;E\xc1\xaa\xb9)\xb4\x8f\x1b\xfd\xb42\xfcd\x9fW\x11\xbc\xee(\xef\xec\x8ap\x19\x9er\xcc\xb1\x08\x83\xe1*\xd7L\x8bp\x18\xber\xcc\xb7\x08\x83\xd1\xa2\xbc\xb3.\xc2\xa6{+ \x0f\x13\xbc\x9a\xbb\x82\xf3\xaa\xd1_\xbd\xe1/\xcb<\x8c\x80ug\xb9gc\x84\xc5\xf0\x94mNF\xd0\x86\x9b\xac33\x027|d\x9b\x9f\x11\xb4\xe1 \xf7,\x8d\xf0\xe8\xde\xf1%\xd4\x82QsMX\x8e<\xfa\xe5\x86^\x9f\x7fM\x8ed8\\\xa3\x02lS7\xc4\xd5\xba\x89\xbdbe/z\xa4\xebP^H\xe2-$H\xbc)8\xf5\n\x96\x92b\x7f[\x97E\xcf\xbc\xa2\xc7\x0c\xd0\xdb'\xc8\x823\xaf`9\x02\x82,n\x162\x0f,\xe4\xe4\xa2l\x05.N*\xf0\x81\xc5Z\n\xdfCm\xc36!\xb4\x0f\x83z\xdb\xd8Cm\xc337\xb4K\xb7\xb4\x8d=\xd46\xac\xd3D\xbbxS0\xd46\xec3F\xbbd\xb3m\xec\xa1\xb6a\x9d<\xda%\x9b\x8e\x84\xda\x86g\x1e\xe9\xb3\xb8Y\x08\xd46\xbc\x89kHQ\xb6\x02\xa1\xb6\x11\x98\xf0\x86\x17\x0b\x14N\x8a\xaf\xc6\x19$\x9d\xa8\xea\x11\xcf\xd4\xac\xc4\x04\xd2\x80\xc9\xa1+\xd0\x89U\xaa\x06L\xad@u\xf4\xae\xc6\xd9\xa3\x81T\xc6\xd2j\x9c\xb9\x9f\xb0\xa3\xe8\x91,\xa7v\x9e>\xe0Z\xd9P\x0c\xb2v\x90t\x1d\xca\xcb\x98\x87\x95qrI\xb6\xf2\x16\xa7\x94\xf7\xc0R\x81\xb2i\xe9{\xa0U<\xcav\xa2O\xaa\xbdY\x84M\x1a\x0f{\xa0U<\xd2f\xa2O\xee\xc3\xf7\x12}\x92!\xc7\xfaf\x8c\x87=\xd0*\xbc\xf3E\xb7\xb5\xcd2\x80V\xe1MICJ\xb2\x95\x07\xb4\x8a\xc0T6\xbcT[\xab\xa8\xc4\\\x90\xce:\xf5HgJV|*h\xa0\xe4\x90\x15\xe0\xc4&S\xc3\xa56\x9c\xb9\x87h\x01*\xe3f%\xa6\x81\x1655\xf4\xdcY'\x90\x85\x0e\xccN\x0e\x9d\x8frb\xd5\xce\xbe\xed\xc3\xca\x0e\x85,\x8e\x13\xa7t\x0d\x9c:\xc1\xe6\xde\xa1\x0b\xad\xda\x07gN0dR<\xf7W\x16\xe4\x93]\x11\xda`\x90\xbco\xa8h\xea\xdb6\xac\x1cX\xc8#m\xe2\x96\xaf\xa1S7\xda\xdc3t\xc2UK\xb5\x99\x1b\x0dY\xb7\x9d\x07\xd4\x18dT\xdc\x12\xda%!y\xbfPQ\xd6\xbb]X\xb9\xc0\x90gV\x89\xa7\x04\x0d\x9ez\xe0\xe6^\xa1\x1b\xaf\xdak\x95y\xe0\x90\x91W\xf3\x90j\x83\x9c\x8a{\x82\x13)$\xef\x13*\xfa\xba\xb7 ++\x12\xf2L\x9f\xb8dk\xd8\xd4\x855\xf7\x08\x1d`\xd5B}\xe6\xc2B6\xed\xe7\xdez\x82l\x8a+\xc2\xf2`$\xef\x0fV\xce\x0d\x98\x87m\x0e\xbae\xcaNs\x8b\xd6\x91\xbc\x84\xc4SB\x88lSj\xea\x91\xfa\xf0MA\xb7\\9\x0bs7\xf7keG0\xc4\xca!\xb2u$/a\x1eT\xc2\xa9\xe5\xd8J[\x9cP\xda\xc3\xca\x04J\xa6e\xef\xcdV\xf0\x18\xfb\x80\x1e\x99\xd6f\x106\x9f\xab\xf6f+x\x9c\x1d@\x8f\xd4\x07o\xffy\xe4\x02\xee\xf4\xcd\xe4\xaa\xbd\xd9\n\xbc\x139\xa7\x95\xcd\x12\xccV\xe0M.\x03\xca\xb1\x95f\xb6\x82\xc0\x9c4\xb8L\xb0\x15\xd87\xfd\x08P\xde\xf3\xc3\xf2\xea\xa5\xde\x00X=\x0ey\x1ca\x18&\x07\xb3@'V\xa9\x1a0\xb5\x02\xcd=?\x1bR\x19?\x0fyf\x05\xeaC&\xa2{~\xce\x8a\x81<\x0b\xc2\xe3f\xd1\x19)+\xd6\xec\xed\xdb\xf3\xc3\x0e,dy\x9c\xb8\xe5k\xe8\xd4\x8d6\xf7\xfc\x9cp\xd5J8s\xa3!\xcb\xe2y@\x8dAF\xc5%\xa1m\x0c\xc9{~\xaa\xb2\xbe=?\xec\x02C\x9eiu\xcfx\xf7\xfc\xdcps\xcf\xcf\x8dW\xed\xd5\xea\xce \x98\xfd\x1d\xdayH\xb5AN\xd5=\xa1\xdd\x19\x92\xf7\xfcT}\xbd{~\xd8\x89\x86<\xb4\xd2=\xe4\xdf\xf3\xf3\xe0\xcd=?\x0f\x83j\xb5\x95\xee\xa4\x90Y\xe0a5\x0f\xaa;\xc8\xaa\xba)8\xf9B\xf2\x9e\x9f\xaa\xb2{\xcf\x0f\xdb\xa1\x90\x87z\xddC\x9e=?\x17\xd8\xdc\xf3s\xa1U;\xf5\xbac\xbc\xb3\xc1C?\xf7W\x16\xe4S]\x12\x96B#y\xcf\x0f\xbb\xf7V\x1e\xb8\xe7\xe7\x91*{\xcf#\\\x87\xf22\x12_\x19A\xd2M\xb9\xa9O\xee'\xec\xf9y$\xcb\x99\x9d\xa7\x0f\xb8V\xf6\xfc\x82\xac\x1d$]\x87\xf22\xe6ae\x9c\\\x92\xad\xbc\xc5)\xe5=\xb0T\xa0lZ\xfa\x1eh\x15\x8f\xb2\xe7\xe7\x93jo\x16as\xc4\xc3\x1eh\x15\x8f\xb4\xe7\xe7\x93\xfb\xf0=?\x9fd\xc8\xb1\xbe\x99\xe2a\x0f\xb4\n\xefT\xd1mm\xb3\x0c\xa0UxS\xd2\x90\x92l\xe5\x01\xad\"0\x95\x0d/\xd5\xd6**1\x17\xa4\x93N=\xd2\x99\x92\x15\x9f\n\x1a(9d\x058\xb1\xc9\xd4p\xa9\x0dg\xee\xf9Y\x80\xca\xb8Y\x89i\xa0EM\x0d=w\xd6 d\xa1\x03\xb3\x93C\xe7\xa3\x9cX\xb5\xb3o\xcf\x0f\xdb\xa1\x90\xc5q\xe2\x94\xae\x81S'\xd8\xdc\xf3s\xa1U\xfb\xe0\xcc \x86L\x8a\xe7\xfe\xca\x82|\xb2+B\x1b\x0c\x92\xf7\xfc\x14M}{~\xd8\x81\x85<\xd2&n\xf9\x1a:u\xa3\xcd=?'\\\xb5T\x9b\xb9\xd1\x90u\xdby@\x8dAF\xc5-\xa1]\x12\x92\xf7\xfc\x14e\xbd{~\xd8\x05\x86<\xb3J<%h\xf0\xd4\x037\xf7\xfc\xdcx\xd5^\xab\xcc\x03\x87\x8c\xbc\x9a\x87T\x1b\xe4T\xdc\x13\x9cH!y\xcfO\xd1\xd7\xbd\xe7\x87\xadH\xc83}\xe2\x92\xadaS\x17\xd6\xdc\xf3s\x80U\x0b\xf5\x99\x0b\x0b\xd9\xb4\x9f{\xeb \xb2)\xae\x08\xcb\x83\x91\xbc\xe7\x87\x9d;-\x0f\xdb\xf3s\xcb\x94\x9d\xe6\x16\xad#y \x89\xa7\x84\x10\xd9\xa6\xd4\xd4#\xf5\xe1{~n\xb9r\x16\xe6n\xee\xd7\xca\x9e_\x88\x95Cd\xebH^\xc2<\xa8\x84S\xcb\xb1\x95\xb68\xa1\xb4\x87\x95 \x94L\xcb\xde\x9b\xad\xe01\xf6\xfc<2\xad\xcd l>W\xed\xcdV\xf08{~\x1e\xa9\x0f\xde\xf3\xf3\xc8\x05\xdc\xe9\x9b\xc9U{\xb3\x15x'rN+\x9b%\x98\xad\xc0\x9b\\\x06\x94c+\xcdl\x05\x819ip\x99@\xc9\x8f\xf8\x91B\xa2\xc6\xaf/\xfe\xfa\xfc\xed\xcb\xbf\xbf@\xbf<\x7f\xfd\xd7\x97\xbf\xbe\xa1\xedL\xf9N`\x8d\xaeP]\xec\xf2\xbe\xbc\x11_\xa1s\x7f\x17\xf0S\xbf\xf7\xf7\xff}\xe0\xefs}\xe0\xef\xba\x9e\xd4\xe4\xfb\x184\xfa\x96(\x02\xbb\xae!\xd2&5\xf9\x80\x9f T )\x08\x91\xb2\xb1IM>\xe0gb\xc6\xfcfR\x93\x0f\xf8\xd9TR\x80s\x07\x10\x80/\xbcp\x9di`\xc3\xb1>\xcft\x99 'v\xb4\x82K\xed8\xc5`xf\x07\xca\xb5\xc3\x99OM\x05=\xf7\xa1\x01\x1e\xe3\x83\x17\xe1FlccV\xe8\xb2b\x9b8\xe0\n0u\x00\x15;\xb63\x07R\xaef\x9byUU\xe0s/\x1c`2?b\x11n\xcbUlN\xe1\\\xc6\\%.\xbc\x82L]H\xc5\x9c\xab\x99\x0b*\xd7u\x95\xf9\xd5U\xf0s?\x1e\xe0\x02\xbeK\x11n\xd2>\xd6\xa6b.{\xf6\x89\x15\xac\xc0R+L\xb1d?\xb3\xe2\xe4\n\xf6\x99GE\x05<\xf7\x80\x01\x16\xfdk\x13\xa1\xd6\x0b\xb8\xe7\x9c\xe4H5\xbf\x7f\xce\xd6\x05+3\xfc\x9a\xde?\x07\xa15\\j\xc3\xa9\xab\x005\xbd}\x0e\x02\x8e\xb5!\xb8\xcc\xad\xa6\x86\x9e\xbb\xd1 \xcf\"\x84\xc7\xb4\xf4\xc0\x8b\x15#z\x07$\xc2\x928Y4p\xea\x04k6\xc53'Z\xad6\xce\x02T\xd7X\xe6\x01, #t\x97\xdc)vnU;{\xc7,\xc2\x93\xb8y4t\xeaFk\xa6ngn\xb8Z\xff6\x0bQ_\xe3\x99\x87\xf0\x80\x9c\xe0\xd5p\xa7\x98{\xa5\x9a\xdb?\xac\x11\xa6\xc4\xc3\xa4\xc1S\x0f\\\xb3\xf8j\xe6\xc1\xabFXeAU\xd0\x98\xe6AL +|\xd1\xdb)V\xefU\xab{F>\xc2\x91\xb884l\xea\xc2j\xc6\xeeg.\xb0Z\xf3>\xf3\xab\xadq\xcc\xfd\x1c \x1fps[\xa8\x81\xed\x83#\xad:?\x8f[\xb3\x17*m\xa3\x811,\xc2`cT\x84a\xe6\xa0\x08\xe3\x8c1\xd1\xa5\xa21$\xba\xc0 \xcb\"\x80\x05\x8ea,[/t;\x831\xf2\xd9\xa1\xe6\xc0g\xc7\x1a\xe3\x9eOec\xd8\xf31\x80l\xe6\xeb\x88\xa1\x96\x0d|\x07\xa5f\x07\x8al\x1d\xbe1\xe6\xc1`c\xcc\x83a\xe6\x98\x07\xe3\x8c1\xcf\xa5\xa21\xe6\xb9\xc0 \xcb\"\x80\x05\x8e],[/t\xccsp\x18c\x9e\x03k\x8ey\x0e\xb01\xe6y\xd56\xc6\x06\x90\xcd<\x8e\x13f\xd9G\xdd\x83\x1dty\xfb\xfc\xbb\x9f_\xbc\x19~\xfb\xa1YwK\xb4\xef\xfb\xc3\xf2\xfc\xbc\xcf\xd7\xfb\xfb\xa6\xee&es\xbei\xd6\xddy\x81\x8b\xaa\xa8\xfb\xee\xbc'B\xce\xc7\x9d\xbd\xc9\xba\xc18?t\x05\xdf\x91^5\xed\xa6h#\xfex\x89\xf8o\xdf(tV\xdd%\x9a\x8a\xef\xb0v}[\x1e\x8aM\x14\xe1\xa1qG]\x89o\x8avY\xf7\xfbh\xbd/\xf1\xe6i\xb3\xd9<\xa3\xa5\xac\xf2\xf5\xfb]\xdb\x1c\xeb\xcdPN\xd3.\xd1\x972\x8f)\xb1j\x9a:\xda\xb5\xf9}\xa88\xc1`\xd3\xee\x14a#\x87)\xad.\xf26\xba\xdd\x97}\x11*m\xe4\xd0\xa4Q\xcdB\xc5\x10 Q\xac\x9b?\xda\xe4\xed\xfbP\x19+\x9c\xaf\xdf\x0b\x19\x8f\x1b\x9a\xe8\xed\x8b\x7f\xbeE?\xbc\xf8\xfe\xd5\xeb\xe7o_\xbe\xfa\x95A\x1ea\xa4Z\x07\x82\xacad\xc0`\xab\xf5\x17\xa4\xbd\x87\xd6\x03B\x82\xd5\x80\x80`- `@%\xd4\x9e\x84\xf4\x04\xa1u\xf0G\x12\xab\x03\x04\x04\xeb\x00\x01?_\xea\x80\xde\xfe\xeb\xb7\x17\xe8\xcd\xf7\xcf\x7f~qZ\xffBN\xb5\x02\xdd\xca\x16]\xa1mS\x0f\xd3\xc4\x0f\xc6\x81b\xd6x\x8d\x13\xc0\xe5\x87\xc2}\xfcW\x07\x18g\x7fu\x80q\xf0W\x07\x18\xa7~u\x80q\xe4W\x02|\xb6\x9e\x8c\xf6c\xe4\xf4\xf6\xd7\xe8\xc7\xa6E?\x15ms\xfeK\xde\xbe/\xfa\xb2\xde\xa1\xb7eO\\\x88(\xe2\xed\xbe\xe8\n\xb4+\xea\xa2\xcd1\xbeGy[\xa0\xbei\xa84\xb4mZT5\xab\x92T\xe9k\xd45hU\xa0u\xde\x16\xdb#F\xc7n\x90\xd7\xef\x8b\n55\":\x16-\xea\xd6mQ\xd4\xdd\x840\xb0Nu\x1b\xcd\xcf\xc8\x7f\xf6E\xbe\xa1\x93\xa2Au\xe1\xe4%\xfaR\xfc.0t\xb6:\xd9F\x19\xe5\xed\x8e\xab\x10v \xc6\xe7\xcc\x839\xd0\xdb\xfbC\x81\xde\x0c\xc6G\xfc\xb0\xf3d\x1b\xa3\x8f\x1611\xed\x9e\xb7\x89\x15\x910DjE\xa4\x0c1\xb3\"f\x0c\x91Y\x11\x19C\xcc\xad\x889C,\xac\x88E\xd8PB;\xafm4\x8f\xea\xee\x8c\xfd\xceMI{w\x8f\xc3X\x17\xb4\x8d2I\x82\xe4\x0f\x97\x10\xd9m\\N\xecb\x88\x05,q\xc1\x12\x01K]\xb0T\xc0f.\xd8L\xc02\x17,\x13\xb0\xb9\x0b6\x17\xb0\x85\x0b\xb68i\x00\x1d\xfcW\x19\xee\xabN\xf2^\x059\xcf.\x02\xf6\x9d\x1d/\xbb\xce\x8e\x92=gG\xc9\x8e\xb3\xa3d\xbf\xd9Q\xb2\xdb\xec(\xd9kv\x94\xcfiJ\xc20\xf8\x0c\x1b>\x13o\x0fy\x1cw-\xde9\x1a|\x87!\xdfyD\xa9}&\x1a}\x88\x83|hG\xc9>\xb4\xa3d\x1f\xdaQ\xb2\x0f\xed(\xd9\x87v\x94\xecC;j\xf1\xf9\x12\xa6W\x7f}\xfd\xfc\xb7\x9f\xfeE\xfe\x0cH\x95\xaa\"\xef\x8e\xadH\x96>G\xde \xbf\x03t\xfe5\xfa\x85\x96\x88\xca\x0e\xe1\xb2*\x87:\xf7\x0d\xfa\xbf\xe7s\xb4\xde\xe7m\xbe\xee\x8b\xb6#\x03\xe9\x84\xe9F#\xac\xca\xef\xa2\xdbr\xd3\xef\x97\xe8KF\xe0\xa3\xb0]\xe8\xc5\xd4&t\x90e\x97L\xa8~\xf1\xb3\xcc*\xbe\xce\xdb\xb6\xb9\xb5\x17@\xe9R\x11\xdf5\xcd{t\xc8\xdb\x9c8\x06u\xfd=.P4>\xe9H\x02U\xd6\x9ba\xde\xbfA\xb7e\xbfGu\x83\x86\xa8)\xd79\xe6otM\xa8\x1a\x14G\x8b' ;}\xb0DqA_\xb8\x94\xf7\x9e\xa6\xf2\x13\xbe\xd5'\xed\x0b\x0c\xbe\x8e\xd6\xf9\xa1\x93\xb2\xa3\x9b!\x02\x07\x81#U\xaa\xcc\xf7M\xb5\x1a\xb2\xa9~_vh\x8d\xf3\xae\xa3\n\xe7\x88\xd8a0^\xdf\x1e\xebu\xde\x17D=\xf4\xb4i\xc9z\x05\xc2E~S\xa0\xbc\x1bL-\xa3\xf2\x9e\xb16[\xb4n\xea>/\xeb!Gd\xfbR\x13\x9e\x0f\n<\xd1\x94nq\x0c\x96)\x86y\xcam\x9b\x1fHU\x9b\x9b\xa2\xdd\xe2\xe6v\x89\xf6\xe5fS\xd4\xdf\x083\x8d\x94\x02\xe3\xf2\xd0\x95\xa2Va\xb3e\xe1^\xf9S\x8cP\xe0\x8a\x979\xa5\x80#C\xb5\x95\x89\xc7\xa4\xceI#\xc9\xc3+\xc2\x8ds\xd3x\x90\xb8\xc0(\x81\xe2\x04\x8c\x14.v\x8c\x06I\xb4#`8\x1f\xf7\x9b\xc4es\x9e\xc5}.\x07\xa2S\xd2\x1cn\xb2\xea\x01\x0et\xf1x\xfc\xe7d\xb5\xb9\xaf\xfal\xde\xab\x1e\xe2\xbc\xea\x8f\xf7\x9d\x92\xedps\xe1\x07\xb8\xce\xc5\xe3q\x9d\x93\xd5\xe6:\xfc\xd9\\\x87\x1f\xe2:\xfc\x19]\xf7\xc8I\xce\xdf\xde\xbe\xfc\xf9\xe5\xdb\x97/\xde\xfc\x019\xcb\xf9\xd7\xe8\xc5\x7f\x1e\xcb\x9b\x1c\x0f\xc3i\xdf\xa0 \xafit\x1fu\xeb\xb6\xc1\x98\x0e\xb8\xe21\x1b\x9c\x8a\x96\x1at\x84/\x11\xc5\x8bq\x95\xae\xe0\xf3\x14A>\xd5\x94\x1f\xfb\xe6\x1b\xe91=S\xc6\x9eR\xe6\xaa\x8d\x86\xbf\x8d\x03Q\x044\xd8}Ra\x0dA\xa5\x8c\x08\xef\x98F\x1b\x15US\x19_@]amE\x93\xa1\xfaF\xb5\xf9\xea\x8ePh\x80a\x13\xa6\xeb\xed\xed\xc8\x15\xbd\xf5\xdb\xd1\x1f\xa6\xb6y\xda\x1a\xd2\xbaz\x88\xd2\xb4\x07St\xd6owx\x98\xce\xe6i9Hg\xec\xd4\xf9\x91\x9b\xee\xdf_\xbey\xf9\xdd\xd0z\xff\xf5\x07\xb4]q\xd3\x04z;\xa4\x98\xfd>\xef\x87\xac\x92v^hu\xecQ\xbe^\x17]W\xae\xf8\xba\xea\xebb+\xd6\x97\xbb\xbai\xdeO\xd6\xf9y\xde\xae\xf7\xe5M\xd1\x9d\xef\xfb\n\xbf\xcb\xeb\xcd\xbbu\xd7\x9d\xefKr\x0f\xe2\xd0\xda\x87\xde|\xdb\xb4\x11\x97V\xe2\xb2\xbf\x1f\x8fG\xe1\xf2@\xddyh\xba\x92\xee\xb6o\xcb\xbbb\x83\xfeGY\x1d\x9a\xb6\xcf\xeb\x9e8\xef\xddH\xcfW]\x83\x8f}\xa1C\x06YK\xd4\x16\xeb\xfei|\xb8C\xd2\xff\x9f}\x83\xce\xbfF/_\xcc\xcf\xd0\xcb\x17\x0b\xd2%\xe9\xf03\xa4\xfc\xeb\xd9i\x89\xed K\xea\x03DMw\x17\xd1\xbd\xe7\xaai\xfa=y\xebj\xd7\xe6\xf7\xe4\xc0\x181\xdc n\x9b\xaf\x8b\xe8\xa6\xe4\x0b\x18\xea\xde\xd8x\xdc\x8f\xfc\x8a\xf3\xbe\xf8\xdfO\xa7\xcf\x0c\xab\x0b \x9aN\x12\xa0\x17$\xaaI]Q\xabvER9D\xb9\xa7\xf1d\x9a=S\x99\xe5\xae\xd8\xc0O.\xa7*\x9c&\x13\xff\xd5\xc6\x18mQ\xd6\x869\xa8\x8a\xaaQ\xd83\xb7i\x12\xa8\xaa>\xfb\x8c\xe6<\xff\x1a=\xdfl\xd0\x81\x8e\xe6c_\xc9\x82\x88=g\xcd\x95\x88[\x1f\xdb\xaei\x97\x9cE\x1e \x10\"\xc2:\x92\x0b\x08Y\xac\xbbE\xbf\x15\xed\xa0E^\xf7h\xd5\xdcE\x0c\x95\x93\xa1\xb0ljt\xc8\xfb\xbehk\xb4m\xd9\xd5\xac<\xbbiVe\xde\xe5{\\\xd6\x93uS\x9d\xafp\xb3;\xdf7\xb7Q\xdfD\x94\xbb\x88F\x81\xe7\xe3{X\xe4\xef\xc8\xa9\xba\xbc>\xd2\x16\x98\\2k\xb80\xc7\x18M'Y\x87\xd6\xc7U\xb9\x8eV\xc5\x87\xb2h\x9fN'\xf1<;C\xd3\xc9\xc5l\xf8\xf7lv\x86\xe2\xd1\x17r\xe1\xcbe\xbe\x15\x8b\xfcl\xb1p\x89\x9e<\xa1\x81&4_\xa2\xe9\xe1\x8e\xfc?\x9e\x1f\xeePr\xb8C\xedn\x95?E\xd33\xf6\xbfI\x82\x9e1&\xf2\xfad\x9bo\xcac\xb7De\xbd/\xda\x92\xae\xd5h=\xb3\xb9\xb8C\xab7\xee(\xd1\x05_\xfa;\xdb\xb7\x1ar\x11\xf2\xf7\xbe\xa0k\xc6\xe2\xc1\x07\xb2Iu\xb7D\x91\xbd\xb3\xfd$S\xc9\x06;\xd3\x89\xa4%(\xd6T\xfa~\xd1\xff\xb2\xbe\x97t\xbbd\x18,:r@\xf6}Yw$9 \xbfE\x87\xae8n\x1a\xb4mh'[\x0d \xc7\xa6\xdcn\x0b\x92\x8a\x8cU\x1b\x8c\xc8:\x81\xb2\xe8\xc41\x83\xd5\x8e\x87\xdf\x99\xf2\xd7\xd8\x88\xa5gz#f6\xd3_\xa7TF\xaa\xb1\x93x\xdc\xc9\xc4\xff\x8e^\xfe\xfa\xc3\x8b\x7f^k\xafT}@W\xdc\xbf\xd7\xd0\xfbT\xd1\x14]!\\\xf6E\x9bct\x93\xe3c\x81\xa6\x8c\x12\x1b\x94\x98Q\x12\x83\x920JjPRF\x99\x19\x94\x19\xa3d\x06%c\x94\xcb\xcbK\x83vyy9RA\xf2\xe55\x9f\x1aU\xf9\x1d_\xf4\xe8\xe8\x9e\xc0a03\xb3\x07\xe3\xc8\x870\xea\x8b\xdd0*3>\xd6\xf4\xd0\x15\xea\xfav\x18\x94)\x92=\x16\xa0\xb2/sl\x82\xc8c\x06:\xd6]a\xc8!\x0f\x997~\xf8\x95N\xf8\xba\xe5\xf9\xf9\xa6\xb8)ps(\xdaI\xd5|(1\xce'M\xbb;/j:\xfd\xfbG\xb1:\xff\xfe\xcd\x9bs\xe1M\x84\xde\x1c\x8a\xb5\x98/\xde\xde\xdeNnS\xc2\xf2\xf6\xf5\x80L\xce?\x10\xe4d\xdfWD\x9f\xe7\xc3\xd4\x16\x17|\xf1\x88\x17{\xd8\x97\xb8<\xdc\xe6\xb8oh_\x9c3\xdc\xf9\xed>\xef\xa3\xba\x89\x9a\xba\x88\xfa\x06o\xa2\xfb\xe6\x18\xe5\xab\xe6\xd8GL\x0b6\x0d}[\x1eH\xca_\xdc\xf5E=\xccpH\x11o\xf7E[\xa0j\xe8m\x86<>G}Y\x15\xe8\xb6i\xfb=Kv\xf8\x15\xe0\xaaK\xc8Ap\xf4\xaa5\x93#>'fg\x8e\xea\xa6\xdf\x17-:\xb4\xcd\xbf\x8bu\x7fF\xc0\xb4\xb8\xba \x07\xb9\x069\xf9\x86\x1c?\xea\xc9\xa1u*\x7fH\xd3\xbac\xd9\x0f\x0c-\xc1\x8es\xb0\xebz\xf2!\x9a\xa2\x8fc\xaf8\xa5+V\x1f\xa2X~\x1a\xf3\xa7\x89\xfc4\xe1OS\xf9i\xca\x9f\xce\xe4\xa73\xfe4\x93\x9ffl\xd9k\xf2\x81\x84\xbfD\xb9\xbc\xbc\xe4\x1c\x97&\xe9r\xe4\x1b\xc2\xfe\xa3\xd2\xb1'\xf1l1\xbbH\xe7\xb3\x85\xe8\xa0?\x88(\x97\xe4\xf01\x87\x15\xc3C\\A\x90G\x1cA\xe3[\xa2\x93\x07L\x95\xc7\xed\xe0\x10\xfa\xf5\xc5\x9b\xb7/~\xa0\xbf\xbf\xe5\x91P5\x9b#\xa6o\x1dt\xfd=\xa6Q%\xcf/YGG6 \x87H\xa2\xef-\x0c\x80a>\x8e\xd6\x95\xe2{\xca\x1b\xad\x9b\xc3}Dg\x0bd\xb4D\x873\x07\xf1\x88]\xd4\x86m\xdbH\xcf\xc8\xcd\x01\xe2/\xc2\"\x1c\xc3\xc4\x8c\xe7p%Q\xfb\xf8\xcc\x87H\xbc\x88\xd4\x8b\x98y\x11\x99\x171\xf7U\xba/{\\\xe8\xb5\xc6e\xd7Gm1\x04\x95bT\xe997\xa7\xfa\x95;\xe5\xa4\xa3\xfc\x88p\x923\x97Q\x7f\x7f(\xd8[MZ\xb1\xc4g\xecd\xe5\xe1\x7f\x1e\xa4i!?\xbe\xf3%.\x86D\x96_n\xc12%\xf9(\x8f\xb8\xe6C|\nD;\xd4\xa3\x03L\x0d\xba\xe20\x84f\xd3\x8eJ\x80%ppN\xc0\xba\xa8\xb2\xda\xa1\xe1\xff\x84_O\xfe\xa4\x83L\xe2\x19[UY\xa2\x15n\xd6\xefM\x97\xd4\xef;\x94\xf3D\x97_\x0fq4Sj3\xd9\xb1\xc8\x1a\x93)\xed\xb9\x94P\xa97l\x9cT\xde\x17g_Ln\xdb\xfcp\x18\x86\xf4\x8f\xb4\xf9\xebuV-1\x9bO\x0fw\xe2yKn\xd2\x9a\xca\xa72X\xb0\x0dO\x93\x11J\xd2\xfc\xf2\x03!\xb0\xec}\xd5\xdc\x89J7\x07b\xd0\xa8\xcfwQW\xac\x07\xa5\x85>\xc2\xe6[\\pq\xc3\xaf\xd1\xa6l)\x94\xd4\xefX\x8d6\xec\xdb\xfb!y\x9c\xac\xfa:\x1a\xd2K\x16!\xb2r\xdf\xb8\x85/\xd1t\x12\xa3D=o\xc4\xc4\xbe{\xb7\xeak.QiG\xf1$\xc9Zrz\xcd\xa8\x96\xb3:d\x05=*\xfb\xa2\xea\xc4K\xcd\xbc+\x17*\xc7\xc3\xd4(!\xf3#\xfe/\x01\x82fv\xe6$n\x92t\x82C8\x81\xb6\xb8\xf8p\x87\xba\x06\x97\x1b:\xe7\xfaRv\x88\x02\xa5y\xfa\x19\x9a\xa4\xcf\x84\xac\xaf\x96|\xa9\x06\x89\x13\xbf\xa4\x0c\x91\xdd/!\xb1Z\xeeO'9g\x93i\xf2\x8c\xe9?n\x90\x94we\x8d\xaa\xa2\xdf7\x9b\xa7_\x12\xf43a\xd0\xf1\xae\x1d\xd2\n\xc8\x7fy\xd4\x19\np\xed\xe3Q{\xe1\xa5\xeeXUy{\x1f\xd1r\x9c\xb5QJ\xf9\xdd&\xc9\x14aWu\x14\xd2\xe7+2P\x14-\xfd}\x08\x8b [\xd0\xd8\xcfPw\xc8k:\x05\xf2XrzJ\xe4\xcb=\xa1=\x8d\xf5\xe4\x85\xa3$$\x87\xc8\xc1Y\x9e\xbe\xac\x04'\xd9\xeerT\xef\x80\xe6\xa7\xc5\xefg\\\x0d\xad\x0fbmX\xda\x8b,\xd6\xc7\xbe0\xc6!at\xc5\xde\xd0\x8e>\xa5LV}mT\x1f\x1e\x88\x95Db6\x95'\x8cT\xa7\xa1\xd6\x11\xd9\xb7\x1fs)\xcb\xf8\x83\x90\xe3p\x1a\xd7l\x14WlJ3]P\xc7\x7f\xe3\xe0\x85\xb4,k\xcb\x86\xe4\x86L\xf7\xa0\xc7\xbf\xb5\xae\x81{=\xa5\xc9\x8f3\xfdi\x8b\xee\xd0\xd4]\xd1Ee]{}CN\xbe\xa2\x87\xc7=\xcb\xc7\x1e\x16\xfa\x93\xf5\xb15\x8d\x04]ta\xa9\xe3\xd0\xab\xbf\xeb\xfa\xbc?v`G1\x0bm\xf5\xa3\xc4c\xbdi\xd6\xc7\x8a\xdc]\xea\xb4H\xec_\x86\xfaR\xd63\xa2z*\x05\xc0+\x85@\x1d\xd9\xc8\x01\xb6\xceD\xba\x89O\xac\x03\xcd\xa6\xe2\xe9\xffk\x0dB*\xe5Y,\xe5\xa9\xfb8\x9d\xff\xa8\x07\xe1\xb8A\xc5\x0e<\x8c\x80\x89\xb1h\x84l\x8dK:B\x93)\x07\x18l\xa3\xdc`0\xe6\x11\xf1\x8c%\xd5\x91x_p\xa0\xea\x9d\x10\x81\n\x8f\xb1\x86\xad\xdf\xa6\xa8\xdd\x97\xa6\x9f\x10\x91/R3\xd5B\x87\xb6\x98T\xe5\xbam\xc8i\xe3\xf01\xd4\x18;\xe5\xaeB\xbf7&\x92\xce\xb1\x91\x95\xb4\xe1om!\x0d\x81\xabl9\xc6V\x9a\xc4\xb8\xbf?\xec\x8b\xba\xd36\x88\xecG'\xa0}\x03\xd2\x8d\x03\xbb\x05\x94E\xbc\xeelQ\x1d\naE\xb2\x1a\xbc\x94\xe9\xfc\x1c\xf1\xf92\xea\x1b\xb4\xcfo\n\xd4\xdd\xd7}~\x87\xf6\xe5n\x8fK\xf2\x0d\n\xf2\xc6O[\xe4\xeb>\xa2\xc4\x88\x12\xc5\xc7\xbf\xce\xcf\xa5\xb3\x06\xe7\xe7<\x8c\xce\xcfIT\xf2\xd3\xa9\x16m\xcc\xcb\xb1\xce\xcf\xa5vEw\x17\x87i\x8c\xd1\xa6\xc00\x15Q&t\x8c\x06cP>\xeb\x94\xe6[$\x05!/\xa3\x91\xae\x99T\xc2\xfbNl\xc7\xce\xa6\xd2i\x1ei\x9bv.\xb5\xee\xb1x\xfa\x03\x06\xa7i\x05\xe4\x89\xc7\xdf\xc76E\x06\xa7h\xddTU^o\x1c5\xa5\x86\x11\xd3s6q\xe9t\x0ee\x86%z,^Q>\x9b\xe3\x7fC+\xa6r|\xffi\xb1\xb9H.S\xf2\x1c\xdck3\x16\x8f\xad\x0dG\x99\x07ty\xddE]\xd1\x96\xdb\x91\xc6'\x00sv\xbc\x94\x85\x1e\xff\xae'\xbc\x92\xcf}\x96\xf2\x1a\xb1o|Ebb'\xa9\n\xaf\x83\x9by\x1b55]3\x1a\xaf/\x05Og)\xeb5\xc2\x14\xe9T=\xb3%\xf7\x18\xbaX\xdb\x1e#\xbc\x99\xcf\xb7\x18M)\xe6\x0e~&\x0d\xb3\xb6u\xb3\xa0-\x03\x92\xc3\x16\xb5\xbac\xf1-\xfa\xaf;\x12\xe0I\xaa\xf9\x0fwTD_\x94\xc8\xc4\x92\x9e\n\x0bZxA@\xf6\x8c\xe0\xe5\x0eiU(N\xa1\x03k\x88OV\xa4sC\xe3\xd7\xa5T,\xb8DO\x03\x94g\x01f\x84\x8a@d\xe7\xd7\x8c\xd7t\xe4u4\xa4u\x7f\xe3J\n\xe4\x02W\xfb\xb2\xb70\xaf\xcb\xac\xeb\x84\xde#m\xc6\"\x94#\x0e\xa7\x0f\x88C\xef\xe2\x151ef\x9c<\xb3\x9f^\x1b\xd7\x9cX\xa5\xf5\xe3e\xd0q2r\x9a\xec\x8c\x1f)S\xd0\x8eH\n\x0et\x0eQ\xd7\xa6\x96\xabb\xdb\xb4!\xab\x8c\x8fe\x1b#-P\xc9\xf0b+\x92V\xfa\x00\x92\xe8\x06H\xb7\x1c\x81M\xd2~\xd6O\xe4\xd8K\xd46=\xbd\x9d#\xeePYo\xcb\xba\xec\x0b\xb2S\x9d\xb7g\xe3\xf5:YgH\xd7n\xe5\x19\x7f\xcc\xe5{\xda\xbd\x1bM;\xa2\x9eP\xd6\xf0\xf9\x9bK\xa6@r\x8b\x1b_\x94\x0f\x12(\x18\xce\xd0dn\x11\xcaGtp1\xd5}G\x8c\x16\x87\xef\x8b\xfbm\x9bWE'L\xaa\x02\x80N\x95\xbe\x94\xae\xfe\x000\xa46\x1f\"\xbex\x9a\xce\xa7\x9bb\xa7W\x0b\xa9\xdd+r\xf7\xb6\xd2\x94R}S\x83\xcf\x92\xb5.\x15N*t)\xe4\xca\xc2\x9c\xac\xe5#%\xbd\x10\x0b\xefR2\xfaU\x14\xd1\xcb\x1887VO\xd6\xab/,\xf0\x1f\xed=3E\x83\xa2\xeeI\xd9\xa2R\xbc\x00v.\x90\xbd\xb3\x00\xec\x1c\xa9&b\xfa\xbd{\xc7\xd8\xab\xa2\xeb\xf2\x9d\x929?\xac|rE\xff8\xdf\x90\n\x97\xfa\xf5\xc9\x02|\x17%\xfc\xa5\x18cj\x9e\x98/\xc6@EY|\xfaI/\xe8|\x92.R\xcb\"\xbb\x00RN\x90M\xffL\x7f\x91\x94\xd0\xee\xc7Q&`C\xcb5W6\xd5w\xb0\x9b\x88j+p\xbc\x17\x96f\\\xbc\x8b\x93\xb6\x1a\xac\xeb\x00S!z\x8b\x9b\xbc\x8fZuYax6.\xed\xb2,\xfdf\x17\xe5]W\xf4\x1d\xf0V\x876*i\x07J\xb8\xb2\xa2T\xfde\xe3}jX\xcc3\x84r\xfb\xe5\x93\xba\xa1\x1f,\"\xbc\xc6\xf1&y\x93\x03\xd8=\x81\xa6e\xdaKF\xacS\xf8j9\xf4\xb7}!\xce\x838\x8b\xb2l\xd5@\xc5\x8d;\xc39\xc6C\xe7n&\x97c_\xa7n\xe6R\xbe\x9b\xa2\xed\xca\xa6\x8e\x0em\xbe\xab\xd8k\xf0\xc6\x15J\xe3\xe4\xb1\xa8\xd08.\x7f\xf5\xee\x9d\xd6\x83\x9c\x9e\x8a\x1ae\xa9\xa9\xa0\xd4\xac,\x13[\xed\x12\x06u\xd5o\x0c\xd9\xc3\x1d\x9a\xc8+\x06\xdf\xa2My3\x86\x8c\xb4V\x9ae\xeb\xbdh\xc9\xea+\x8c\xa2\xdbR\xd7\x1b\xf4\xa9\xe1\x12\xfdiS\x0c\xff\x081c\xa6\x7f\xb8#\xff\x97\xa7Z\xc6\x0d\xcc\xa20`AOy1JI\x8b\xb5\xb7]\xbf\x9at\xfb\xe6\x96\xfd!5\x0d\xdbF%/\x89\xae2\xf1.q\xd27\xef\x8b:\xa2\x17\xfc\x18\xb2xm\x95W\xb9T\xce\xba!\x1f\x19\xa8\xf2\x1eZ06\x05\xf8U\xfc\xe2\xec\x0b\xbaQ\xf4\xd1\x0c\x97q\xf9\xcf>c\x90WBP\"\x9f\x0f4\x8e\x9e\xa5\xfa\xbb\xf7\xca \x8eU_\x9f\xf62\x97\xb4\xbe@\x8a\xa2\x17\x88\n6\xfb[\x01\xb4$\xc7\xd9\x7f\xef\xdc\xf8+r\xafBW\xc1\xe1\x00\xce\xff\x95\x98MRy\x8b\x8d\xc9\xfc\xff\xf3\x85\xcd\xff\xcbt,\xeb\xab\x06\xf7\xe7\x187\xb7\x85:e\x1b\x8f\x1c\xa5\x86X\xdb\xcd\x04\xda\xbbp\x99\xc7<)p\x18j\x9d\xd7k`#N\xcb\xbd\x06y\x14iK\xa9\xcc\x16\xaf0\xd9\x8f\xa3\xdb\x8e\x8eK\xdc\x8e\x1d\x90\xaf&\xf9\xb1\xdf7\xad\xf8`\xbcT\x07\xb5\x17T\x8c\x0d\x8fI\xf4GV_\x08\x87S9\xc0J#\xc7i\x86\x92\xf8l\x8b\xf1\xc8\x7f\xe7\x00\xc93\x86I\xaa\xb9\x1a\xa0\xc4.xHL*\x85_M\x80\x80BJ\x8c\x0d\x9d\x87df \xf83m\xbe5nF\x1cl\x17\xbe\x93n\xdc\xb3\x91cy\xcd\x1ab u\x99(\xc2q\xccL\xdc\xc1\x12zfK\x99\xac\x83\xdb\xf8\xd0\xcb/\xfc\x94\xd4z\xbc\xc6\x1b\x99.0\xfbS\xd2\xfc\xd5\x93\xb3\xda\x82\x08\xceO\x15;\x15C\xb3k7\x9d\xc7\x00I\xda\xc8\x9d2f\xbe5\xa5\xef\x03\xcb\x16\x01\x92k\xe0x\x0f\x8f\x99a\x9cw\x9d\xd24\xb2\x91\xaf&\xc7\xda\xc74\x99\xe9N\xd6O\xd4\xb3i\xd1\x19?\xda\xd7\x19OH'\xcb\x1e\xb2z\xe7C\xf3\x90\xd3T9a\xd2\xde\x18\xa4\x86Uf\x11\xb6\xa3v_\xc9w%!\xd4\x1c\xfb\xa1\xe3\x826:\x8b\xbbC^o\xd8\xab6\xdd\xd9\xf8Dl\x16k\x97\xce\x84y\x01\xba\xae\xc4|\xb9\x1cI l\x02\x1cBQ\x95\x83BE \x13\xdb\xc8\x17\xd0A\xa9%i=\x14\xbd\xa5\xc7\xd1O\x05]\xce\x92\xaa\x0bf!\x05k\xf6\xa0G\xdf\x84\x19l\xa7,\xbf\x9a\x94\xf5M\x8e\x81\x97D\xc4\xe8\xc9\x00?6m\xf5\x82^\xd4`\x9ep2\xce\xe2\xb3\x82-\xf3Ns\xea\xf2\x90=*\xfbV\x1e\x7f\xc0\xa2H\xec\x84\x19[c\xb6\x8d=K^\xa9E5y\xc4\xec,lGV\xf5\xc9%\xd4\xa2\xf3\x00\xdf\x1f\x02Z\x88\x08\xef\x0c\xccc\x8f-~z\xfd\xc5&\xef\xf3%\xb9 \xfc\xbc\xbb\xd9\xfd\xcf\xbb\n\x9f\xa1\xbft7;tW\xe1\xba\xbbzb\xde\xe1\x99L\xa7\xd3\x01\xfb\x84\xda\xe3\xeaI<\x7f\xc2\xca\xbaz\x12gOP\xde\x969\xbbv\xfc\xeaI\xdf\x1e\x8b'\xdf\xfee7\xae\x19\x0e\xcf\xf8\x92{r\x86\xa2\xf8\xd9\x93o\xffr\xc8\xfb=\x89\xcb\xab'\x7f\xda\x92\x9f'\xe4\xcf\xa8=\xe2\xe2\xeaIqS\xd4\xcdf\xf3\x04m\xae\x9e\xfc\x92\xa08\xdd\xcfn\xe2\x9f\x92\x9b(\xfePe\xd1\xfc\xa7\xe4&\xdeg\x7f_|\xa8\x12\x94\xfe\xfd\x02G)\"\xff\xdcD\xc9>\xbb\x89\x92\x9f.?\xfc2\x9bd\xe8\x92\x00\x93I\xf6\xf7\xcb\x0f\x83\x98d\xf8\xfd&\x1a$\xc5\x1f\xaaK\x14\xef\xe3\x9bd\x1dM\xa6\xc9$\xb9\x88&q<\xc9\x92h\x92N\x16\xd1$\xbe\x9c\xc4\x17\xd1dF)\x8bI\xfaS\xbc\x8e&Y\x86\xa6Q\x1cMfY\x14G\xf1\xdfg\xeb\xe9\xf0\x8c\xfc\x89\xe2(\xde\xa7\xebi\x14\x0fr..\xa3\x04%Q\x82\x86\xbf\xd0\x14%hrq\x89\x12\x94\xec\xd35\x91\x82b4\x99e(F\xf1M\xb6\x8f\xe2\xbf\xcf\x7f\x8ao.\xf7\xf1\xf4&J\x06U\xb3\xfd\x05\x95\xcd\xcb\x8a\xe2\x9f.\x0c\x05\xba\x91\x1a\x11yD\x0d\"w\xf8\xed\xa7Tpp\xe2\x87'\xdf\xfe\xe5|0\xfe\xb7\x7f9\xdf}\xfb\x97\xc1\xaf\xdf^\x7f\xf1\x8c\xb5\x0b\xfe\x9f\xba\x89\xda\xe2P\xe4\xbd\xd2\x81\x9f\x9f\x933\x00m\xb9):z\xcde\x95\x93\x05\xd3\xa1\xf9\xb2H&\xcf\xd7\xc7\x16#\xb6\xff\xaeo\xc7[\xdb:o\x8e\x99\xde\x1a\xd5\xc6\x98\xe8\x8dQ:\x14g4&\x91c\xf3\xd7\x84\xacU!U\xe8\x1b4\xbe\x0d\xc4\x85\xf1\xc1\xd7xYL\x7fg\xc9Z3I\xd7\xf15\xce\xb1k\xa3\x17\x95^\xd7\xbf\x7fq\xf6\xc5\xf99\x8aB\xfe!5\x18~{G\xeen\xeb&\xdd\xba\xe37\x90\x12\x1aY*\xa3U\xeb\xf7\x05\x0c\xfb\x8f\xed\xb1\xa6\xf7\xd0\xacs\xbc>\x0e\x0d\xf4uQ=\xfdr\x98b\x8e\xf7\xbf}\xd9\x16\xd5\x1b2\xe9$\x04t.\xbf\x8c\xfa\x1fm\xd1\x1f\xdbZ\x80\xd0\xd7(\x96n\xe8c7\xcb\x89\x89\xab.[\x9a\xd1\x12\xca7\xc6c@3.\xfc\xcfk\\\xe4\xed\xb6\xbc\x1b\x97@\xd8\xee\xda\x19\xff\x13\xbe\xc7M\x0c\x1f\xfd0#\xd6\xa6X|\xd3\n=\x19\x07)\x970\xa2\x04\xf9:\xcf^\x1b\xd5X\xe5i\xbdI\xf4\x9e\xa1/\xc5\x05\xa4\xe4\xc1h \x16\xdd\xf4\xb1\xd6\x9f3&^\xef/\x8b\xbc+\x96\xe8\xe9\x00*\xeb\xe8?\x8f\xf9f\xc9t\x91oE\x9fd\xd9\xf4\x0c\xa1\xc9\xf4\";C\x93\xf9\xc5\xf4\x0cM\xb2t\xfa\xec\x8c\xf1\x11\xf0\xd2\xc1\x97\x11\xbe\xc5\xf0\xef\xf8r\xe4\xfb\xcfc\xde\xf6\x10\xdf\xc5eF\xf8\xd2))o\xe0K\x12\x99\xaf\xacA\xbeEF\xf9\x86b'\x17\xa4\xd4\xe9|\xe4\xebH6 \xf0\xcd\x16T\xcf\xe9\xc0\xb7\x98\x0d|\x8b8\x13|\xc5\xdd\xa1\x01\xf9.y\xfd\x08\xdf%)/\x1d\xf9\xd6e\xbb\x06\xf9\xe6S\xca7\x1b\xf8.\x89=S\x89o\x18j\xed|\xd1$!\x1c\x8b\x94\x947c|\xcd\xb1\x97\x1c\xa8\xf2%T\xcf\xd9|\xe0\x9b\x11m/g\xd3\x91ot\xa0\xc6\x17\x13{\xcec\xa2\xe1`\xcfx0\x92R \xf3\xa0\xcaHn\xd1G\x93\x0bR\xc1\xd9\xf0o\x83\x91\xbbP+qp9\x05\x0fE&&\xe7\xe8D\x953\xbd$u\xccH\x94esS\xd7\xd1\x8b\x9a\xae\x97r\x91 P\xe4\xe8G\x95s\xba\xa0\xb5\x1cXh\x955\xc6\xd1\x91Z\x91\x8c\x91D6\xabd\xb2\x18\x03@\xf2\xa5\x16\xa8\x99\xd40\xb2\xc1;\x93\xcbL\xe5c\xbe\xd4\x02gF\xf9Hh\xeb\x8e\x1c\x0b\x1c|\xa9\xb5(\xb9e\x10\xb5!F\xe2K\xad \xcf%\xc6\xe9b\n12WjU\x9cIm8\xa3\xb1\x9a\xa9|\xcc\x93\n\x1f\xf3\x9f(q\n\x96\xc8<\xa9\xd5\xf1\x82\x94\x18\x93\xf6\x14\xd3\xbec\xae\xf21GjF\xbd \xad\x91\xea\x98P\xf7g\xd9\xf4\xd9uMW`\xc7Aq\xe8f\x9f~\xf9\xbe\xb8\x1f{\xe9\xff(\xb7\xa8\xca\x0f\xd1>\xef\xa2\xf7\xc5\xfdS\xd2\x15\x9f!\x06B\xda\x0c\x88\x8d\x8d\x03\xc3\xae\xe8\x15\xf08T0\xc1\xb7y[\xa3'\x7f\xab\xdf7\xb75\xba\xbe~\xf2\xa7\x8f\x03\xee\xf7\xeb\xeb'\xa8\xac\x11a\x9d<\xd1\x06\xdd\xfa8~\xe9[\x0c7\x80\xd6\xe3\xf40\xea\xcb\xaa\xacw\x11\xaf\xe3R\x82kc6;\x03C?\xdd.D\x01WeR\x82\xfd\xa2\xcc\xdezI\xa6\\\\\xde\x1d\x8au\x1f\x91e\x00}\xb4|\x06\xecCjo\xbe\xab\xe7j\xa0\xb1\xde<\xfd\xe2|[\x85\x9e=x\xca4@\xe7|\xc0\x1e\x12\x1c\xfd\xb0\x86y\xd2\x85\xe5\x0c\xdf\xa2\x92l\x1d\x1bZ9O\xf9\x18\xaf\xed\xb5\xe3\xa6*\x7f\xa4\xae\xd3\xd0\x1f\xf5\xadC\x9e\x85|\xb9j\x9b\xdb\x8e]\x87Y\xdc\x0d\xc9\xf0\\\x0f\xf4\xea\xe9\x97\x87\xf2\xae\xc0\xdd\x19\xfaR\xc0tF\xb5\x15<=\xd6e\x8f\x8b\xae\xe3\xac\xcf\xcc\x06\xc0(K\xfe\xcb`;skB\x93\xc6K\x03\xc4\x8d\xaa\xb1\xdf,\x02yN\xcaJ=W\xf0FrZ\xe5w?\x11'?5\xc2M\xbe\x05DK\xc6\x80\xe6\xce\xc2@\xb3\xbf(g\xfc\xf8\xe4\xd3/\xc9WcT\x83\xd2g\xe8\xea\x8af\xa5\xc0k\xf3\\\x99\xf1,$\xbb\xf3e\x98V=Un\x12If\x87\xbbg#\xab\xb6\x0e\xa5i\x8a\x80U\xa6\xff(pW E\xad\xaaY\x95\x18\xb8\x1a\xc0T+M\xa6\xa6Zh\x89\x16\xe9\xfc\xf1\xd5\xda\x14\xdd\xfb\xbe1_\xc5\x03\xf4\x8a\xc9\xf1\xf4OW\xc0,\x8b\xf6\xde\xdf \x0f#\x96\xfa\x1f\x0f\x87\xa6\xed;6\xd3\xe8\xcf\x98\x11\xcf\xb8\xd6O\xe0)\x03\xb4d\xc6\xcb\x93\x0e\xcfu\xfb\xfc}\x81&\xb3N[\x14\x12{\x08\xca-\x0d\xc0\x8a\x109\xde_\xd4\xdau\x0eg(\xcd\xfe\xfcL\\`\xcf\x8f\xe8\x9aS\xb6\xd3\xb7p\xc9\xe1\xd9L\x7f\xeb\x1e\xd8\xaf\xdd6m\xe58*\x15\xb4o\xab\n\xd1vi\xc8j\xd8\x13\xcfb\xd8\xf5\x17\xf6\xd5\xb0\xeb/\xd00\xfd\xff\xae\xb9\xbb\xba\xfe\x82\x9e[G\xc9\xf4\xfa\x0b\xb6\xb4\xb5\xb9\xba\xfe\xe2\x978\x9d\xcc\xe2\x0b\xf4\xff\x10weMn\x1bG\xf8\xaft1\xd1&v\x08,\xc1cAJ\xb1\x9e\x92<9\xe5*W\xf2\xe4u\xa9\xb0$(\"\x02 \x04\xc4J\xb2S\xfa\xef)\xcc\x01\xcc\xf41\x00\xedu\x02=h\x89c\x8e\x9e\x9e\x99\xee\x9e\xee\xaf\xd3x\xbb\xd9\xed\xe3e\x9aD\xf1\xf2a\x1b\xa7\x8b\x9d\xfec\x97na\x01\xf12U\xbf\x96\xe92N\x17Iwg\xf7\xb0+\xa3U\xbc[la\x15oW\xfb\xc8\xbc\x13\xc5\xe9\xc2\xfc\xb1Kw\xb00/E\xfdK]\xb9\xa9\xfeC\x15\x15uEI5\x7f\x9b, IJ\xd5\xc8h\x15'\xeb\xe4\xe7\xc7\xd9\xbd1\n\xfd\xe1+\xbd\xef\xe88A\xd6.\x044E NI z\xdb\xfb\x03\x8c\xce\x83!^n&\x1d\x98\xab Q\xd7y\xd6d\x97=F\x1e\xb8\xfb\xe1\xfc\\\xb6E]\xe6\xf4\xcc\xdb\xfaKm$l\x08\x8c\x1b3\x99\xb1\xf0n\xd4[\xc8\x7f\xb1q\xdc\x8b\x0fC\xb3\xd1Y\xdd\x96\xab\x81\xf6\">\x18%\x84\xb3\x9a\x98;\x9b\x97fg\xef\x0d \x1c\xe4;\xc2\x80m\xbf\x04\xc9\xab?\x0eBF\x1aW\x04BJI\xc0\xec\xabT\x9f n6\xa6h\x1e\xf1@\xa21\xa6\xaa\xbbR\x02\xe3\xaf\x0d\"\xb5\xbb\xab\xc9u\x15\x9ex\x03!\xba\x03\xbb2\xf6\xfdU'rAw..~\x9a)\x83u\x803\xfbS\xbc?\xe5\xfb\x0fO\xd5g\xeaL\xa1\xe3\x06\xbd~r\xa9^\xdd\xc0\x1f\xab\xd3\xa8F\xd8\x92u\x16\x07\xdf\x9fJ\xbf\xce\xa3xp>\xcf\xfd\x10\x0bp.\xbe\xcf.\x1f\x98\xac\xd9@\xa3_\x15mV\x16{\x9f\x13zQ\xc5\xfb:Hm\xb2Z8{\xb3\xed>\x95kqT\xc1\xf0\xe4\x0e\xfe\xa4\x89\x02o!\x0e'\x07\x98\x04/\x89\xc1:!\x90\xb5\xc3\x7f\xcb\xae?>\xa4-\xb8\xc7\xb5\xf4\xd1@\xc2-\x8b\x01-\n\xee\x10\xf0^\xb1\x17\x9aF\x14\xf8\x8aN\xa5\x9e\x03\x03\x0e\xa4@\xb4 \xa5'\xd6\x9fI\x19H\x01\"\x0d\xd4\x9eZdLA\x9fKN\xcb\x94\xe0\xec'6O7\x0e\xdf\x12\x11\xb5^\xab\xa6\xe6\x87\xc9\xe4\xdf<\xce\xba!x\x9ci\xc7\x95\xc7Y'\xf3\xa4\xeb\xbf\x9a\x1b\xdau\xe5qf|W\x1eg\x9a\xdf\xba\x9a\x1f\xe2\x95\xb9 \xd9\xc0\n\x92$~PW\nk\xe7\xd1\xc2\xfe\x0d\xee\x07\xcb\xfe\xae\xf3Y\n\xc9\n\xb6\xfd[]\x07\xeeM\x0f\x06\x05>\xe4\xd4\xe1\x8d\xf8\xe0\xad\x7f(\xb2\xb2z\x1f=\x7ffl\xee\xc7\xe2s/T\xfa _\xf5=\xcfp\x8d\x8c\xd6\xd8`=\x18\xab\xf5\xef\xb8c\x8bCS\xd5\xaaj\x90\xcc\xe5n\x13H\x95L\xb5\\\xd5\\\xf5\xc0\xca%=1\xa2\xbeu\x82p\x02\xee\x94\x89\xcf\xd5!+\xc3\x1da\xec\xfe\x1cI\x81\x8f\xf8\xe5\xa3}Gu\xf0\x15\x91B\x06\xb5\x9edR\x18\x0f\x99vIL\xd4\xb9\x81v\x9a\x1a\x92\xd3\xf9d \x86\x14(/\xbc\xc8\xf4\xb4\xa8?\x1b\xfc\x082\xae\xb6m8 aI\xa5\xf5~T\xad\x93!\x19]\x06 \xc5\xa7\xb5\xdd\xdf6k\x7f\x1cx\x80/\x18d\x12\xa0+lH\xf2\x84\xa0y\xc4^V\xa2\xc2\xd4\xb0Q\xa4\x8cTe\xaf\x00D\x18\xe0\xcdcb\x16\x06\n\xe4\xecI_\x1a\xc2\x84\xef\xa2\x85\xa1\xb8\x0d\x88\xc2\xbeB\xa0\xd6\xfbq\x9e\x98\xd5\x84\x19\xc7dI(\x8e\x1c\xac\x033\xa5O \xe2|\xc0\x8c\xc3\x18\x04y\xbc/\xabk\xae\xcb\x14G@ro\xb6\x17\xa3\xeb\xf5\x8f$\x7fl{1\x86Y\xfb\xc8h\x08\xf6\xa7\x8d\n\x85 \x8b gn\xb8\x85EDqqA\xe7\x1c\x90XB{\xdd\xc4MfCU\xde\xf8\xb7\x189W\x0b\xc9\x92\x89\xb4\xdd8\x00\x13}\xad\xb3\xcb|\xf8\xd9\xca\xb1\x15v\x15\xd0Q\x03C\x91AH*\xc0\x93\xfc-\xb4\x07\x1fG\x17\xd7C\xa2h\x99|\x04\xe0\x11\x10T|~[\xbd\x7f\xcf\x1c;\xba\x84$\x8bfH\x81Q\xbb)F\xbe\x1dW\\,#u\xeb:\xc4+\x84V'\xc3\xe4\xbbjm\xbf\xa3\xe2L\xd1\xde\xcb\x1e\xcc\xc2\x0e\xa3,\xf4\xafDUSh\x83\xeb\xe2\x15\x91\x04\xee\xe2}U\x96Y}\xcd\xe5\x81\xa7\x95\xe1\xba\x90\x0e\x10\x06\x85\x99\x063\xc2\xcca\xc6\x8fw\xb8\xf6\x010a\xec\xdb\xfe+O\xf3\xac\xa2\xb1\\\xbbj\x86\xfa\x85\x0e\xfa\xd6\xd0\xdd\xf5\x0e\xfa\x16\xf0\xf0\xed6\xde\xec \x8d\xd7 $\xab8I!Y\x96\xd1:\xdela\x1dov\xea\xacm[>D\x0f\xfe\x19[@6\x07\xee\x80\x0d w$\x8a-\xfa\xd7\xf3\xb9\x8e\xda\x8aO\x922\x82a\xfd\xb2\xc9)B\x006Q\xbcFS\x08\x82\xd3\x88\xf6\xd3\xc1\x9d\x9f\xdeA\x13\xb5\x03&F\xeaT\\d\xe4V\x17uE\xfd]\xe6\xc1\x06\x0d\x85M\x15\xf85%\x92x\x8bH1\x82\xf7\xd2\xef]q\x92\x9f\x81 g\xf2\x9eX\xce {\x0b~\xd7\xea`<\xe2\xb8d\xaeej\xa78\xaa#\xa5D\x9a\xa6\xc66W`\xed:\xb6 \x02x\xddTu\xde\xb44K\x8b=m\xf0\xf5\xa6\x11\xa3\xdc]\\7\xc5\xb9\x08\"\x85\xf7%?\x8a\xdd\x04\xde\xfc\xc4\x1d\xe4\xba\xcfe4w;\xecQS}\x12\xfbu\x177\xf9\xbf\x9f\x8b&?\xfc\x06\x0d\xc3\x1d\x1f-\xf3c\xde\xb4\xc5>+-\x06F[\xd5d\xb1\x039\xaa\xd6^L\xc9\xe0\xb8(Z[\x07\xc2\xb3\xb1\x17\x05b\xf2o\xc4\xd76\x1b\xcf4`\x18\xa6\xc9\xa7\x0fX7\x15.\xd7)\\\x98\xa6)\xa1K{`C\x82\x99R@\xa4\xb4\xfbF\xb8\x9dx\xca2r\xd2\x8b\xb3\x93\xf3\xe7\xf0#n\xf2\xcb!o\xf2\xc3\xdf\xb3\xe6\xc3\xa1\xfat\x81zR\xc8\xb5\x8b>\xe8\x85C\xdb?\xf4\xad\xe1\x10X\xf9|\x9a\xb0\xe1\xe1P\xdf\xa2\x19/FR#\x1b\xacL\x93\xeb\xd2\x04\x1f\xbb\xb6\x9d9\x0ch\x0e\xec\x16\xa2\x1f\xc5f\x8f\xd7\xbf\xdc\xb5\x9c\x95\x01\x9cs8)9\xaa\x17\xd4\x8d\x03\x7fe\x1b\xc4\xb8\x9dD\xd4\xdcYZ\x98l\xa0\xa75\xa7\xc0\xbb\xc4\x01\xa2\xec\x8c\x00\xb9\x8bJ\xcb\x8d\xb9\xc9F\xcf\x1e5\n\x03\x9f\x1dg\x9a\xa6\xa3\x82\x90\x97~\x10\xb2\x04\xa7\x81\xe8wZ\xb3\xd0\xcc0\x12[Mj_\x8b\xa9\xc8F\x90*\xb0\xe2\xff\x85\x11 \xc5\xcf\xa9\\D\xbb\x87\xc5#\x1d\xf2=\x8f\x17\xcb\x90Y\xea\xb4\xb9\x899\xcb/\xcfg\xda\x00[\xf3\x17\xfb\x9a\x86\xcc\xe3\xcb\xd7\xcfH\x0d\xb3\xf9,\xbe\xe6\xcd\xc7\xbc\xb9\xbaD\xe6\x9d\x96\x82>f\xe3x\xec\xa3xs0!\x8b\x11\xc5_\xf7\x1e\x0bY\x8c\xf5\xc5?!\xf2\xcd:&\x10\xb7V\xd1\xb53hIAi\x95q\xc4mn\xdb\xe0\xc6\xf7\x87\xdf\\r\x18\xf5 I\xfd*q\x9b\xfb\x8e\xdb\xe9\x0dQ\xc0\xb1^z.\x0e\x87\x12\x9bB}\x9ccJW\xdc\x7f\xf6\x88\xee.|\xeeB\xcc\x05 i+\xb1\x0c(W3N\xb9\x95\x07\x19x|P{}\x91\x07>\xdeW\xe7\xfa\xb9[\xfc\x9e\x9br\xa8\xb4\x977\x8c)\xd0\xde\xc7\xe9C\xc6\x86\xca\x85\x97sn\xf3\x0b+x\xd2\x89K)\xbcB\x99\xd9\x1by(\xc4\x13N\xf7\x8cE@\x172$I2\xc5\xe9\x82\xe8T@\x08\xc6v\x1e\xf4\xa7\x8cj\x16`, g\x18\xa4c\xdeAqW\x87E*\x87\x80\xfa\xeb\xcd\xb0k\xf3\x8b~\xab\x93(\xd9\x9f\x88W\xdaq\xbb\x12\xb6\xa2 \xaf\x01 \x182\xfe\x95\xa9\x067\x08I\xbc\xee%4\x05\x1c\xf2\xa6|Bh{\xa1\x1d\x8f\xb7\xd1\x81?7\x84[\x81\xd9sg2\x02Q\xa7\xe7\xc0\x99/\xcf\xa7\xdeS\xee4\xda^\xe2\xda\xe6\xbf\x16pj\x05\"\xec\x1b\xa7\x07\x83\xf3-\xb6\x9c\xb7\xf4\x83d\xed\xb7\x0f1\xd5\x1c\xee\xf5\xb6\x0e\xb1\xde 6_\xdf\x84\xc2\xbb\xa3\xc0\x0d\xac:\xca\xa6\x02\x8b\xba\x19tE\x9eC\x8de\xde\x9a\xce\x82-\x9bL;D\xcc\xd3\xfcf\xea\x86Y\x16\x84e64J\xd4E\xc7^\xad\x83^\xcdB\x96\xc2\xb8UP\xad\xc8\x91\"M\xd4\x1e\x04[\xe0\xf2+\xb6\xe8\x11\xef*\x90\x86\xc3\x88\xaeY\x93\x9d\xf3\xb6\xdb\x9c\xf6U\xf9\xce;\x14\xf27\x88\xdd\xee\xd5\x1b\xb8\xbf\x87c\xd5\xec\xf3+T\xedIay\x95\xcf\xe7\xcb\x15\xda\n4\xe4\\\xf7W{\xca\x8b\xc6\x1e\xc6\xeb\xcf\xcd\x82#\xecLF\x86 \\!\xb8(\x0e\xa2\xd4\xcaO\x10\xaa\xff\xa0Y\x18\x0c=mq\x9c \xc9\x9a\xd1\x9d\xafj\"\xd72\xa6P\x91\x9e\xef\xdey\x1a\xc9\x04\xd5\x0c\xc1|\xdf\xdf\xc3)\xdb+\x82\xbe/>\xe6\n\x11\xa0=\x15\x97\xf7\xd0T\xd5\xd9\xd0\x19\xbaJ\xcc(\xf4\x9f\xfd\xe3\xbb\xbf|\xd7\xe9\x96\xc7l\xdfV\x8d\xb2ZUGhO\x85\x1a\xa7c\x99\x7f\xee-\x12\xbe*\x14\xa7\x9bq%\xd0 \xa0\xe9O\xd1\xc8\xc8\x85\xa7W\xd0\xa6\xca\x1e!!\xc3\xd1\xad\x19\x87\xfc\xe7\xd3B\x16\".\xe1u8p\xa0w?\xb1t\xa1n(\xb6w\xce\xb4\xefYF\xe9\xb0\x91\xfd\xd6Q\x03qN\x98\x00\xd3\x15\x97\xb9\x7f\xc39^\x1b\x97;\xf9\xf3o.\xba\x077\xbd\xb8 \xcb\x08i\x99k\xcf\xf9-[\xc2:\xa5\xb1-\xca\xcfu\xfb\xd3\xbb\x8fY\xf9\x9c\xbf\xd3\x8ec\x96\x93\xd8\xe4 nk\x07\xd0tO+\xdb\x90\xdb\xfd\x8a\xef\xea\xe2Dc\xf2\xa7a\xca\x9a\xc3l\xaaI\xe73\xc7\x0e\x99\xbe\xf1yBg\xe6/\xb9\xf4y\xd8\x7f\xd8\xbe\xef%\xa2u6\x02x\xd9}@\x17\xf6r+.\xcd\x9f\xdb\xebAX\xb6\xf1?\xf8\xbf\xce\x8d\xd9|\x16\xb7U\xfd\x941\xe3\x92H\xd9\x0b#k-\xd2_JN\xed\xa6\xe0!k7\xf8k\xe4mG\x81\x0e\xcd3R\x94K/\x94O7\xbc\x05\xdc\xde\x06\x00\x1ek\xdc\x15\x07\x16$,\x01\xfb\x91\x12\xdfc\xc9\xd4ih\xd81\x94|\xc4\x18\xda\xc7&8\x13\x8bvM3\x8e}\xb2\xd1\xe7\xa6\xbcy45\xadV\xce\x1d\x02{\xcc\xe6\x95\xc4@\x01b\x07e\xf3\x8e\xdbu\xff \x13[k\x08\xcd\xf55\xcau4\xbd\x14\x0e\x02\xec\x11\x07\x03\"\x0fBp1\x10\xcd\xd2\xe0t\x84Sk\x86Rc\x8e\x9d\xa7\xc3\x08\xe5\x86\x18\x9b\x05g:\xe5y\xca*\xba\xc7E\xf7\x0f=\xf4\xb9\x14\xc65&N\xf0\x01a\xf6\xd9\x0bq\xb5\xa8\xcf\xba\xda\x92M$\xe5>'\xd6\xc5\x899?u\xdb\x96l\x9d>\xb9\xe9\xf3\x97gJ\x08\xf0\xdbP\xeb\x10v\xc4\xbc\x82=\x7f\x1c\x1e\xf5Z5\xa0\x18\xeb+ \x0b\xd38\xd9q-\xd85\x88\x02\x9b\xb91\x14\xf4\xe1\xcfM>\x13\x03\xe0\xd0-\x8e\xf6\xba\x97\xe1 t\x18_\xcd\xb92\xfd\xc5\xdd\x16\xe4I\x19\xddf]\\\x8e\x15q\x80\xda\xf8;\xf5]|\xcc\x8a2W\xc9\xa1\x8f\x85=\x13tg\x85\xb9A\x04O&\x952\x0c\xdb=\xdcb\x12\xf4}\x94\xea&\x07R\xa7\xfb\xb1w\xf2\xab\xbe\x98CY\xcc\xc1\x98\xa8G\xbf\x1c\x9e\x05\xcc \x03%\x929\x9c\x96s8\xad\xe6pZ\xcf9/\x99)\xc5\x84\xc5 \xdc0\xde\xd7(X\xe3\xef;f\x0b\x8b\x1ecn fG8d\xcd\x87\xfc\xc2\x17h<\x89 \xd9\xbc\x92\xbd\xccT6\xb5 \xdb\xb8\x10>\x83\xe8\xf2\x94]\xf3h\x1a\x06\x86\xf7\xc4\xb1$K\xf0\x07\xbct1\x05\x14!\xe6\xc3\x00\x9c&\xadD\xcf\xa8\xb11C\x92\xe19+\xa7\xa5\xe6\xfe\x15\x06\n\xce\x061\x1e\x9b\x04h\xfc\x16\xc4\xbd\xc5U\x11\xf5\x82M\n\xc0f\xe9\xebs=\x8e\x94\xb0IIE\xde\xc2\xaf\x98T{Y(\xfa\x8d\xa1%\xf8\xbf\xee\xfa\x8c\x87\xd76;\xd7\xfeCFb\xa0j\xd5\xef\xb6\xbb\xa7\xe3b=&\x91\xd4\xcd8|\x82$\xa8\xc1\xf8\x01\x95\xb4\x85\x11\xea\xd4\x0d\xf6Fq\x8b\x91l\xbe\xdd^\x96=\xb7\xa7\xe8\xa9\xbd\x0c:\x85\xe9\xc2H2(\xa4\x98\xcaiT\xcct\xeb\xaa8T\x17\xe7\x04\x96s\xbd\x00W\x9bWM\x9b\xd6,\xdf\xf9r\\\xb9 \xa4XC\x87\xde\xcb\xc0\xd6\x9c\xb0\xcfp\xfa \xdc#j\x85a].)\xb5\x97\xcc\x01,\x13\x15\xecW\x82ES\xfd5\xe7o\xc7\xad\xe9o\x08]\xb8\xb6\x80#\xfa\x91\xe5\x9f\xf1M\xeeE&\x0d\xe6\xa3\xff#\xa1\xa2\xc3R-\xa9\xbb\xc1f\x92\x860\xa8w\xe8v\x8f|Gk\xe2\xd1\x12\x87&\xe6MS1G\xa9t\x87\x13\x08\xca\xd0\x92\xf5~\x07~\xb5:\x1e\xf3MxD\x06\xfa\x183 N\xe3.6\xe2]\xe6\xae\x97\xc1\xa4xDP\x9cz\x86\xf7KE\x18\x88\xd2\x00\x87m\xfd\x15\x98\xcby\x0f\n\xd8sJi\x89PX\xe2\x89]\xdd\xea\xf6\xbd\x82Alb\xab\xaa\xa0\x134\x92Q_\xc1o\x98C\xa99\x13`\xa7\xbe\xaa\xe7\xca\xa6\x81V\xca$?\xfb\x10>\x9d@\x11)\x08\xff\xd7\x1a\xc9\xbf\xdb/\xde\xc0\xfd\xd7\xf07\x93\xcd\x1d\xda\xa6\xd8\x7f\x80\xaf\xef\xa5\x0f\xba;\xaaO\x8a\xbbt%\xe2\xc1\x14-\xa5\x0c\xc5\xb4\xd7\xd3\xc2\xbb\x84\x9d!\x14\x10\x0f\xa8\x80\xac\x9c\xeb\x10{K@\xc3n\xff\xf0\xca\x05\x91\xcbh\xd6\xf5\xd8\xca\x081\xff\xefP\xe6Co\x16\xb0Yo\x85 \xed\xbd\xb9}\xf5\xfa\xed\xfb\xd7g3,\xe0\x1d\x96\xcb)\xea\xc5h\xf7\xce\x84\xb7\x84\x15\x08\xd5aG\x8bM?\x883\x8fQ\x11\xa5\x07q\x18\x06\xc4\xd3\xb7\xd2\xfb,4\xbe\x87_\xfeW\xe0\xeb\xef_\xfc\xb9\xf7\xe7\x17g!g~\xe4\x9d \x00\x1e$p\x8a\x83\x1b\xe6i!\xb9 \xcd\xeb\xc4\xfe\xdc\xe7p\xf2\x99'\xba \xcc=\x05\xcfY\x88\xe5R\xcb\x8c\x91\xf3\x89\xdf[\x0f{\x7f\x10\xff_\x06\xfd\x05\xc4\xd3\x89\x90\x88V+\xcc\xb7S\xf4\x13Ho\x89\x02,A\xc8D\x07\x10\x9b#\x8cnno\xd2!h\x8d\xc1hA\xd6@\xd5\x81X\n\x0b\x81\xeb\xd1\xdd\xfaStC\xfc\x1b\xe6\xc5G8\x88\x90Qa\x802\xed\xc5\xb0\xdf\x7f\xb1\xfb\xe7\xde\xad_#\x11y\x1e\x081\x8f\x82\xf4\xean\xe6l=\xad8{=Br\x1b\xc2\x14\xb1\xd9g\xf0d\xee@\xc8\xd5\xd0$\xc9\xf6o\xda\x1a\x07\x11\xec\x7f\x99.\xca\x1f;\x07G\x10z\x9f\x1b\x18\x0b\"\x19c$\x97\x90G\x89\x83\x8c8\x15\xea@\x81\x9c9\x0b\x02\xb6!t1=+8\xdaA>\xf1?\xf9\xccCD\x0b(\x98\x93\xfd\xfe\x8a\xc5\xac@b\x1fK\xac\xe4\xc4\xa2r\x83L\x8fc!\x98G\xb0\x04\x1fm\x88\\\x96\x8c\xdaa\x18\xfb\x97\x94N\x0b\xaa\x9c\x1a\xd5|\xadDEG\xf6\xf4\xc5\x9ch\xee\xa8\xe0.\xbb\x85\x12*\x07\x86\xac\x83SM\x99Ex\x90e\x87\x93>0\xe7x[z\x0e\x91\xb0*\xed\x01\xa5B\x84\xe4\x84.\xca{\xaa\xd0\xd9\xa4\xc5\xc3U\x10a\x14\x10!\xd5\x04~\xbc\xbb\x15(\x12\xe0#\xc9\x10\xf1\x81J2\xdfj\x08\xe3\xd3+\x04f\xe6\xdfO\xb1\xae8\xff\x06\xe68\n\xe4\xcepm6\x9b\xeef\xd4e|\xd1\xa3\xc2\xd8\xa8A\xc9\xf5\xc4\xb7\xc1\xec\x86\xd0\xffU!D\xfc\xac\xfe\x14\xde^\xf9\xc5?1\xbe\xc2Rk\xe3T\x1b\xdd\xe9\x0fj\x8b\x13!\xf6\xe0\xc7\xe9\x0f\x11%_\"\xe8\xc4\x10\x13\xe0?Vh\x15gA\x00\xdcv\xc7O\xa1X\xb9\x85fU/3\xee\xbc\x86\xdd\xdc\xde(L\xb1D\x98\x03\xc2\xca\xeeim\xb3\x8br\x86\x7f\x0d\x9c\xcc\xe3}\xf6W\x90KfU\x96F\xa0\xab0\x1e\xa6\xd9M\x88iU\xcam\x9a\xd3\\\xc5\xa7:\x98\x02\xd3v\xean\x94\x13\xed\x943Q\xfe,\xb2Vy+\x0d}\xa5 0-^*\xd6\xf3\x9c\x97\xd2\x9f~\xb8\x87m\x87\xf8ek\xca\xb4C5\xf9\xa0`\xb5\xe1Y\x1b\xfaJ\x1b\x13\x9f\xb9\x0d!\x01_\x7f.\xc0;\xc5\xd3&\xec\xf5\x03^\x85\xaa\xe3\xd7\xfep2\x19\\\xfd\x9e\x11\xf2\x0bl\x87\xfda\xbfR\x86\x8b\xc51\xad>\x16\x0ej\x987\x1c{\xd67s\xd0|c\x15W\x08\xa1\xf5\xaa\xc6U\xd2]\x13\xb1\x04Np`\xeb\xfbQ\xb0\xcf\x0e\xe4\xd3*\x1eI2\x0da4\x0b\x88\x87\xeea\xfb\xb8\xd8\xbfb\xab\x15\xa3\xc1\xd6\xf8!y\x19\xc9\x90\xd4\xdd[\xac\xa8jf\xc8\x7f\xdb\xdc\xbf\x8c?\xfe\x02\xdb\xbf`\x01\x93\xcb\xcc\x17\xbfF\x81$*\\\xac\xb2\xf0N\x10\xfe~`Q\x90\x0fsBAm\x80\x05`\xbcDXT\n4W\xfb\x88\xd0t!\xbcb\x1c\x90\x08\xc1K\x85Y \xcd\xc5\x8a\xd5\x90\x158b\x1f\xee\x94#\xd6\xf1\x18\x87\xde\x9f\xb2\xb7\xd01\xb7P>~wW\xe1\xd0\x10\xe7]\x86\x02\xe4\xaa`\xd3\xce\x85\x87)\x9aA\xe2\xcaV!\xa4\xa5o\x11F>Y\x10\x89\x03$\xc8\x82b\x19q@\x8c#\x8foC\xc9\x16\x1c\x87K\xe2\xa9\x1d\x9c\xcd\xcb,0\x8e\xe4R\xadw\xcf\x82t\x83.Gc\xdeZ~\xecv\xf85\xc8\x15\xf2\xdc\xe1\xcf\xf4\x0c\x08\xef\x0c\xbe\x88\xb4;U\n\xb6\x10\xca\x95zR\x07\xaf9\xb4\xf3\x83\x7fR\xb8u\xd7HH,AY\x05Q\x03s\x0f\x87xF\x02\"\xb7\xb7t\xcd\xbeE5/\xba\x03;\xfa\xcd\xd9\x1aB\xd7\xec\x1ev\xc3 p\x1c\xfe7\x10\xc0\xe2\x9b\xc6\x7fw\x07O\x89\xbfoz=z\x06\xeea{\xbd\xe0\xa0W\xce\xb7\x85|v\xe4v\xc4\xeb\xd9\x1b\x14\x02\x9f3\xbe\xaaB^y\x8d8\x1d\x80;\xe2\x02\xf8\x9ax\x15QY\x83`\x7f\x07\x01|\x0c\xa7\x83\x17\xdex\x04\xf4\xa7\x1f\xe2\xce\xad\x81y|\xde\xb3\x8b\xc6S\xf0l\x02\xd2\x08\xfc\x0d\xa1\xf7\xe0\xdf\x81`\x11\xf7\xaa\xe3\xa5X\xf8\xeb\xb8\x12\xe7v\xe3\xd5jo\x9aU\xf9M{\x14$\xf7n*\x015)7\x1e\x0fl\x12\xa9\x80\xf9B\x17\x05\x13\xa9U\xeb\xdci-\xbd7\xc3\xc9\xc4n\xf1\x00U\xbcV\x10\x93U\n\xfb\x9a\xf1Z<\xec&b\xb4XT~\xebH\xe4\x17n\xc3\xe5\xb2\x08\x95\xc0\xb1'\xd3\xda\x92\xcbF\x80\x03\xc1~\xa1lC\xaf+\x94\xd9eUX\xd7\x83\xd3JpG.3\xf0\xaaL\xf8\xbd:Em\xa6\x1c\xe6\xc0\xab\x86\xc7\xcc\x9a\xc1+\x07\xdcl\no*\xb3\x19M\xcfV\xcaJ\xd4]\xabt\x89<7E\xcf\xab\xb8M\x8d\x0b\x84$\x85\xca\xe2i,\xab\x06\xfe\x9a)\x7f\x96\xd6>\x1f\xaf<\xc8\x01K\xb0F\xaa\x16\xbd\x9b'e%,\xa1#\xc9\xaa|S\xb1M=\xda\x8d)\xdd\xec\xc8\n\x84\xc4\xab0M\xb7\xaa\xe3\xf9\xdan\x85\xb4\x1b\x97\xaa_R\x17\xbb\xfb\xe9\xd5h4\xba\xaa:5\xb5\xf6\xc3\xfep\xd0\xe9\x8f:\x83\xfe\x87\xc1d:8\x9f\x0e.\xfeYr]\x14\xfa\xcf\x0e\xe5xL\xa5(\x07X\xc8\xf8\xa4o\x07h\x1f\xb0'\xc9\xda\x05\xec\x19c\x01\xe0\xf2\x82\x91\x0b\x86\x99\xee\x8c\x15\x9d\x07xa\xac'\xa1\xbe\xce\x1e \xb4Y\x82\\\x02\xaf\x81\xa0\x92\x95\x11\xedV\xaf\x9e\xe3\xa04Y\x1c\x93!n\xad\xa0\xb8\xd5\xa7myS\xd5\xd7\xa7\x9d\xdf\x9fP1\x0e\x1d\x7f78\x9c\x14\xea\xe3\xc7\xdb\x1b'm\x1a\x0cG0\x9e\x9c_t\xe0\xf2j\xd6\x19\x0c\xfdQ\x07\x8f'\xe7\x9d\xf1\xf0\xfc|2\x19\x8f\xfb\xfd~Y%\x8a\xc2\x83\xfc\xfd \xa1T\xfd}\xaa\x83'\xad\xe6BTpb\x9e\x0d\xc6!\x875a\x91xJ\x9c\x93>\xeb`\xed \xee\x1b\xc0\xdb\x86N\xea\x9c$\xbeX\xa1wR\xe0\x92\x95\xc8\xabY+r\x8a:l\xf1\x86\xfa\x94\x903:\xc9\x90;;\xd7\xe8@\xac\xdd\x8b6\x0e\xea\xdf\x89\\\x1e\x00\xb4\xc7C\xd4\xc1D\x16\xa7\x02i\xc7\xd7\xd3^1*1\xa1\x87\x8e\xa3\x9e\x91\x0d\x04\x81\xfa\xeb\xe0Q\x96\xe9\xc1\x7fG\xc0\xb7\xe6n\xefb\x8ec\xb22\x12\xce\xa3IF\xcc\x99\xd9\xe0\xf4\x05\xbd\x1c\xb52i&\x8b\x97~\xe9\xc7\x1bW\xe6\xac<\xc1\x92\xa2\x88\xc2C\x08\x9e\xda]\x81s\xc6\x1f\x93g\xa9;8T\xb1\n\x1b\xe31\xbf\x88\x98\xa9/P\xc1\xe4\xa2 `J\\8B\xe5hx\x80\x8f\x10xQ*\xb2p\x0c>HL\x82\x02\xef\xbe*\xe6,\x8d5-\xf1\x84-\x9aP\x97\x7f\xe4\xa5\x1c\x01\xab\xb9.\xa1\xba\x9af\xbdz\x07\xeel+\x13\xfb\x13b\x8eW \x81g\x86\xdc\x89Y\xdd\xc4/S\xbd\xbd\x1c\x92Z?\xa5\xb9\xcb\xdc\xe2\x92\x0c\xcdAz\xcb\xfc\xe2Rf\xbc#\xe46\x00\x13]g\x96\xe6-\xf5\xb7\xbbC:\xe4\x16Q\x182~\xe8\xf6\xd5\xa7\xee\xe5.\x8f\xf7\x8a\xbd\xa9\xebd\xc4\xad0\xa1\x14\xe4\xd4\xbb\x1c\xce\x87\xb3\xfe\xb03\xf3\xf1\xac3\xf6\xfd\x8b\xce\xecr4\xea\x8c`0\x1e]\x8c'\xfe\xf9`X*D\x82\x90J\xc8\xe6\xaf?\xbf\xfe\x1f\xfe\xcf\xf5\xdf\x1e\xee.\xd7\x9b\xc9\xbb\xd1\xc7\xbf\xff<\xf8\x9c\xb9\x8c\xd0)\n\xb1\\f\xbe\xe2\xf0%\"\x1c\xfc)\x92<\xca\xee \x05s/\xf1\"7\xa5\n\xbd\x15\xf3\xa3\x00\xd0\x97\x08\xb81\xeb\x87\xbc\xf2^\xbc%\xf7\xfe\x88?X\x99\xe6\x89\x11n\x82k\x1e\xfb4g\xc9\xed\xb6\x94\xf3\xfdV\x93r\xae4\x06\x844\x84\x9c\xe3Y\xe7\x85\x1b\xa4#\xdd\xdcm\x08\xfbWUZ\xda\x96q\xdeT>\xd4\xe6\xde\xa2\x96q\xeeP5i\x19\xe7\x07\xcd\x1e\"$\xade\x9c\x1f4\xbb 1\xed\xf9\x16\xac[\xc6\xf9\x11\xd0;Tfe\xcb8O[\xcb8o\x19\xe7-\xe3\xdc\xb4\xe33d\xbb\xe6\x94K4\xcd\x96Ql\x19\xe7-\xe3\xfc\x18Jb\xcb8\xcf\xb7\x96q\x1e\xb7\xa7\x06\xbee\x9c\xe7\xdb\xd7\xc3\xbfe\x9c?-\xf2-\xe3\xdc\x0e\xf6w\x10\xc0\xb7\x8c\xf3\x13\xa2\xf1\xfa\xc4\xe8\x96q\xde2\xce\xbfb\xbc\xd62\xce\x0b\x9au=8\xad\x04w\xe4Z\xc6\xf9Ak\x19\xe7E\xcdI\xef\x9a\xe5B\xb7\x8c\xf3\xe2\xd6,\xca-\xe3\xbce\x9cg\x9a\x93\x06\xba`R\x83\xb5\xeb\x08\x87\x93B=>;\xb7e\x9c?\x05\xc6-\xe3\xfc)\xf1\xb6\xa1\xd32\xce[\xc6\xf96G\x97t\"\x9e\x17I\xe9\xe5\xc4\xb4\xfc\xf3\x96\x7f\xde\xf2\xcf[\xfey\xdcN\xe4\x9f\xef\xa6q\x9d#u#\xcb\\~4\xf3X\xe9\xa0\xda\xe6\xf3nG\xa1N,v5\xfd\xb8d&\x7f\x88\"\xe2\x17O\xd3\x14]\x8d\xe6\xc3\xc9\xc5\xc8\xeb\x80\x87\xaf:\xe3\xfe\xd5e\xe7\xea\xdc\x9bu\xf0\x00\xbc\xf3\x8bs<\xbc\x02\xbf98O\xa4\xf3\xc7\xd7V\xbc/>\xce5\xe1 H\x80\x12q\xee)EI\xb8\x10\xf9\xaf\x83 \xb7\xab\x88d;>Kn\xfa\xb9\x92\xfasHe\xdb\xd70\xd5\x96$P\x0dckKM\xd8\xfc\xcdf\x93?\x0e\xce\xb6s>\xa2~6\xc2\x92\xf4yRT\x1bN\xf6|]`\x1d\x92<.)\x1e;j\x8d\xa6w\xea'w\x1cR;\xd6\xc4\x8e\x83\x96\xd9q\xa8\x11\x16;A\xe0\xa06\xd5\xa1\xef\xe9\x81\xafS*\xa7\x11\xf0\x9aM\xe2\xb8\xfb\x15\xd9\xf6T\xa8:'o\x1aA\xb6\xd1\xb4\xcd\x89I\x9b\xa7A\xb8\x1a\x93f\x9355\xd2\x10N\x89\x9a\xc6\xd34U`\xa4^e\xac\x0fe\x1e\xa7\xcc=\xb6Xl\xbbJ\x1e\x1b\x0c\xf1\x82\xd0\x92\xfb\xcd\xf9\x94\xbb\x13\xd3\x89Q\xddf\xbe\x8e\x13?E\xfe\xa6i\x95\xfe]\xb5w\xa7\xac\xc9/\xb0-\x8f\xd1+\x97aA\x10\x9doU\xd1\xd5\xaei\x1bx\x0f\xdbd:\xd4G\xc9\xd0L\xa1 b\xba\xd6;\xbc\x80;3\x15]s\xbcD\x98\nA\xb6\xa9\xa5T8\x02Z1!\x11\xcc\xe7\xc4#@e\xb0\xed\xa2[\x896$\x08T\x1f\xb0\n\xe5\x16\x91y\x99\xa1Y\x02\x07\x1dlS\x86VJ\xe39\x88(\x90\xa2\xa8\xe8*\x99,{\n\xc2\x19\xcc\x88Py>.\x96a1z\xba{\x8d\xa2\xfe@\xa3\xd5\xcc\x98\xb6x\xc8\x08\xaf1 \xf0,\x80\xf2\xfb\xcd\x02\xed\xb1\x88\xcaOZX\x99\xd5\xda`\x81\x04\xc8\x97\x88Ha\x922\xaa\xff\x88&&\x84)\xfc6d\xcfA\xa9L(\x96\x86m\xd6\xe4\xe2\x9e4\x99\xbe\xe3\xa2Td\x9bhl\x13\x8d\xdfK\xa21\xf5]\x8a\x93\xfcm\xe6\xf113\x8f\xbb\xfd\\m_\x8es\x1c\xef\x8986\xac\xe6u\x0c\xc6/3f:6<\xe9\x06\xaaw\xcd\x05\xc9\xc7\xb4zG$ta\xdd\x14\x7f\xa3\xc1\x161\xaac|6\x9f\x0b\x90\x88q\x94\x1f.Bb\xc9\xa2\xc0W;\xa7\x80\x1c\x83Ka\xa5\xfb*\x04k?J-Y:\x85.E\x01\x88f|e8\xeem,\xf1\xcdh(i\xb4\x02N\xbc\xe4\xbb\x03\x16\xe0f 4\x01>\xa2\xe9\x86\xb9\xa7\xe6\xb7ZZ\x00B\xec T\xb2(\x8a\x84\x82\xfa\x1ej\xe2\x99\x17\xff\xc8\xe0\xee\xb9\x18\x05\xf0\x06dE\\\xd1\xd5\xe7\xa6\xb9\xa3\x12\xcf\xc3\xf8sY\x0d\x8ew\xf0(\xd8\xdb\x0c\xf1\xe2\x00\xec9\n`.\x13O-v\xdd\xe2\xadZIN\x16\x88\xe9D\xe1<\xdb\"\xc0\xde\x12\xe10\xfc\x8a(j\xff\xe9\x83v\x9fv\x97WA\x99q\xb8\x14\xa0ZA\x99\xb63\x9aC\x99\xa4\x95\x8c\xd6\xee\x00\xd4'\xc6z\x94\x15G\xa8\x17D>\xe4\xd1\xc4\xa6\x97d\xab\xd8\x9f0\xbd\x0fg\x1c\xc59\xe3\xf9`$'\xec\xe3\xad\xd8\x9b\xac\xbd[\xd0\x0f\xc5*\x0f\xc9xLzu\xed\x96\xa3Zq\xddx1\x91\x05e\x1c\xf27\x90,\xc6|\x17\x06\x99S\xe7u?\xfdW0\x7f\x1c\xd4\x96 \x8e\x93\x17\x9f\xbd?q$\xe3~s(^\x0899\xaa\x0f\xa0\xbe2#\x8c\xfb\xc0\xbbg\xf9\xdb\x7fO\xa8\x07S\xe41\xb1b\xa2#\xfc{\xd4\xef\x8eG\x8d\xa2Q\xa7\xc4\xc3\xe3'\x05t\x9d\xc7cA\x00\x9e)\xc0\xfc\xab\x97\xa7\xbc\x96W|\xd2\xd7\xf8\xe8\xa2N`\xdeK\xa4d\n\x85\x8fR\xd8Dj|}\xae\xcc\xf3*=\x9a<\xb4\x90d\x03\x9em\x81'\xbd\xbf\xe7\xe1#gg\xed\x04W\xd7-\xda/s\xf2\xb2\xad\x83j\xbbw\xf9\xcb\xad\x8e]\xb6\xd9\xc2\xea,@\x99,b\xf6\x0d\x0f\xc9\xe1\xd42\x97\x8aJt\x14\xcd `t\xa1v\xc6.\xba\x89\xa3e/P\x8eDG\x10\xbf\xeaq\xa7\x0fK\"\xd0\x9c@`\x7fvJ-\xdc@?\xd0S\xf5x\x83T\x02\xd3'~JO\xdb\xd5\xa2\xdd^\x15Q\xfeH\x99\x832\xd9'\xa5h&\x92\x9b8\x0dR\\\x00\xa8\xe1.)\xdb\x1e'\xd1\xaa0\xa6E\x9c$\x1b\xc7\xc7\xbb\xdb\x1af\xda\xb4\x9d\xf7b9\xd16\x8e\xc3t\xd4\xaf\x9f\xff\xf1\xf0\xf6\x7f\xff\xf1K\xf27\xf5\xadEo|\xde\xef\x03\x1eM:\x97W\x83\xf3\xce\x18{\xe3\xcel<\x18v&\x93\xd9\xe5||\xe5\xfbW\xe3\x8a\x9d\xdb4\xdb\x80\x92\x1a\x9c~+\xe8\x1ax\xb7\xab\x87\xd7\xa5 {\x83n\xbf\xb7\xdb\x0d\xf5\x9b\x0e\x9fx\xf0\xc5\xcf\xcf\xc6\x9f?\x0bF\xad\x12\x1co\x7f\x81%l\xf0\xb6K\xc2\xb9\xe8\x12\xd6S\x7f{3<\xdf\xce\x80,A~\x1e\xd2\xc5\xc8\xbf\x18\xdf_\xc8\x8b\xc9\x18\xcb\xf5PL\xfc\xfb\x8b\xf3\xd0\xfb\"\xd7\x0f\x818\xf7\xa9\x84\xf9\xe8\x01\x9fs\xfc0\x9c<\xd8\xef\xccr\\\xf5?\xed\x9d4\x82r\xe1Y\x9f\xfdi\x97a\xa6\xe7\xc2\x1d1{\xdc\xfaP\x85j\x1f\xefn\xeb\x1am\xd3\xdcW\xb4Z\xb3\x9d\x88\x13\xfb\x89J\x99\xdc\xceT\xd3\xab\xcf,;\xc5\xfe\xc0A\xd2\xae\x03 \x9cbI\xd6\xf0\x91\x93\xf8e\x95\xe9W\xe6E\xa9\xfb \xcf\nq\x92!\xac\xa3aw\x03\xf9\x97m\x92\x97{\x89\xb0D\x01`!\xd3@DY[\xf8\x12\x915\x0e M@U\x08\xcb\xec\xc6(da\x14\x18FT\xf1\xc99\x94\xde\xa4\x05\xfd\xbd\xbbO\xfc\xd8\xf7\xd7\xbf\xbe\xce\xdcQ\x91@\xbdS?\xba\x0f\xa3{I\x1d\x98\xdb\xeb\xb7\xd7\x19\x17\xa14\xaa)\x15\x17\x80\xbf\x00nS\xfb\xd4\xbf\xc0a\x18\xc4\xd4\x8d\x9e2\xa1/\x11Y\xe1\x05\xf4\xc2\x92;z\xe6TP\xa5r\x9b%\xf1\x96ygn\x83Erv\xf9\xeb\x1a\x12\xc3\xe1\x86\xe0\xb1\xfcE\xf5\xdf\x87~\x7f\xaa\xff+\xe6/zK\xf0\xeeE\xb4:\x01d\x07\xf0\xe2N\x8c\xe5}\xff\xf3ug89\xdf}\xbb\xc4by\xe8\x18\x95 \xab\x07]\x82H\xb9\xbd\x1b\x8cq\x7fx\xe9\x0d\xf1\x08\x0fg\xde\xd5\xf8\xe2|\xd0\x1f\xcef\xc3\xcb\xcb\xe1h\xec\x8d\x07\x13<\x9c\xf5\x07\xf3\xcb\xe1%\xe0\xf3!\xf6&\xb3\x11\x8c\x87\xc5\x84\x86g\xc39\xdb\xe5(\n\xb8d\xa5\x02\x8bs\x1an@'\x11\xc9\x0c\x0b\xf0\x11\xa39a/\x84 \xec1\xf5\xf3AS\xf9P\x18\xf2A\x02_\x11\n)\xad\x95\xc8\x17b\x17\xee8l\x11.\xa9\x8e\xafM\xbe\xdcM\x95\xae\x96\xe6\xf39\xa5\xc2\xbe\xafi\x8a\xc1My4B2\x1eS\xd7\xd2l~\xf2\xeb\x0b\x1d\xf3J!T\xfaN\xa1XX&\xeb\x9f\xc4\xcd \xf7.\x93a5EE\x83\xc4*\xff@G\xd2Z\xf2\x1drN\xc7\xb7\xe4;\xd4\x92\xeft\xd3T\xb9\x82b\x9a\x95vW`\x16\x0d\xed\xae@\x18\xba{\xf7\xaa%\xdd\xb5\xa4\xbbgE\xba\xcb\xd6?\xcb\x94\xf0\x80\xa9\xb1W\x11\xc4\x85\x8f\xbbd~\xd6%\x9b\x08\xce\x89\xca\x14\x02\xf3\x0b\xbd\xaa\xde\x96?\xb3$\x83\xe1XF\xdd\xbb\xc6Z;mIq-)\xae%\xc5\xb5\xa4\xb8\xe3PlIq-)\xee\xdf\x82\x14\x97\xc6\xe3G0\xe3v\xb5\xb1?\x88o\xfd]C\x15\xe2\xf6B\xbc\x0d\x18\xf6\xe3\x17\x1f\xa4?u\x98\xc6\xc2\xff\xb1!r\xc9\xa2\xdd\xa3|\xff\x19\x0b\xcb\x91\xe5\xf6b\xf0g\xcf\x90+\xf0g+\xe2\xb0\xca\x9f6L\x91\xca\xfc\xac\xa1\xf5G\x0cy\xa6\x06\x91OI\xa4\xbe\\\xe1u\xab\xbd\xf7v\x1e\xa4,j\xffda\xa1\xef\x88l\xbez\xb5\xa7^\x8e2\xb2 FV\xe1\xaa\x95\xbf\xf0\x14\xb9y\xf2\x0ey\x0e\xb4S\nu\xce.{\x847(\xc9Cesj\xc5\xf7j\x04\xa4k:\x93\xcf\xd2\xbf\"H\xa5p\xcfg\xd9^\xf6\xda\x00\xb0.\x94MG\x80\xdd\xf2D\xc8\x89\xb8\xe9\x1csT \xb0\x06 \xf9fK\xcc\xa0f \x9c\x8dP8\x8f$qV\xc8\xd3\xafXv\xa2q\xd6'r6\xf7\xdb\x95\x95\x93\xd4$\xa1\xb3YJ\xe71\xa4N\x87$:\xb2\x10;\x1b\xc4\xb6&\xbd\xb3BR\xddyh\x84\xe2\xd9\x0c\xc9\xd3J\xf3l\x10\xf0F\xc9\x9e\xc7\xd3=\x8f&|\xd6\xa2|\xba\x91>\x1bD\xb7Y\xea\xe7\xc9\xe4\xcff\xe9\x9f'\x12@\x9d(\xa0\xd5y\xe1\xa49\xfe\xee@c?Bc%\x83:\xaaP|\xaa\x83\"\x99v\"%\xb4\x06\x85\xccN\xf7\xfb\n\xc4P\x97A=krh\x13\xf4\xd0: <5E\xd4el\x8fJ\x13\xadA\x14}\xa4%Z\x8f.j\x15\x17/\xf5\xfa\x86\xde\xb4:\xeb\xdd\x954Z\x876\xeaD\x1c\xadC\x1dm\x9c- controller is a list of DIDs that are allowed to control the DID document. - verification_method: + verificationMethod: type: array items: type: object @@ -84,7 +84,7 @@ paths: Format: did:cheqd::# - verification_method_type: + verificationMethodType: type: string title: |- type is the type of the verification method. @@ -97,7 +97,7 @@ paths: Format: did:cheqd:: - verification_material: + verificationMaterial: type: string title: >- verification_material is the public key of the @@ -125,7 +125,7 @@ paths: can be used to authenticate as the DID subject. - assertion_method: + assertionMethod: type: array items: type: string @@ -134,7 +134,7 @@ paths: can be used to assert statements as the DID subject. - capability_invocation: + capabilityInvocation: type: array items: type: string @@ -143,7 +143,7 @@ paths: that can be used to invoke capabilities as the DID subject. - capability_delegation: + capabilityDelegation: type: array items: type: string @@ -152,7 +152,7 @@ paths: that can be used to delegate capabilities as the DID subject. - key_agreement: + keyAgreement: type: array items: type: string @@ -173,12 +173,12 @@ paths: Format: did:cheqd::# - service_type: + serviceType: type: string title: |- type is the type of the service. Example: LinkedResource - service_endpoint: + serviceEndpoint: type: array items: type: string @@ -194,7 +194,7 @@ paths: description: >- service is a list of services that can be used to interact with the DID subject. - also_known_as: + alsoKnownAs: type: array items: type: string @@ -237,7 +237,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -246,7 +246,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -255,7 +255,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -295,7 +295,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -315,7 +315,7 @@ paths: required: true type: string tags: - - Query + - DID module queries /cheqd/did/v2/{id}/version/{version}: get: summary: Fetch specific version of a DID Document for a given DID @@ -337,7 +337,7 @@ paths: requested version of the DID Document type: object properties: - did_doc: + didDoc: description: didDocument is the DID Document. type: object properties: @@ -362,7 +362,7 @@ paths: description: >- controller is a list of DIDs that are allowed to control the DID document. - verification_method: + verificationMethod: type: array items: type: object @@ -375,7 +375,7 @@ paths: Format: did:cheqd::# - verification_method_type: + verificationMethodType: type: string title: |- type is the type of the verification method. @@ -388,7 +388,7 @@ paths: Format: did:cheqd:: - verification_material: + verificationMaterial: type: string title: >- verification_material is the public key of the @@ -416,7 +416,7 @@ paths: can be used to authenticate as the DID subject. - assertion_method: + assertionMethod: type: array items: type: string @@ -425,7 +425,7 @@ paths: can be used to assert statements as the DID subject. - capability_invocation: + capabilityInvocation: type: array items: type: string @@ -434,7 +434,7 @@ paths: that can be used to invoke capabilities as the DID subject. - capability_delegation: + capabilityDelegation: type: array items: type: string @@ -443,7 +443,7 @@ paths: that can be used to delegate capabilities as the DID subject. - key_agreement: + keyAgreement: type: array items: type: string @@ -464,12 +464,12 @@ paths: Format: did:cheqd::# - service_type: + serviceType: type: string title: |- type is the type of the service. Example: LinkedResource - service_endpoint: + serviceEndpoint: type: array items: type: string @@ -485,7 +485,7 @@ paths: description: >- service is a list of services that can be used to interact with the DID subject. - also_known_as: + alsoKnownAs: type: array items: type: string @@ -528,7 +528,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -537,7 +537,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -546,7 +546,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -586,7 +586,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -617,7 +617,7 @@ paths: required: true type: string tags: - - Query + - DID module queries /cheqd/did/v2/{id}/versions: get: summary: Fetch list of all versions of DID Documents for a given DID @@ -660,7 +660,7 @@ paths: Document is deactivated. Default: false - version_id: + versionId: type: string title: >- version_id is the version identifier of the DID @@ -669,7 +669,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - next_version_id: + nextVersionId: type: string title: >- next_version_id is the version identifier of the next @@ -678,7 +678,7 @@ paths: Format: UUID Example: 123e4567-e89b-12d3-a456-426655440000 - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the version identifier of the @@ -700,7 +700,7 @@ paths: description: pagination defines the pagination in the response. type: object properties: - next_key: + nextKey: type: string format: byte description: |- @@ -735,7 +735,7 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string @@ -785,7 +785,7 @@ paths: required: false type: string format: uint64 - - name: pagination.count_total + - name: pagination.countTotal description: >- count_total is set to true to indicate that the result set should include @@ -811,10 +811,10 @@ paths: required: false type: boolean tags: - - Query - /cheqd/resource/v2/{collection_id}/metadata: + - DID module queries + /cheqd/resource/v2/{collectionId}/metadata: get: - summary: Fetch all resource metadata from a collection with a given collection_id + summary: Fetch metadata for all resources in a collection operationId: CollectionResources responses: '200': @@ -827,14 +827,20 @@ paths: items: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -862,7 +868,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what @@ -871,7 +877,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -916,7 +922,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -941,7 +947,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version of @@ -951,7 +957,7 @@ paths: to determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -963,6 +969,25 @@ paths: Format: title: Metadata stores the metadata of a DID-Linked Resource title: resources is the requested collection of resource metadata + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + nextKey: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise title: >- QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method @@ -983,13 +1008,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1005,11 +1030,67 @@ paths: in: path required: true type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.countTotal + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean tags: - - Query - /cheqd/resource/v2/{collection_id}/resources/{id}: + - Resource module queries + /cheqd/resource/v2/{collectionId}/resources/{id}: get: - summary: Fetch a resource from a collection with a given collection_id and id + summary: Fetch data/payload for a specific resource (without metadata) operationId: Resource responses: '200': @@ -1038,14 +1119,20 @@ paths: metadata: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -1073,7 +1160,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what @@ -1082,7 +1169,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -1127,7 +1214,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -1152,7 +1239,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version @@ -1162,7 +1249,7 @@ paths: to determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -1193,13 +1280,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1223,12 +1310,10 @@ paths: required: true type: string tags: - - Query - /cheqd/resource/v2/{collection_id}/resources/{id}/metadata: + - Resource module queries + /cheqd/resource/v2/{collectionId}/resources/{id}/metadata: get: - summary: >- - Fetch a resource's metadata from a collection with a given collection_id - and id + summary: Fetch only metadata for a specific resource operationId: ResourceMetadata responses: '200': @@ -1239,14 +1324,20 @@ paths: resource: type: object properties: - collection_id: + collectionId: type: string + description: |- + Examples: + - c82f2b02-bdab-4dd7-b833-3e143745d612 + - wGHEXrZvJxR8vw5P3UWH1j title: >- collection_id is the ID of the collection that the Resource belongs to. Defined client-side. This field is the unique identifier of the DID linked to this Resource + + Format: id: type: string title: >- @@ -1274,7 +1365,7 @@ paths: Stored as a string. OPTIONAL. Example: 1.0.0, v2.1.0 - resource_type: + resourceType: type: string title: >- resource_type is a Resource type that identifies what the @@ -1283,7 +1374,7 @@ paths: This is NOT the same as the resource's media type. Example: AnonCredsSchema, StatusList2021 - also_known_as: + alsoKnownAs: type: array items: type: object @@ -1328,7 +1419,7 @@ paths: By default, at least the DID URI equivalent of the Resource is populated. description: List of alternative URIs for the SAME Resource. - media_type: + mediaType: type: string title: >- media_type is IANA media type of the Resource. Defined @@ -1353,7 +1444,7 @@ paths: Example: d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f - previous_version_id: + previousVersionId: type: string title: >- previous_version_id is the ID of the previous version of @@ -1363,7 +1454,7 @@ paths: determine whether it's the same Resource. Format: - next_version_id: + nextVersionId: type: string title: >- next_version_id is the ID of the next version of the @@ -1394,13 +1485,13 @@ paths: items: type: object properties: - type_url: + typeUrl: type: string value: type: string format: byte parameters: - - name: collection_id + - name: collectionId description: >- collection_id is an identifier of the DidDocument the resource belongs to. @@ -1424,4 +1515,4 @@ paths: required: true type: string tags: - - Query + - Resource module queries diff --git a/app/app.go b/app/app.go index fdaecfe17..99c2c6f0d 100644 --- a/app/app.go +++ b/app/app.go @@ -753,11 +753,11 @@ func New( } ctx.Logger().Info("Version map is populated. Running migrations.") - ctx.Logger().Debug(fmt.Sprintf("fromVm: %v", fromVM)) + ctx.Logger().Debug(fmt.Sprintf("Previous version map: %v", fromVM)) // Get current version map newVM := app.mm.GetVersionMap() - ctx.Logger().Debug(fmt.Sprintf("newVM: %v", newVM)) + ctx.Logger().Debug(fmt.Sprintf("Target version map: %v", newVM)) // Set cheqd/DID module to ConsensusVersion fromVM[didtypes.ModuleName] = newVM[didtypes.ModuleName] @@ -860,9 +860,9 @@ func New( } // Run all default migrations - ctx.Logger().Debug(fmt.Sprintf("fromVM (for default RunMigrations): %v", fromVM)) + ctx.Logger().Debug(fmt.Sprintf("Previous version map (for default RunMigrations): %v", fromVM)) toVM, err := app.mm.RunMigrations(ctx, app.configurator, fromVM) - ctx.Logger().Debug(fmt.Sprintf("toVM (version map after RunMigrations): %v", toVM)) + ctx.Logger().Debug(fmt.Sprintf("New version map (after default RunMigrations): %v", toVM)) return toVM, err }) diff --git a/app/migrations/migration_did_simple.go b/app/migrations/migration_did_simple.go index 37a946baa..b3542a3f8 100644 --- a/app/migrations/migration_did_simple.go +++ b/app/migrations/migration_did_simple.go @@ -26,7 +26,7 @@ func MigrateDidSimple(sctx sdk.Context, mctx MigrationContext, apply func(didDoc // Iterate and migrate did docs. We can use single loop for removing old values, migration // and writing new values because there is only one version of each diddoc in the store for _, version := range allDidDocVersions { - // Needs for preventing using variables with the same address + // Needed for preventing using variables with the same address version := version sctx.Logger().Debug("MigrateDidSimple: Starting migration for DIDDoc: " + version.DidDoc.Id) diff --git a/docker/localnet/mainnet-latest.env b/docker/localnet/mainnet-latest.env index 9299e2d07..7853bfb1f 100644 --- a/docker/localnet/mainnet-latest.env +++ b/docker/localnet/mainnet-latest.env @@ -4,6 +4,6 @@ ### REQUIRED: Node/network selection ### ############################################################### # Define cheqd-noded image source. Change if using your own build. -BUILD_IMAGE_VERSION="0.6.9" +BUILD_IMAGE_VERSION="0.6.10" BUILD_IMAGE="ghcr.io/cheqd/cheqd-node:$BUILD_IMAGE_VERSION" diff --git a/package-lock.json b/package-lock.json index 9e6435b2d..3080dd606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -297,14 +297,39 @@ } }, "node_modules/@octokit/types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", - "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.1.1.tgz", + "integrity": "sha512-7tjk+6DyhYAmei8FOEwPfGKc0VE1x56CKPJ+eE44zhDbOyMT+9yan8apfQFxo8oEFsy+0O7PiBtH8w0Yo0Y9Kw==", "dev": true, "dependencies": { "@octokit/openapi-types": "^14.0.0" } }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "dev": true, + "dependencies": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", @@ -388,22 +413,22 @@ } }, "node_modules/@semantic-release/npm": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.1.tgz", - "integrity": "sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", "dev": true, "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "execa": "^5.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "lodash": "^4.17.15", "nerf-dart": "^1.0.0", "normalize-url": "^6.0.0", "npm": "^8.3.0", "rc": "^1.2.8", "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", + "registry-auth-token": "^5.0.0", "semver": "^7.1.2", "tempy": "^1.0.0" }, @@ -414,20 +439,6 @@ "semantic-release": ">=19.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", @@ -787,6 +798,16 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -2106,9 +2127,9 @@ } }, "node_modules/marked": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.5.tgz", - "integrity": "sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -2304,9 +2325,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -5238,6 +5259,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -5407,15 +5434,15 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "dependencies": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=14" } }, "node_modules/require-directory": { diff --git a/proto/buf.gen.swagger.yaml b/proto/buf.gen.swagger.yaml index 0fe01d773..cf7b5e883 100644 --- a/proto/buf.gen.swagger.yaml +++ b/proto/buf.gen.swagger.yaml @@ -7,5 +7,7 @@ plugins: out: ../api/docs opt: - fqn_for_swagger_name=true + - include_package_in_tags=true + - json_names_for_fields=true - logtostderr=true - simple_operation_ids=true diff --git a/proto/buf.lock b/proto/buf.lock index 446ad1fdc..d4fd87e13 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -8,7 +8,7 @@ deps: - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: fe58c1d200724c37a5cbc5f70953f900 + commit: e06e2cfb5db24965bf7460c2d076e11f - remote: buf.build owner: cosmos repository: gogo-proto diff --git a/proto/cheqd/did/v2/diddoc.proto b/proto/cheqd/did/v2/diddoc.proto index 830826f7d..b2a2ed90e 100644 --- a/proto/cheqd/did/v2/diddoc.proto +++ b/proto/cheqd/did/v2/diddoc.proto @@ -61,7 +61,7 @@ message VerificationMethod { // type is the type of the verification method. // Example: Ed25519VerificationKey2020 - string verification_method_type = 2; + string verification_method_type = 2 [(gogoproto.jsontag) = "type,omitempty"]; // controller is the DID of the controller of the verification method. // Format: did:cheqd:: @@ -81,7 +81,7 @@ message Service { // type is the type of the service. // Example: LinkedResource - string service_type = 2; + string service_type = 2 [(gogoproto.jsontag) = "type,omitempty"]; // serviceEndpoint is the endpoint of the service. // Example: https://example.com/endpoint diff --git a/proto/cheqd/resource/v2/query.proto b/proto/cheqd/resource/v2/query.proto index b216cf233..fc511738b 100644 --- a/proto/cheqd/resource/v2/query.proto +++ b/proto/cheqd/resource/v2/query.proto @@ -3,23 +3,25 @@ syntax = "proto3"; package cheqd.resource.v2; import "cheqd/resource/v2/resource.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; // Query defines the gRPC querier service for the resource module service Query { - // Fetch a resource from a collection with a given collection_id and id + // Fetch data/payload for a specific resource (without metadata) rpc Resource(QueryResourceRequest) returns (QueryResourceResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/resources/{id}"; } - // Fetch a resource's metadata from a collection with a given collection_id and id + // Fetch only metadata for a specific resource rpc ResourceMetadata(QueryResourceMetadataRequest) returns (QueryResourceMetadataResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/resources/{id}/metadata"; } - // Fetch all resource metadata from a collection with a given collection_id + // Fetch metadata for all resources in a collection rpc CollectionResources(QueryCollectionResourcesRequest) returns (QueryCollectionResourcesResponse) { option (google.api.http).get = "/cheqd/resource/v2/{collection_id}/metadata"; } @@ -66,7 +68,7 @@ message QueryResourceMetadataRequest { // QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method message QueryResourceMetadataResponse { // resource is the requested resource metadata - Metadata resource = 1; + Metadata resource = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; } // QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method @@ -78,10 +80,16 @@ message QueryCollectionResourcesRequest { // - c82f2b02-bdab-4dd7-b833-3e143745d612 // - wGHEXrZvJxR8vw5P3UWH1j string collection_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; } // QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method message QueryCollectionResourcesResponse { // resources is the requested collection of resource metadata - repeated Metadata resources = 1; + repeated Metadata resources = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/proto/cheqd/resource/v2/resource.proto b/proto/cheqd/resource/v2/resource.proto index e78a90f88..1fba1622e 100644 --- a/proto/cheqd/resource/v2/resource.proto +++ b/proto/cheqd/resource/v2/resource.proto @@ -7,12 +7,6 @@ import "google/protobuf/timestamp.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -message ResourceWithMetadata { - Resource resource = 1; - Metadata metadata = 2; -} - // Resource stores the contents of a DID-Linked Resource message Resource { // bytes is the raw data of the Resource @@ -23,30 +17,41 @@ message Resource { message Metadata { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource - string collection_id = 1; + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + string collection_id = 1 [(gogoproto.jsontag) = "resourceCollectionId"]; // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. // Format: - string id = 2; + string id = 2 [(gogoproto.jsontag) = "resourceId"]; // name is a human-readable name for the Resource. Defined client-side. // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - string name = 3; + string name = 3 [(gogoproto.jsontag) = "resourceName"]; // version is a human-readable semantic version for the Resource. Defined client-side. // Stored as a string. OPTIONAL. // Example: 1.0.0, v2.1.0 - string version = 4; + string version = 4 [ + (gogoproto.jsontag) = "resourceVersion", + (gogoproto.nullable) = true + ]; // resource_type is a Resource type that identifies what the Resource is. Defined client-side. // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - string resource_type = 5; + string resource_type = 5 [(gogoproto.jsontag) = "resourceType"]; // List of alternative URIs for the SAME Resource. - repeated AlternativeUri also_known_as = 6 [(gogoproto.nullable) = true]; + repeated AlternativeUri also_known_as = 6 [ + (gogoproto.jsontag) = "resourceAlternativeUri", + (gogoproto.nullable) = true + ]; // media_type is IANA media type of the Resource. Defined ledger-side. // Example: application/json, image/png @@ -94,3 +99,9 @@ message AlternativeUri { // - ipfs-uri string description = 2; } + +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +message ResourceWithMetadata { + Resource resource = 1 [(gogoproto.jsontag) = "linkedResource"]; + Metadata metadata = 2 [(gogoproto.jsontag) = "linkedResourceMetadata"]; +} diff --git a/proto/cheqd/resource/v2/tx.proto b/proto/cheqd/resource/v2/tx.proto index b5de043ae..4e24cb2a6 100644 --- a/proto/cheqd/resource/v2/tx.proto +++ b/proto/cheqd/resource/v2/tx.proto @@ -4,6 +4,7 @@ package cheqd.resource.v2; import "cheqd/did/v2/tx.proto"; import "cheqd/resource/v2/resource.proto"; +import "gogoproto/gogo.proto"; option go_package = "github.com/cheqd/cheqd-node/x/resource/types"; @@ -29,7 +30,7 @@ message MsgCreateResource { // it will be created. The resource will be created in the resource collection. // // If a resource with the given id, collection_id already exists, an error code 2200 will be returned. -// +// // A new version of the resource in an existing collection will be created, // if a resource in that collection with the same name, resource_type and empty next_version_id exists. // @@ -44,38 +45,44 @@ message MsgCreateResourcePayload { // Examples: // - c82f2b02-bdab-4dd7-b833-3e143745d612 // - wGHEXrZvJxR8vw5P3UWH1j - string collection_id = 2; + string collection_id = 2 [(gogoproto.jsontag) = "resourceCollectionId"]; // id is a unique id of the resource. // Format: - string id = 3; + string id = 3 [(gogoproto.jsontag) = "resourceId"]; // name is a human-readable name of the resource. // Format: // // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - string name = 4; + string name = 4 [(gogoproto.jsontag) = "resourceName"]; // version is a version of the resource. // Format: // Stored as a string. OPTIONAL. // // Example: 1.0.0, v2.1.0 - string version = 5; + string version = 5 [ + (gogoproto.jsontag) = "resourceVersion", + (gogoproto.nullable) = true + ]; // resource_type is a type of the resource. // Format: // // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - string resource_type = 6; + string resource_type = 6 [(gogoproto.jsontag) = "resourceType"]; // also_known_as is a list of URIs that can be used to get the resource. - repeated cheqd.resource.v2.AlternativeUri also_known_as = 7; + repeated AlternativeUri also_known_as = 7 [ + (gogoproto.jsontag) = "resourceAlternativeUri", + (gogoproto.nullable) = true + ]; } message MsgCreateResourceResponse { // Return the created resource metadata. - Metadata resource = 1; + Metadata resource = 1 [(gogoproto.jsontag) = "linkedResourceMetadata"]; } diff --git a/scripts/protoc-swagger-gen.sh b/scripts/protoc-swagger-gen.sh index 601219223..fb6288868 100755 --- a/scripts/protoc-swagger-gen.sh +++ b/scripts/protoc-swagger-gen.sh @@ -30,7 +30,7 @@ cd .. # combine swagger files # uses nodejs package `swagger-combine`. # all the individual swagger files need to be configured in `config.yaml` for merging -swagger-combine ${SWAGGER_DIR}/config.json -o ${SWAGGER_DIR}/swagger.yaml -f yaml --continueOnConflictingPaths true +swagger-combine ${SWAGGER_DIR}/config.yaml -o ${SWAGGER_DIR}/swagger.yaml --format yaml --includceGlobalTags false # Remove individual swagger files rm -rf ${SWAGGER_DIR}/cheqd diff --git a/tests/integration/cli/config.go b/tests/integration/cli/config.go index 0f109a70e..672e84e7a 100644 --- a/tests/integration/cli/config.go +++ b/tests/integration/cli/config.go @@ -7,7 +7,7 @@ const ( OutputFormat = "json" Gas = "auto" GasAdjustment = "1.8" - GasPrices = "25ncheq" + GasPrices = "50ncheq" ) const ( diff --git a/tests/integration/cli/query.go b/tests/integration/cli/query.go index a90c3e4e8..bf12d7e8f 100644 --- a/tests/integration/cli/query.go +++ b/tests/integration/cli/query.go @@ -73,7 +73,7 @@ func QueryDidDoc(did string) (didtypes.QueryDidDocResponse, error) { } func QueryResource(collectionID string, resourceID string) (resourcetypes.QueryResourceResponse, error) { - res, err := Query("resource", "resource", collectionID, resourceID) + res, err := Query("resource", "specific-resource", collectionID, resourceID) if err != nil { return resourcetypes.QueryResourceResponse{}, err } @@ -88,7 +88,7 @@ func QueryResource(collectionID string, resourceID string) (resourcetypes.QueryR } func QueryResourceMetadata(collectionID string, resourceID string) (resourcetypes.QueryResourceMetadataResponse, error) { - res, err := Query("resource", "resource-metadata", collectionID, resourceID) + res, err := Query("resource", "metadata", collectionID, resourceID) if err != nil { return resourcetypes.QueryResourceMetadataResponse{}, err } @@ -103,7 +103,7 @@ func QueryResourceMetadata(collectionID string, resourceID string) (resourcetype } func QueryResourceCollection(collectionID string) (resourcetypes.QueryCollectionResourcesResponse, error) { - res, err := Query("resource", "collection-resources", collectionID) + res, err := Query("resource", "collection-metadata", collectionID) if err != nil { return resourcetypes.QueryCollectionResourcesResponse{}, err } diff --git a/tests/integration/cli/tx.go b/tests/integration/cli/tx.go index fa0990195..c538f9b20 100644 --- a/tests/integration/cli/tx.go +++ b/tests/integration/cli/tx.go @@ -7,10 +7,14 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/x/did/client/cli" "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" ) +const ( + FlagVersionID = "--version-id" +) + var CLITxParams = []string{ "--chain-id", network.ChainID, "--keyring-backend", KeyringBackend, @@ -65,8 +69,8 @@ func RevokeFeeGrant(granter, grantee string, feeParams []string) (sdk.TxResponse return Tx("feegrant", "revoke", granter, feeParams, granter, grantee) } -func CreateDidDoc(tmpDir string, payload types.MsgCreateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := helpers.Codec.MarshalJSON(&payload) +func CreateDidDoc(tmpDir string, payload cli.DIDDocument, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := json.Marshal(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -83,11 +87,15 @@ func CreateDidDoc(tmpDir string, payload types.MsgCreateDidDocPayload, signInput payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "create-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "create-did", from, feeParams, payloadFile) } -func UpdateDidDoc(tmpDir string, payload types.MsgUpdateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := helpers.Codec.MarshalJSON(&payload) +func UpdateDidDoc(tmpDir string, payload cli.DIDDocument, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := json.Marshal(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -104,10 +112,14 @@ func UpdateDidDoc(tmpDir string, payload types.MsgUpdateDidDocPayload, signInput payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "update-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "update-did", from, feeParams, payloadFile) } -func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { +func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, versionID, from string, feeParams []string) (sdk.TxResponse, error) { payloadJSON, err := helpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err @@ -125,11 +137,15 @@ func DeactivateDidDoc(tmpDir string, payload types.MsgDeactivateDidDocPayload, s payloadFile := helpers.MustWriteTmpFile(tmpDir, payloadWithSignInputsJSON) + if versionID != "" { + return Tx("cheqd", "deactivate-did", from, feeParams, payloadFile, FlagVersionID, versionID) + } + return Tx("cheqd", "deactivate-did", from, feeParams, payloadFile) } -func CreateResource(tmpDir string, options resourcecli.CreateResourceOptions, signInputs []cli.SignInput, from string, feeParams []string) (sdk.TxResponse, error) { - payloadJSON, err := json.Marshal(&options) +func CreateResource(tmpDir string, payload resourcetypes.MsgCreateResourcePayload, signInputs []cli.SignInput, dataFile, from string, feeParams []string) (sdk.TxResponse, error) { + payloadJSON, err := helpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -146,5 +162,5 @@ func CreateResource(tmpDir string, options resourcecli.CreateResourceOptions, si payloadFile := helpers.MustWriteTmpFile("", payloadWithSignInputsJSON) - return Tx("resource", "create", from, feeParams, payloadFile) + return Tx("resource", "create", from, feeParams, payloadFile, dataFile) } diff --git a/tests/integration/cli_diddoc_negative_test.go b/tests/integration/cli_diddoc_negative_test.go index a9e15f51d..21cd4732b 100644 --- a/tests/integration/cli_diddoc_negative_test.go +++ b/tests/integration/cli_diddoc_negative_test.go @@ -10,9 +10,9 @@ import ( helpers "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - cli_types "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" + didtypes "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -20,9 +20,16 @@ import ( var _ = Describe("cheqd cli - negative did", func() { var tmpDir string + var feeParams didtypes.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) }) It("cannot create diddoc with missing cli arguments, sign inputs mismatch, non-supported VM type, already existing did", func() { @@ -35,28 +42,27 @@ var _ = Describe("cheqd cli - negative did", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -64,97 +70,96 @@ var _ = Describe("cheqd cli - negative did", func() { did2 := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId2 := did2 + "#key1" - pubKey2, privKey2, err := ed25519.GenerateKey(nil) + publicKey2, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey2) + publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey2) - payload2 := types.MsgCreateDidDocPayload{ - Id: did2, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId2, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + payload2 := didcli.DIDDocument{ + ID: did2, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId2, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }, }, Authentication: []string{keyId2}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with missing cli arguments")) // Fail to create a new DID Doc with missing cli arguments // a. missing payload, sign inputs and account - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // b. missing payload, sign inputs - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // c. missing payload, account - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, signInputs2, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs2, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) // d. missing sign inputs, account - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) // e. missing payload - _, err = cli.CreateDidDoc(tmpDir, types.MsgCreateDidDocPayload{}, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // f. missing sign inputs - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // g. missing account - _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", "", helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with sign inputs mismatch")) // Fail to create a new DID Doc with sign inputs mismatch // a. sign inputs mismatch - _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // b. non-existing key id - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{ + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{ { VerificationMethodID: "non-existing-key-id", - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) // c. non-matching private key - _, err = cli.CreateDidDoc(tmpDir, payload2, []cli_types.SignInput{ + _, err = cli.CreateDidDoc(tmpDir, payload2, []didcli.SignInput{ { VerificationMethodID: keyId2, PrivKey: privKey, }, - }, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with non-supported VM type")) // Fail to create a new DID Doc with non-supported VM type payload3 := payload2 - payload3.VerificationMethod[0].VerificationMethodType = "NonSupportedVMType" - _, err = cli.CreateDidDoc(tmpDir, payload3, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + payload3.VerificationMethod[0]["type"] = "NonSupportedVMType" + _, err = cli.CreateDidDoc(tmpDir, payload3, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create diddoc with already existing DID")) // Fail to create a new DID Doc with already existing DID - _, err = cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).ToNot(BeNil()) }) - deepCopierUpdateDid := helpers.DeepCopyUpdateDid{} + deepCopierUpdateDid := helpers.DeepCopyDIDDocument{} It("cannot update a DID Doc with missing cli arguments, sign inputs mismatch, non-supported VM type, non-existing did, unchanged payload", func() { // Define a valid DID Doc to be updated @@ -166,49 +171,47 @@ var _ = Describe("cheqd cli - negative did", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, + payload := didcli.DIDDocument{ + ID: did, Controller: []string{did}, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) // Update the DID Doc - updatedPayload := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + updatedPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, AssertionMethod: []string{keyId}, - VersionId: uuid.NewString(), } - res, err = cli.UpdateDidDoc(tmpDir, updatedPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.UpdateDidDoc(tmpDir, updatedPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -217,34 +220,33 @@ var _ = Describe("cheqd cli - negative did", func() { keyId2 := did2 + "#key1" keyId2AsExtraController := did + "#key2" - pubKey2, privKey2, err := ed25519.GenerateKey(nil) + publicKey2, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey2) + publicKeyMultibase2 := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey2) - payload2 := types.MsgCreateDidDocPayload{ - Id: did2, + payload2 := didcli.DIDDocument{ + ID: did2, Controller: []string{did2}, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId2, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId2, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }, }, Authentication: []string{keyId2}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } - res_, err := cli.CreateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + res_, err := cli.CreateDidDoc(tmpDir, payload2, signInputs2, "", testdata.BASE_ACCOUNT_2, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res_.Code).To(BeEquivalentTo(0)) @@ -269,7 +271,7 @@ var _ = Describe("cheqd cli - negative did", func() { privKeyFuzzedExtra2 := testdata.GenerateByteEntropy() Expect(len(privKeyFuzzedExtra2)).NotTo(BeEquivalentTo(len(privKeyFuzzed2))) - signInputsFuzzed := []cli_types.SignInput{ + signInputsFuzzed := []didcli.SignInput{ { VerificationMethodID: keyIdFuzzed, PrivKey: privKeyFuzzed, @@ -283,131 +285,128 @@ var _ = Describe("cheqd cli - negative did", func() { // Following valid DID Doc to be updated followingUpdatedPayload := deepCopierUpdateDid.DeepCopy(updatedPayload) followingUpdatedPayload.Controller = []string{did, did2} - followingUpdatedPayload.VerificationMethod = append(followingUpdatedPayload.VerificationMethod, &types.VerificationMethod{ - Id: keyId2AsExtraController, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did2, - VerificationMaterial: publicKeyMultibase2, + followingUpdatedPayload.VerificationMethod = append(followingUpdatedPayload.VerificationMethod, didcli.VerificationMethod{ + "id": keyId2AsExtraController, + "type": "Ed25519VerificationKey2020", + "controller": did2, + "publicKeyMultibase": publicKeyMultibase2, }) followingUpdatedPayload.Authentication = append(followingUpdatedPayload.Authentication, keyId2AsExtraController) followingUpdatedPayload.CapabilityDelegation = []string{keyId} followingUpdatedPayload.CapabilityInvocation = []string{keyId} - followingUpdatedPayload.VersionId = uuid.NewString() signInputsAugmented := append(signInputs, signInputs2...) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with missing cli arguments")) // Fail to update the DID Doc with missing cli arguments // a. missing payload, sign inputs and account - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, []cli_types.SignInput{}, "", cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", "", helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // b. missing payload, sign inputs - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // c. missing payload, account - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // d. missing sign inputs, account - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // e. missing payload - _, err = cli.UpdateDidDoc(tmpDir, types.MsgUpdateDidDocPayload{}, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, didcli.DIDDocument{}, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // f. missing sign inputs - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{}, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // g. missing account - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", "", helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with sign inputs mismatch")) // Fail to update the DID Doc with sign inputs mismatch // a. sign inputs total mismatch - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsFuzzed, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsFuzzed, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // b. sign inputs invalid length - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // c. non-existing key id - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, }, { VerificationMethodID: "non-existing-key-id", - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // d. non-matching private key - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId2AsExtraController, PrivKey: privKey, }, { VerificationMethodID: keyId, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // e. invalid private key - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []cli_types.SignInput{ + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKeyFuzzedExtra, }, { VerificationMethodID: keyId2AsExtraController, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with a non-supported VM type")) // Fail to update the DID Doc with a non-supported VM type invalidVmTypePayload := deepCopierUpdateDid.DeepCopy(followingUpdatedPayload) - invalidVmTypePayload.VerificationMethod = []*types.VerificationMethod{ + invalidVmTypePayload.VerificationMethod = []didcli.VerificationMethod{ followingUpdatedPayload.VerificationMethod[0], - { - Id: followingUpdatedPayload.VerificationMethod[1].Id, - VerificationMethodType: "NonSupportedVmType", - Controller: followingUpdatedPayload.VerificationMethod[1].Controller, - VerificationMaterial: "pretty-long-public-key-multibase", + map[string]any{ + "Id": followingUpdatedPayload.VerificationMethod[1]["id"], + "VerificationMethodType": "NonSupportedVmType", + "Controller": followingUpdatedPayload.VerificationMethod[1]["controller"], + "VerificationMaterial": "pretty-long-public-key-multibase", }, } - invalidVmTypePayload.VersionId = uuid.NewString() - _, err = cli.UpdateDidDoc(tmpDir, invalidVmTypePayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, invalidVmTypePayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with a non-existing DID")) // Fail to update a non-existing DID Doc nonExistingDid := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() nonExistingDidPayload := deepCopierUpdateDid.DeepCopy(followingUpdatedPayload) - nonExistingDidPayload.Id = nonExistingDid - _, err = cli.UpdateDidDoc(tmpDir, nonExistingDidPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + nonExistingDidPayload.ID = nonExistingDid + _, err = cli.UpdateDidDoc(tmpDir, nonExistingDidPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).ToNot(BeNil()) // Finally, update the DID Doc - res, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot update diddoc with an unchanged payload")) // Fail to update the DID Doc with an unchanged payload - followingUpdatedPayload.VersionId = uuid.NewString() - _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.UpdateDidDoc(tmpDir, followingUpdatedPayload, signInputsAugmented, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) // TODO: Decide if this should be an error, if the DID Doc is unchanged }) diff --git a/tests/integration/cli_diddoc_pricing_negative_test.go b/tests/integration/cli_diddoc_pricing_negative_test.go index 264b470c1..ee9614d58 100644 --- a/tests/integration/cli_diddoc_pricing_negative_test.go +++ b/tests/integration/cli_diddoc_pricing_negative_test.go @@ -9,7 +9,7 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -27,9 +27,6 @@ import ( // 4. fixed fee - invalid fee amount create // 5. fixed fee - invalid fee amount update // 6. fixed fee - invalid fee amount deactivate -// 7. gas auto - insufficient funds create -// 8. gas auto - insufficient funds update -// 9. gas auto - insufficient funds deactivate // 10. fixed fee - charge only tax if fee is more than tax create // 11. fixed fee - charge only tax if fee is more than tax update // 12. fixed fee - charge only tax if fee is more than tax deactivate @@ -40,8 +37,8 @@ import ( var _ = Describe("cheqd cli - negative diddoc pricing", func() { var tmpDir string var feeParams types.FeeParams - var payload types.MsgCreateDidDocPayload - var signInputs []clitypes.SignInput + var payload didcli.DIDDocument + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() @@ -56,29 +53,28 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload = types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload = didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } }) @@ -86,55 +82,53 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not succeed in create diddoc message - case: fixed fee, invalid denom", func() { By("submitting create diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.CreateDid.Amount.Int64())) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) It("should not succeed in update diddoc message - case: fixed fee, invalid denom", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.GetUpdateDid().Amount.Int64())) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) It("should not succeed in deactivate diddoc message - case: fixed fee, invalid denom", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with invalid denom") invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.GetDeactivateDid().Amount.Int64())) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -142,112 +136,57 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not fail in create diddoc message - case: fixed fee, lower amount than required", func() { By("submitting create diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.CreateDid.Denom, sdk.NewInt(feeParams.CreateDid.Amount.Int64()-1)) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) It("should not fail in update diddoc message - case: fixed fee, lower amount than required", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.UpdateDid.Denom, sdk.NewInt(feeParams.UpdateDid.Amount.Int64()-1)) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) It("should not fail in deactivate diddoc message - case: fixed fee, lower amount than required", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with lower amount than required") lowerTax := sdk.NewCoin(feeParams.DeactivateDid.Denom, sdk.NewInt(feeParams.DeactivateDid.Amount.Int64()-1)) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) - It("should not succeed in create diddoc message - case: gas auto, insufficient funds", func() { - By("submitting create diddoc message with insufficient funds") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in update diddoc message - case: gas auto, insufficient funds", func() { - By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, - }, - }, - Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed - } - - By("submitting update diddoc message with insufficient funds") - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in deactivate diddoc message - case: gas auto, insufficient funds", func() { - By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("preparing the deactivate diddoc message") - payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), - } - - By("submitting deactivate diddoc message with insufficient funds") - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - It("should not charge more than tax for create diddoc message - case: fixed fee", func() { By("querying the fee payer account balance before the transaction") balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_5_ADDR, types.BaseMinimalDenom) @@ -256,7 +195,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the create diddoc message with double the tax") tax := feeParams.CreateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -271,24 +210,23 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not charge more than tax for update diddoc message - case: fixed fee", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": "Ed25519VerificationKey2020", + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("querying the fee payer account balance before the transaction") @@ -298,7 +236,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the update diddoc message with double the tax") tax := feeParams.UpdateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -313,13 +251,13 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not charge more than tax for deactivate diddoc message - case: fixed fee", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, + Id: payload.ID, VersionId: uuid.NewString(), } @@ -330,7 +268,7 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { By("submitting the deactivate diddoc message with double the tax") tax := feeParams.DeactivateDid doubleTax := sdk.NewCoin(types.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -346,55 +284,53 @@ var _ = Describe("cheqd cli - negative diddoc pricing", func() { It("should not succeed in create diddoc create message - case: fixed fee, insufficient funds", func() { By("submitting create diddoc message with insufficient funds") tax := feeParams.CreateDid - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) It("should not succeed in update diddoc message - case: fixed fee, insufficient funds", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_5, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_5, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("submitting update diddoc message with insufficient funds") tax := feeParams.UpdateDid - res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) It("should not succeed in deactivate diddoc message - case: fixed fee, insufficient funds", func() { By("submitting the create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("submitting deactivate diddoc message with insufficient funds") tax := feeParams.DeactivateDid - res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) + res, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_6, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) diff --git a/tests/integration/cli_diddoc_pricing_test.go b/tests/integration/cli_diddoc_pricing_test.go index cf312a346..3c3796060 100644 --- a/tests/integration/cli_diddoc_pricing_test.go +++ b/tests/integration/cli_diddoc_pricing_test.go @@ -9,7 +9,7 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -21,8 +21,8 @@ import ( var _ = Describe("cheqd cli - positive diddoc pricing", func() { var tmpDir string var feeParams types.FeeParams - var payload types.MsgCreateDidDocPayload - var signInputs []clitypes.SignInput + var payload didcli.DIDDocument + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() @@ -37,29 +37,28 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload = types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload = didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } }) @@ -72,7 +71,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting a create diddoc message") tax := feeParams.CreateDid - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -125,87 +124,25 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { )) }) - It("should tax create diddoc message - case: gas auto", func() { - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting a create diddoc message") - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.CreateDid - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - It("should tax update diddoc message - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("querying the fee payer account balance before the transaction") @@ -215,89 +152,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting an update diddoc message") tax := feeParams.UpdateDid - res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax update diddoc message - case: gas auto", func() { - By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(resp.Code).To(BeEquivalentTo(0)) - - By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, - }, - }, - Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed - } - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting an update diddoc message") - tax := feeParams.UpdateDid - res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + res, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -352,14 +207,13 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax deactivate diddoc message - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("querying the fee payer account balance before the transaction") @@ -369,7 +223,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { By("submitting an deactivate diddoc message") tax := feeParams.DeactivateDid - res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -422,78 +276,6 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { )) }) - It("should tax deactivate diddoc message - case: gas auto", func() { - By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(resp.Code).To(BeEquivalentTo(0)) - - By("preparing the deactivate diddoc message") - payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), - } - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("submitting an deactivate diddoc message") - res, err := cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, types.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(types.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.DeactivateDid - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - It("should tax create diddoc message with feegrant - case: fixed fee", func() { By("creating a feegrant") res, err := cli.GrantFees(testdata.BASE_ACCOUNT_4_ADDR, testdata.BASE_ACCOUNT_1_ADDR, cli.CliGasParams) @@ -509,7 +291,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.CreateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -537,24 +319,23 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax update diddoc message with feegrant - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the update diddoc message") - payload2 := types.MsgUpdateDidDocPayload{ - Id: payload.Id, - VerificationMethod: []*types.VerificationMethod{ - { - Id: payload.VerificationMethod[0].Id, - Controller: payload.VerificationMethod[0].Controller, - VerificationMethodType: payload.VerificationMethod[0].VerificationMethodType, - VerificationMaterial: payload.VerificationMethod[0].VerificationMaterial, + payload2 := didcli.DIDDocument{ + ID: payload.ID, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": payload.VerificationMethod[0]["id"], + "type": payload.VerificationMethod[0]["type"], + "controller": payload.VerificationMethod[0]["controller"], + "publicKeyMultibase": payload.VerificationMethod[0]["publicKeyMultibase"], }, }, Authentication: payload.Authentication, - AssertionMethod: []string{payload.VerificationMethod[0].Id}, // <-- changed - VersionId: uuid.NewString(), // <-- changed + AssertionMethod: []string{payload.VerificationMethod[0]["id"].(string)}, // <-- changed } By("creating a feegrant") @@ -571,7 +352,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting an update diddoc message") - resp, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err = cli.UpdateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.UpdateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -599,14 +380,13 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { It("should tax deactivate diddoc message with feegrant - case: fixed fee", func() { By("submitting a create diddoc message") - resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) By("preparing the deactivate diddoc message") payload2 := types.MsgDeactivateDidDocPayload{ - Id: payload.Id, - VersionId: uuid.NewString(), + Id: payload.ID, } By("creating a feegrant") @@ -623,7 +403,7 @@ var _ = Describe("cheqd cli - positive diddoc pricing", func() { Expect(err).To(BeNil()) By("submitting a deactivate diddoc message") - resp, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + resp, err = cli.DeactivateDidDoc(tmpDir, payload2, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(feeParams.DeactivateDid.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) diff --git a/tests/integration/cli_diddoc_test.go b/tests/integration/cli_diddoc_test.go index b9f9e4fe2..bb4742678 100644 --- a/tests/integration/cli_diddoc_test.go +++ b/tests/integration/cli_diddoc_test.go @@ -7,9 +7,10 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - cli_types "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" "github.com/cheqd/cheqd-node/x/did/types" "github.com/google/uuid" @@ -20,9 +21,16 @@ import ( var _ = Describe("cheqd cli - positive did", func() { var tmpDir string + var feeParams types.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query fee params + res, err := cli.QueryParams(types.ModuleName, string(types.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) }) It("can create diddoc, update it and query the result (Ed25519VerificationKey2020)", func() { @@ -31,69 +39,71 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (Ed25519VerificationKey2020)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newPubKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(newPubKey) + newPublicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(newPublicKey) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: newPubKeyMultibase, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": newPublicKeyMultibase, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -110,7 +120,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("Ed25519VerificationKey2020")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPubKeyMultibase)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyMultibase)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -118,18 +128,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (Ed25519VerificationKey2020)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) @@ -152,69 +163,75 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateJSONWebKey2020VerificationMaterial(pubKey) + publicKeyJwkJSON := testsetup.GenerateJSONWebKey2020VerificationMaterial(publicKey) + publicKeyJwk, err := testsetup.ParseJSONToMap(publicKeyJwkJSON) + Expect(err).To(BeNil()) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "JsonWebKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "JsonWebKey2020", + "controller": did, + "publicKeyJwk": publicKeyJwk, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (JsonWebKey2020)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newPubKeyMultibase := testsetup.GenerateJSONWebKey2020VerificationMaterial(newPubKey) + newPublicKeyJwkJSON := testsetup.GenerateJSONWebKey2020VerificationMaterial(newPublicKey) + newPublicKeyJwk, err := testsetup.ParseJSONToMap(newPublicKeyJwkJSON) + Expect(err).To(BeNil()) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "JsonWebKey2020", - Controller: did, - VerificationMaterial: newPubKeyMultibase, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "JsonWebKey2020", + "controller": did, + "publicKeyJwk": newPublicKeyJwk, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -231,7 +248,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("JsonWebKey2020")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPubKeyMultibase)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyJwkJSON)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -239,18 +256,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (JsonWebKey2020)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) @@ -273,69 +291,71 @@ var _ = Describe("cheqd cli - positive did", func() { did := "did:cheqd:" + network.DidNamespace + ":" + uuid.NewString() keyID := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - pubKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(pubKey) + publicKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2018", - Controller: did, - VerificationMaterial: pubKeyBase58, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2018", + "controller": did, + "publicKeyBase58": publicKeyBase58, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs := []cli_types.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can update diddoc (Ed25519VerificationKey2018)")) // Update the DID Doc - newPubKey, newPrivKey, err := ed25519.GenerateKey(nil) + newPublicKey, newPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - newpubKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(newPubKey) + newPublicKeyBase58 := testsetup.GenerateEd25519VerificationKey2018VerificationMaterial(newPublicKey) - payload2 := types.MsgUpdateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyID, - VerificationMethodType: "Ed25519VerificationKey2018", - Controller: did, - VerificationMaterial: newpubKeyBase58, + payload2 := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyID, + "type": "Ed25519VerificationKey2018", + "controller": did, + "publicKeyBase58": newPublicKeyBase58, }, }, Authentication: []string{keyID}, - VersionId: uuid.NewString(), } - signInputs2 := []cli_types.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: privKey, + PrivKey: privateKey, }, { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res2, err := cli.UpdateDidDoc(tmpDir, payload2, signInputs2, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.UpdateDid.String())) Expect(err).To(BeNil()) Expect(res2.Code).To(BeEquivalentTo(0)) @@ -352,7 +372,7 @@ var _ = Describe("cheqd cli - positive did", func() { Expect(didDoc.VerificationMethod[0].Id).To(BeEquivalentTo(keyID)) Expect(didDoc.VerificationMethod[0].VerificationMethodType).To(BeEquivalentTo("Ed25519VerificationKey2018")) Expect(didDoc.VerificationMethod[0].Controller).To(BeEquivalentTo(did)) - Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newpubKeyBase58)) + Expect(didDoc.VerificationMethod[0].VerificationMaterial).To(BeEquivalentTo(newPublicKeyBase58)) // Check that DIDDoc is not deactivated Expect(resp.Value.Metadata.Deactivated).To(BeFalse()) @@ -360,18 +380,19 @@ var _ = Describe("cheqd cli - positive did", func() { AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can deactivate diddoc (Ed25519VerificationKey2018)")) // Deactivate the DID Doc payload3 := types.MsgDeactivateDidDocPayload{ - Id: did, - VersionId: uuid.NewString(), + Id: did, } - signInputs3 := []cli_types.SignInput{ + signInputs3 := []didcli.SignInput{ { VerificationMethodID: keyID, - PrivKey: newPrivKey, + PrivKey: newPrivateKey, }, } - res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID = uuid.NewString() + + res3, err := cli.DeactivateDidDoc(tmpDir, payload3, signInputs3, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(feeParams.DeactivateDid.String())) Expect(err).To(BeNil()) Expect(res3.Code).To(BeEquivalentTo(0)) diff --git a/tests/integration/cli_resource_negative_test.go b/tests/integration/cli_resource_negative_test.go index f1f505806..6cf5de9a7 100644 --- a/tests/integration/cli_resource_negative_test.go +++ b/tests/integration/cli_resource_negative_test.go @@ -7,12 +7,13 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + didtypes "github.com/cheqd/cheqd-node/x/did/types" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -21,52 +22,64 @@ import ( var _ = Describe("cheqd cli - negative resource", func() { var collectionID string var did string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput var resourceID string var resourceName string - + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var tmpDir string BeforeEach(func() { // Initialize tmpDir tmpDir = GinkgoT().TempDir() + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) + // Create a new DID Doc collectionID = uuid.NewString() did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, payload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) + Expect(resp.Code).To(BeEquivalentTo(0)) - // Initialize shared resourceID + // Initialize shared values resourceID = uuid.NewString() resourceName = "TestName" }) @@ -77,12 +90,12 @@ var _ = Describe("cheqd cli - negative resource", func() { // Generate extra sign inputs keyId2 := did + "#key2" - _, privKey2, err := ed25519.GenerateKey(nil) + _, privateKey2, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - signInputs2 := []clitypes.SignInput{ + signInputs2 := []didcli.SignInput{ { VerificationMethodID: keyId2, - PrivKey: privKey2, + PrivKey: privateKey2, }, } @@ -93,161 +106,147 @@ var _ = Describe("cheqd cli - negative resource", func() { resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionId2, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionId2, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create resource with missing cli arguments")) // Fail to create a resource with missing cli arguments // a. missing collection id - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) // b. missing resource id - works because it is generated by the cli - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) // c. missing resource name - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) - // c. missing resource version - ok - // d. missing resource type - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // e. missing resource file - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // f. missing sign inputs - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{}, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{}, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // g. missing account - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, "", cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, "", helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) AddReportEntry("Integration", fmt.Sprintf("%sNegative: %s", cli.Purple, "cannot create resource with sign inputs mismatch")) // Fail to create a resource with sign inputs mismatch // a. sign inputs mismatch - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs2, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs2, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // b. non-existing key id - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: "non-existing-key-id", PrivKey: signInputs[0].PrivKey, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // c. non-matching private key - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: signInputs[0].VerificationMethodID, - PrivKey: privKey2, + PrivKey: privateKey2, }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // d. invalid private key - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, []clitypes.SignInput{ + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, []didcli.SignInput{ { VerificationMethodID: signInputs[0].VerificationMethodID, PrivKey: testdata.GenerateByteEntropy(), }, - }, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + }, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(HaveOccurred()) // Finally, create the resource - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) diff --git a/tests/integration/cli_resource_pricing_negative_test.go b/tests/integration/cli_resource_pricing_negative_test.go index eda790f57..188114af7 100644 --- a/tests/integration/cli_resource_pricing_negative_test.go +++ b/tests/integration/cli_resource_pricing_negative_test.go @@ -9,10 +9,9 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" didtypes "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" @@ -33,23 +32,27 @@ import ( // 10. fixed fee - charge only tax if fee is more than tax image // 11. fixed fee - charge only tax if fee is more than tax json // 12. fixed fee - charge only tax if fee is more than tax default -// 13. gas auto - insufficient funds image -// 14. gas auto - insufficient funds json -// 15. gas auto - insufficient funds default var _ = Describe("cheqd cli - negative resource pricing", func() { var tmpDir string - var feeParams resourcetypes.FeeParams + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var collectionID string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() - // Query fee params - res, err := cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) Expect(err).To(BeNil()) - err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) Expect(err).To(BeNil()) // Create a new DID Doc @@ -57,26 +60,25 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - didPayload := didtypes.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*didtypes.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + didPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, @@ -84,7 +86,7 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { } // Submit the DID Doc - resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, "", testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) }) @@ -99,15 +101,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Json.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Json.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -122,15 +123,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Image.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Image.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -145,15 +145,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with invalid denom") - invalidTax := sdk.NewCoin("invalid", sdk.NewInt(feeParams.Default.Amount.Int64())) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) + invalidTax := sdk.NewCoin("invalid", sdk.NewInt(resourceFeeParams.Default.Amount.Int64())) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(invalidTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(10)) }) @@ -168,15 +167,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Json.Denom, sdk.NewInt(feeParams.Json.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Json.Denom, sdk.NewInt(resourceFeeParams.Json.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -191,15 +189,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Image.Denom, sdk.NewInt(feeParams.Image.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Image.Denom, sdk.NewInt(resourceFeeParams.Image.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -214,15 +211,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with lower amount than required") - lowerTax := sdk.NewCoin(feeParams.Default.Denom, sdk.NewInt(feeParams.Default.Amount.Int64()-1)) - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) + lowerTax := sdk.NewCoin(resourceFeeParams.Default.Denom, sdk.NewInt(resourceFeeParams.Default.Amount.Int64()-1)) + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(lowerTax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) }) @@ -237,15 +233,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with insufficient funds") - tax := feeParams.Json - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Json + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -260,15 +255,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with insufficient funds") - tax := feeParams.Image - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Image + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -283,81 +277,14 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with insufficient funds") - tax := feeParams.Default - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource json - case: gas auto, insufficient funds", func() { - By("preparing the create resource json message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the json resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource image - case: gas auto, insufficient funds", func() { - By("preparing the create resource image message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestImage(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the image resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(5)) - }) - - It("should not succeed in create resource default - case: gas auto, insufficient funds", func() { - By("preparing the create resource default message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestDefault(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("submitting the default resource message with insufficient funds") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_3, cli.CliGasParams) + tax := resourceFeeParams.Default + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_3, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(5)) }) @@ -376,16 +303,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the json resource message with double the tax") - tax := feeParams.Json + tax := resourceFeeParams.Json doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") @@ -410,16 +336,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the image resource message with double the tax") - tax := feeParams.Image + tax := resourceFeeParams.Image doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") @@ -444,16 +369,15 @@ var _ = Describe("cheqd cli - negative resource pricing", func() { Expect(err).To(BeNil()) By("submitting the default resource message with double the tax") - tax := feeParams.Default + tax := resourceFeeParams.Default doubleTax := sdk.NewCoin(resourcetypes.BaseMinimalDenom, tax.Amount.Mul(sdk.NewInt(2))) - _, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) + _, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(doubleTax.String())) Expect(err).To(BeNil()) By("querying the fee payer account balance after the transaction") diff --git a/tests/integration/cli_resource_pricing_test.go b/tests/integration/cli_resource_pricing_test.go index c5628ea5a..78640f5c7 100644 --- a/tests/integration/cli_resource_pricing_test.go +++ b/tests/integration/cli_resource_pricing_test.go @@ -9,10 +9,9 @@ import ( "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" didtypes "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" @@ -21,17 +20,24 @@ import ( var _ = Describe("cheqd cli - positive resource pricing", func() { var tmpDir string - var feeParams resourcetypes.FeeParams + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams var collectionID string - var signInputs []clitypes.SignInput + var signInputs []didcli.SignInput BeforeEach(func() { tmpDir = GinkgoT().TempDir() - // Query fee params - res, err := cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) Expect(err).To(BeNil()) - err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) Expect(err).To(BeNil()) // Create a new DID Doc @@ -44,21 +50,20 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) - didPayload := didtypes.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*didtypes.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + didPayload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs = []clitypes.SignInput{ + signInputs = []didcli.SignInput{ { VerificationMethodID: keyId, PrivKey: privKey, @@ -66,7 +71,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { } // Submit the DID Doc - resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) + resp, err := cli.CreateDidDoc(tmpDir, didPayload, signInputs, "", testdata.BASE_ACCOUNT_4, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) }) @@ -86,15 +91,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the json resource message") - tax := feeParams.Json - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Json + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -122,83 +126,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax json resource message - case: gas auto", func() { - By("preparing the json resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the json resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Json - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -238,15 +166,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the image resource message") - tax := feeParams.Image - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Image + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -274,83 +201,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax image resource message - case: gas auto", func() { - By("preparing the image resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestImage(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the image resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Image - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(Equal(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -390,15 +241,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) By("submitting the default resource message") - tax := feeParams.Default - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) + tax := resourceFeeParams.Default + res, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_4, helpers.GenerateFees(tax.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -426,83 +276,7 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { )) By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "burn", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "burner", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: burnt.String(), Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected reward distribution event") - reward := helpers.GetRewardPortion(tax, burnt) - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "transfer", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "recipient", Value: testdata.FEE_COLLECTOR_ADDR, Index: true}, - {Key: "sender", Value: testdata.DID_MODULE_ACCOUNT_ADDR, Index: true}, - {Key: "amount", Value: reward.String(), Index: true}, - }, - }, - )) - }) - - It("should tax default resource message - case: gas auto", func() { - By("preparing the default resource message") - resourceID := uuid.NewString() - resourceName := "TestResource" - resourceVersion := "1.0" - resourceType := "TestType" - resourceFile, err := testdata.CreateTestDefault(GinkgoT().TempDir()) - Expect(err).To(BeNil()) - - By("querying the fee payer account balance before the transaction") - balanceBefore, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceBefore.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("submitting the default resource message") - res, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_4, cli.CliGasParams) - Expect(err).To(BeNil()) - Expect(res.Code).To(BeEquivalentTo(0)) - - By("querying the altered account balance") - balanceAfter, err := cli.QueryBalance(testdata.BASE_ACCOUNT_4_ADDR, resourcetypes.BaseMinimalDenom) - Expect(err).To(BeNil()) - Expect(balanceAfter.Denom).To(BeEquivalentTo(resourcetypes.BaseMinimalDenom)) - - By("checking the balance difference") - tax := feeParams.Default - diff := balanceBefore.Amount.Sub(balanceAfter.Amount) - Expect(diff).To(BeEquivalentTo(tax.Amount)) - - By("exporting a readable tx event log") - events := helpers.ReadableEvents(res.Events) - - By("ensuring the events contain the expected tax event") - Expect(events).To(ContainElement( - helpers.HumanReadableEvent{ - Type: "tx", - Attributes: []helpers.HumanReadableEventAttribute{ - {Key: "fee", Value: tax.String(), Index: true}, - {Key: "fee_payer", Value: testdata.BASE_ACCOUNT_4_ADDR, Index: true}, - }, - }, - )) - - By("ensuring the events contain the expected supply deflation event") - burnt := helpers.GetBurntPortion(tax, feeParams.BurnFactor) + burnt := helpers.GetBurntPortion(tax, resourceFeeParams.BurnFactor) Expect(events).To(ContainElement( helpers.HumanReadableEvent{ Type: "burn", @@ -550,14 +324,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource json message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Json + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -570,7 +344,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Json diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) @@ -606,14 +379,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource image message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Image + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -626,7 +399,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Image diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) @@ -662,14 +434,14 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("submitting a create resource default message") - resp, err := cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, cli.CliGasParams)) + tax := resourceFeeParams.Default + resp, err := cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFeeGranter(testdata.BASE_ACCOUNT_4_ADDR, helpers.GenerateFees(tax.String()))) Expect(err).To(BeNil()) Expect(resp.Code).To(BeEquivalentTo(0)) @@ -682,7 +454,6 @@ var _ = Describe("cheqd cli - positive resource pricing", func() { Expect(err).To(BeNil()) By("checking the granter balance difference") - tax := feeParams.Default diff := granterBalanceBefore.Amount.Sub(granterBalanceAfter.Amount) Expect(diff).To(Equal(tax.Amount)) diff --git a/tests/integration/cli_resource_test.go b/tests/integration/cli_resource_test.go index cd6abf80f..35dbf842a 100644 --- a/tests/integration/cli_resource_test.go +++ b/tests/integration/cli_resource_test.go @@ -7,12 +7,13 @@ import ( "fmt" "github.com/cheqd/cheqd-node/tests/integration/cli" + "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/tests/integration/network" "github.com/cheqd/cheqd-node/tests/integration/testdata" - clitypes "github.com/cheqd/cheqd-node/x/did/client/cli" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" testsetup "github.com/cheqd/cheqd-node/x/did/tests/setup" - "github.com/cheqd/cheqd-node/x/did/types" - resourcecli "github.com/cheqd/cheqd-node/x/resource/client/cli" + didtypes "github.com/cheqd/cheqd-node/x/did/types" + resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" "github.com/google/uuid" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -20,9 +21,23 @@ import ( var _ = Describe("cheqd cli - positive resource", func() { var tmpDir string + var didFeeParams didtypes.FeeParams + var resourceFeeParams resourcetypes.FeeParams BeforeEach(func() { tmpDir = GinkgoT().TempDir() + + // Query did fee params + res, err := cli.QueryParams(didtypes.ModuleName, string(didtypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &didFeeParams) + Expect(err).To(BeNil()) + + // Query resource fee params + res, err = cli.QueryParams(resourcetypes.ModuleName, string(resourcetypes.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = helpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) }) It("can create diddoc, create resource, query it, query all resource versions of the same resource name, query resource collection", func() { @@ -32,33 +47,34 @@ var _ = Describe("cheqd cli - positive resource", func() { did := "did:cheqd:" + network.DidNamespace + ":" + collectionID keyId := did + "#key1" - pubKey, privKey, err := ed25519.GenerateKey(nil) + publicKey, privateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(pubKey) + publicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(publicKey) - payload := types.MsgCreateDidDocPayload{ - Id: did, - VerificationMethod: []*types.VerificationMethod{ - { - Id: keyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: did, - VerificationMaterial: publicKeyMultibase, + payload := didcli.DIDDocument{ + ID: did, + VerificationMethod: []didcli.VerificationMethod{ + map[string]interface{}{ + "id": keyId, + "type": "Ed25519VerificationKey2020", + "controller": did, + "publicKeyMultibase": publicKeyMultibase, }, }, Authentication: []string{keyId}, - VersionId: uuid.NewString(), } - signInputs := []clitypes.SignInput{ + signInputs := []didcli.SignInput{ { VerificationMethodID: keyId, - PrivKey: privKey, + PrivKey: privateKey, }, } - res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + versionID := uuid.NewString() + + res, err := cli.CreateDidDoc(tmpDir, payload, signInputs, versionID, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -72,14 +88,13 @@ var _ = Describe("cheqd cli - positive resource", func() { resourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: resourceID, - ResourceName: resourceName, - ResourceVersion: resourceVersion, - ResourceType: resourceType, - ResourceFile: resourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: resourceID, + Name: resourceName, + Version: resourceVersion, + ResourceType: resourceType, + }, signInputs, resourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -91,6 +106,7 @@ var _ = Describe("cheqd cli - positive resource", func() { Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(collectionID)) Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(resourceID)) Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(resourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(resourceVersion)) Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(resourceType)) Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) @@ -103,6 +119,7 @@ var _ = Describe("cheqd cli - positive resource", func() { Expect(res3.Resource.CollectionId).To(BeEquivalentTo(collectionID)) Expect(res3.Resource.Id).To(BeEquivalentTo(resourceID)) Expect(res3.Resource.Name).To(BeEquivalentTo(resourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(resourceVersion)) Expect(res3.Resource.ResourceType).To(BeEquivalentTo(resourceType)) Expect(res3.Resource.MediaType).To(Equal("application/json")) @@ -114,49 +131,74 @@ var _ = Describe("cheqd cli - positive resource", func() { nextResourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: collectionID, - ResourceID: nextResourceId, - ResourceName: nextResourceName, - ResourceVersion: nextResourceVersion, - ResourceType: nextResourceType, - ResourceFile: nextResourceFile, - }, signInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: collectionID, + Id: nextResourceId, + Name: nextResourceName, + Version: nextResourceVersion, + ResourceType: nextResourceType, + }, signInputs, nextResourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource next version")) + // Query the Resource's next version + res2, err = cli.QueryResource(collectionID, nextResourceId) + Expect(err).To(BeNil()) + + Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(collectionID)) + Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(nextResourceId)) + Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(nextResourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(nextResourceVersion)) + Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(nextResourceType)) + Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) + Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) + + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource metadata")) + // Query the Resource's next version Metadata + res3, err = cli.QueryResourceMetadata(collectionID, nextResourceId) + Expect(err).To(BeNil()) + + Expect(res3.Resource.CollectionId).To(BeEquivalentTo(collectionID)) + Expect(res3.Resource.Id).To(BeEquivalentTo(nextResourceId)) + Expect(res3.Resource.Name).To(BeEquivalentTo(nextResourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(nextResourceVersion)) + Expect(res3.Resource.ResourceType).To(BeEquivalentTo(nextResourceType)) + Expect(res3.Resource.MediaType).To(Equal("application/json")) + // Create a second DID Doc secondCollectionId := uuid.NewString() secondDid := "did:cheqd:" + network.DidNamespace + ":" + secondCollectionId secondKeyId := secondDid + "#key1" - secondPubKey, secondPrivKey, err := ed25519.GenerateKey(nil) + secondPublicKey, secondPrivateKey, err := ed25519.GenerateKey(nil) Expect(err).To(BeNil()) - secondpubKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(secondPubKey) + secondPublicKeyMultibase := testsetup.GenerateEd25519VerificationKey2020VerificationMaterial(secondPublicKey) - secondPayload := types.MsgCreateDidDocPayload{ - Id: secondDid, - VerificationMethod: []*types.VerificationMethod{ - { - Id: secondKeyId, - VerificationMethodType: "Ed25519VerificationKey2020", - Controller: secondDid, - VerificationMaterial: secondpubKeyMultibase, + secondPayload := didcli.DIDDocument{ + ID: secondDid, + VerificationMethod: []didcli.VerificationMethod{ + map[string]any{ + "id": secondKeyId, + "type": "Ed25519VerificationKey2020", + "controller": secondDid, + "publicKeyMultibase": secondPublicKeyMultibase, }, }, Authentication: []string{secondKeyId}, - VersionId: uuid.NewString(), } - secondSignInputs := []clitypes.SignInput{ + secondSignInputs := []didcli.SignInput{ { VerificationMethodID: secondKeyId, - PrivKey: secondPrivKey, + PrivKey: secondPrivateKey, }, } - res, err = cli.CreateDidDoc(tmpDir, secondPayload, secondSignInputs, testdata.BASE_ACCOUNT_2, cli.CliGasParams) + versionID = uuid.NewString() + + res, err = cli.CreateDidDoc(tmpDir, secondPayload, secondSignInputs, versionID, testdata.BASE_ACCOUNT_2, helpers.GenerateFees(didFeeParams.CreateDid.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) @@ -168,17 +210,41 @@ var _ = Describe("cheqd cli - positive resource", func() { secondResourceFile, err := testdata.CreateTestJson(GinkgoT().TempDir()) Expect(err).To(BeNil()) - res, err = cli.CreateResource(tmpDir, resourcecli.CreateResourceOptions{ - CollectionID: secondCollectionId, - ResourceID: secondResourceId, - ResourceName: secondResourceName, - ResourceVersion: secondResourceVersion, - ResourceType: secondResourceType, - ResourceFile: secondResourceFile, - }, secondSignInputs, testdata.BASE_ACCOUNT_1, cli.CliGasParams) + res, err = cli.CreateResource(tmpDir, resourcetypes.MsgCreateResourcePayload{ + CollectionId: secondCollectionId, + Id: secondResourceId, + Name: secondResourceName, + Version: secondResourceVersion, + ResourceType: secondResourceType, + }, secondSignInputs, secondResourceFile, testdata.BASE_ACCOUNT_1, helpers.GenerateFees(resourceFeeParams.Json.String())) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource")) + // Query the Resource + res2, err = cli.QueryResource(secondCollectionId, secondResourceId) + Expect(err).To(BeNil()) + + Expect(res2.Resource.Metadata.CollectionId).To(BeEquivalentTo(secondCollectionId)) + Expect(res2.Resource.Metadata.Id).To(BeEquivalentTo(secondResourceId)) + Expect(res2.Resource.Metadata.Name).To(BeEquivalentTo(secondResourceName)) + Expect(res2.Resource.Metadata.Version).To(BeEquivalentTo(secondResourceVersion)) + Expect(res2.Resource.Metadata.ResourceType).To(BeEquivalentTo(secondResourceType)) + Expect(res2.Resource.Metadata.MediaType).To(Equal("application/json")) + Expect(res2.Resource.Resource.Data).To(BeEquivalentTo(testdata.JSON_FILE_CONTENT)) + + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource metadata")) + // Query the Resource Metadata + res3, err = cli.QueryResourceMetadata(secondCollectionId, secondResourceId) + Expect(err).To(BeNil()) + + Expect(res3.Resource.CollectionId).To(BeEquivalentTo(secondCollectionId)) + Expect(res3.Resource.Id).To(BeEquivalentTo(secondResourceId)) + Expect(res3.Resource.Name).To(BeEquivalentTo(secondResourceName)) + Expect(res3.Resource.Version).To(BeEquivalentTo(secondResourceVersion)) + Expect(res3.Resource.ResourceType).To(BeEquivalentTo(secondResourceType)) + Expect(res3.Resource.MediaType).To(Equal("application/json")) + AddReportEntry("Integration", fmt.Sprintf("%sPositive: %s", cli.Green, "can query resource collection")) // Query Resource Collection res4, err := cli.QueryResourceCollection(collectionID) diff --git a/tests/integration/helpers/deep_copy.go b/tests/integration/helpers/deep_copy.go index 4645f38c5..291b53be3 100644 --- a/tests/integration/helpers/deep_copy.go +++ b/tests/integration/helpers/deep_copy.go @@ -3,6 +3,7 @@ package helpers import ( "reflect" + didcli "github.com/cheqd/cheqd-node/x/did/client/cli" didtypes "github.com/cheqd/cheqd-node/x/did/types" resourcetypes "github.com/cheqd/cheqd-node/x/resource/types" ) @@ -37,6 +38,14 @@ func (d *DeepCopyUpdateDid) DeepCopy(src didtypes.MsgUpdateDidDocPayload) didtyp return deepCopy(src).(didtypes.MsgUpdateDidDocPayload) } +type DeepCopyDIDDocument struct { + TDeepCopy +} + +func (d *DeepCopyDIDDocument) DeepCopy(src didcli.DIDDocument) didcli.DIDDocument { + return deepCopy(src).(didcli.DIDDocument) +} + // DeepCopyCreateResource is a decorator for deep copy of type MsgCreateResource. type DeepCopyCreateResource struct { TDeepCopy @@ -46,7 +55,6 @@ func (d *DeepCopyCreateResource) DeepCopy(src resourcetypes.MsgCreateResource) r return deepCopy(src).(resourcetypes.MsgCreateResource) } -// TODO: Add generics after bumping to Go 1.18 and remove this workaround. func deepCopy(src interface{}) interface{} { var reflection interface{} var dst reflect.Value @@ -85,6 +93,17 @@ func deepCopy(src interface{}) interface{} { reflect.Copy(dst, reflect.ValueOf(slc)) // Return the destination value from the reflection slice return dst.Index(0).Interface().(resourcetypes.MsgCreateResource) + case didcli.DIDDocument: + // Create a reflection slice of the same length as the source slice + reflection = reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(actualSrc)), 1, 1).Interface() + // Extract destination value as definition + dst = reflect.ValueOf(reflection) + // Define source value as slice + slc := []didcli.DIDDocument{actualSrc} + // Copy the source value into the destination + reflect.Copy(dst, reflect.ValueOf(slc)) + // Return the destination value from the reflection slice + return dst.Index(0).Interface().(didcli.DIDDocument) default: panic("Unsupported type") } diff --git a/tests/integration/helpers/fee.go b/tests/integration/helpers/fee.go index bf21d6f84..db395ca6f 100644 --- a/tests/integration/helpers/fee.go +++ b/tests/integration/helpers/fee.go @@ -7,7 +7,8 @@ import ( func GenerateFees(amount string) []string { return []string{ "--fees", amount, - "--gas", "400000", + "--gas", "auto", + "--gas-adjustment", "1.8", } } diff --git a/tests/integration/testdata/accounts.go b/tests/integration/testdata/accounts.go index 10f2524e7..8078ba566 100644 --- a/tests/integration/testdata/accounts.go +++ b/tests/integration/testdata/accounts.go @@ -24,7 +24,7 @@ const ( PERIODIC_VESTING_ACCOUNT_ADDR = "cheqd1uyngr0l3xtyj07js9sdew9mk50tqeq8lghhcfr" //? Module accounts can be safely hardcoded, as they are generated per module name - //? and the hex bytes are deterministicly generated from that module name. + //? and the hex bytes are deterministically generated from the module name. FEE_COLLECTOR_ADDR = "cheqd17xpfvakm2amg962yls6f84z3kell8c5l7m0qqv" DID_MODULE_ACCOUNT_ADDR = "cheqd1neus3an933cxp7ewuxw6jcuf6j8ka777h32p64" ) diff --git a/tests/upgrade/integration/cli/config.go b/tests/upgrade/integration/cli/config.go index 02c7b9448..ebcd8d9fb 100644 --- a/tests/upgrade/integration/cli/config.go +++ b/tests/upgrade/integration/cli/config.go @@ -7,16 +7,11 @@ import ( ) const ( - CLIBinaryName = integrationcli.CliBinaryName + CliBinaryName = integrationcli.CliBinaryName Green = integrationcli.Green Purple = integrationcli.Purple ) -const ( - CLIBinaryNamePrevious = CLIBinaryName + "-previous" - CLIBinaryNameNext = CLIBinaryName + "-next" -) - const ( KeyringBackend = integrationcli.KeyringBackend OutputFormat = integrationcli.OutputFormat @@ -37,13 +32,15 @@ const ( var ( TXParams = []string{ - "--gas", Gas, - "--gas-adjustment", GasAdjustment, - "--gas-prices", GasPrices, "--keyring-backend", KeyringBackend, "--chain-id", integrationnetwork.ChainID, "-y", } + GasParams = []string{ + "--gas", Gas, + "--gas-adjustment", GasAdjustment, + "--gas-prices", GasPrices, + } QueryParamsConst = []string{ "--chain-id", integrationnetwork.ChainID, "--output", OutputFormat, diff --git a/tests/upgrade/integration/cli/query.go b/tests/upgrade/integration/cli/query.go index 3255799db..01c7f4e04 100644 --- a/tests/upgrade/integration/cli/query.go +++ b/tests/upgrade/integration/cli/query.go @@ -28,7 +28,7 @@ func Query(container string, binary string, module, query string, queryArgs ...s func QueryModuleVersionMap(container string) (upgradetypes.QueryModuleVersionsResponse, error) { fmt.Println("Querying module version map from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "upgrade", "module_versions", }, QueryParamsConst...) @@ -52,7 +52,7 @@ func QueryModuleVersionMap(container string) (upgradetypes.QueryModuleVersionsRe func QueryParams(container, subspace, key string) (paramproposal.ParamChange, error) { fmt.Println("Querying params from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "params", "subspace", subspace, key, }, QueryParamsConst...) @@ -108,7 +108,7 @@ func QueryResourceFeeParams(container, subspace, key string) (resourcetypes.FeeP func QueryProposalLegacy(container, id string) (govtypesv1beta1.Proposal, error) { fmt.Println("Querying proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "gov", "proposal", id, }, QueryParamsConst...) @@ -131,7 +131,7 @@ func QueryProposalLegacy(container, id string) (govtypesv1beta1.Proposal, error) func QueryProposal(container, id string) (govtypesv1.Proposal, error) { fmt.Println("Querying proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "query", "gov", "proposal", id, }, QueryParamsConst...) diff --git a/tests/upgrade/integration/cli/query_did.go b/tests/upgrade/integration/cli/query_did.go index a3bee9060..4ed9f8fa6 100644 --- a/tests/upgrade/integration/cli/query_did.go +++ b/tests/upgrade/integration/cli/query_did.go @@ -7,7 +7,7 @@ import ( ) func QueryDidLegacy(did string, container string) (didtypesv1.QueryGetDidResponse, error) { - res, err := Query(container, CLIBinaryName, "cheqd", "did", did) + res, err := Query(container, CliBinaryName, "cheqd", "did", did) if err != nil { return didtypesv1.QueryGetDidResponse{}, err } @@ -22,7 +22,7 @@ func QueryDidLegacy(did string, container string) (didtypesv1.QueryGetDidRespons } func QueryDid(did string, container string) (didtypesv2.QueryDidDocResponse, error) { - res, err := Query(container, CLIBinaryName, "cheqd", "did-document", did) + res, err := Query(container, CliBinaryName, "cheqd", "did-document", did) if err != nil { return didtypesv2.QueryDidDocResponse{}, err } diff --git a/tests/upgrade/integration/cli/query_resource.go b/tests/upgrade/integration/cli/query_resource.go index c4c56c21b..d02da5532 100644 --- a/tests/upgrade/integration/cli/query_resource.go +++ b/tests/upgrade/integration/cli/query_resource.go @@ -7,7 +7,7 @@ import ( ) func QueryResourceLegacy(collectionID string, resourceID string, container string) (resourcetypesv1.QueryResourceResponse, error) { - res, err := Query(container, CLIBinaryName, "resource", "resource", collectionID, resourceID) + res, err := Query(container, CliBinaryName, "resource", "resource", collectionID, resourceID) if err != nil { return resourcetypesv1.QueryResourceResponse{}, err } @@ -22,7 +22,7 @@ func QueryResourceLegacy(collectionID string, resourceID string, container strin } func QueryResource(collectionID string, resourceID string, container string) (resourcetypesv2.QueryResourceResponse, error) { - res, err := Query(container, CLIBinaryName, "resource", "resource", collectionID, resourceID) + res, err := Query(container, CliBinaryName, "resource", "specific-resource", collectionID, resourceID) if err != nil { return resourcetypesv2.QueryResourceResponse{}, err } diff --git a/tests/upgrade/integration/cli/tx.go b/tests/upgrade/integration/cli/tx.go index aa027a697..674230fcd 100644 --- a/tests/upgrade/integration/cli/tx.go +++ b/tests/upgrade/integration/cli/tx.go @@ -47,11 +47,13 @@ func Tx(container string, binary string, module, tx, from string, txArgs ...stri func SubmitParamChangeProposal(container string, pathToDir ...string) (sdk.TxResponse, error) { fmt.Println("Submitting param change proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "submit-legacy-proposal", "param-change", filepath.Join(pathToDir...), "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { fmt.Println("Error on submitting ParamChangeProposal", err) @@ -76,7 +78,7 @@ func SubmitParamChangeProposal(container string, pathToDir ...string) (sdk.TxRes func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxResponse, error) { fmt.Println("Submitting upgrade proposal from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "submit-proposal", "software-upgrade", UpgradeName, "--title", "Upgrade Title", @@ -86,6 +88,8 @@ func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxRespons "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err @@ -107,11 +111,13 @@ func SubmitUpgradeProposal(upgradeHeight int64, container string) (sdk.TxRespons func DepositGov(container string) (sdk.TxResponse, error) { fmt.Println("Depositing from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "deposit", "1", DepositAmount, "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err @@ -132,11 +138,13 @@ func DepositGov(container string) (sdk.TxResponse, error) { func VoteProposal(container, id, option string) (sdk.TxResponse, error) { fmt.Println("Voting from", container) args := append([]string{ - CLIBinaryName, + CliBinaryName, "tx", "gov", "vote", id, option, "--from", OperatorAccounts[container], }, TXParams...) + args = append(args, GasParams...) + out, err := LocalnetExecExec(container, args...) if err != nil { return sdk.TxResponse{}, err diff --git a/tests/upgrade/integration/cli/tx_did.go b/tests/upgrade/integration/cli/tx_did.go index d7672210b..33de521b1 100644 --- a/tests/upgrade/integration/cli/tx_did.go +++ b/tests/upgrade/integration/cli/tx_did.go @@ -25,11 +25,16 @@ func CreateDidLegacy(payload didtypesv1.MsgCreateDidPayload, signInputs []cli.Si args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) } -func CreateDid(payload didtypesv2.MsgCreateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { - innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) +func CreateDid(payload cli.DIDDocument, signInputs []cli.SignInput, container, versionID, fees string) (sdk.TxResponse, error) { + innerPayloadJSON, err := json.Marshal(&payload) + if err != nil { + return sdk.TxResponse{}, err + } outerPayload := cli.PayloadWithSignInputs{ Payload: innerPayloadJSON, @@ -50,7 +55,13 @@ func CreateDid(payload didtypesv2.MsgCreateDidDocPayload, signInputs []cli.SignI args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + if versionID != "" { + args = append(args, versionID) + } + + return Tx(container, CliBinaryName, "cheqd", "create-did", OperatorAccounts[container], args...) } func UpdateDidLegacy(payload didtypesv1.MsgUpdateDidPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { @@ -66,11 +77,16 @@ func UpdateDidLegacy(payload didtypesv1.MsgUpdateDidPayload, signInputs []cli.Si args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) } -func UpdateDid(payload didtypesv2.MsgUpdateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { - innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) +func UpdateDid(payload cli.DIDDocument, signInputs []cli.SignInput, container, versionID, fees string) (sdk.TxResponse, error) { + innerPayloadJSON, err := json.Marshal(&payload) + if err != nil { + return sdk.TxResponse{}, err + } outerPayload := cli.PayloadWithSignInputs{ Payload: innerPayloadJSON, @@ -91,7 +107,13 @@ func UpdateDid(payload didtypesv2.MsgUpdateDidDocPayload, signInputs []cli.SignI args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + if versionID != "" { + args = append(args, versionID) + } + + return Tx(container, CliBinaryName, "cheqd", "update-did", OperatorAccounts[container], args...) } func DeactivateDidLegacy(payload didtypesv1.MsgDeactivateDidPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { @@ -107,10 +129,12 @@ func DeactivateDidLegacy(payload didtypesv1.MsgDeactivateDidPayload, signInputs args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) } -func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { +func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []cli.SignInput, container string, fees string) (sdk.TxResponse, error) { innerPayloadJSON := integrationhelpers.Codec.MustMarshalJSON(&payload) outerPayload := cli.PayloadWithSignInputs{ @@ -132,5 +156,7 @@ func DeactivateDid(payload didtypesv2.MsgDeactivateDidDocPayload, signInputs []c args := []string{string("payload.json")} - return Tx(container, CLIBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) + args = append(args, integrationhelpers.GenerateFees(fees)...) + + return Tx(container, CliBinaryName, "cheqd", "deactivate-did", OperatorAccounts[container], args...) } diff --git a/tests/upgrade/integration/cli/tx_resource.go b/tests/upgrade/integration/cli/tx_resource.go index c67d8c25f..ace9eafb9 100644 --- a/tests/upgrade/integration/cli/tx_resource.go +++ b/tests/upgrade/integration/cli/tx_resource.go @@ -5,23 +5,12 @@ import ( "encoding/json" "path/filepath" - // integrationhelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" + integrationhelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" "github.com/cheqd/cheqd-node/x/did/client/cli" types "github.com/cheqd/cheqd-node/x/resource/types" sdk "github.com/cosmos/cosmos-sdk/types" - // . "github.com/onsi/ginkgo/v2" ) -type CreateResourceOptions struct { - CollectionID string `json:"collection_id"` - ResourceID string `json:"resource_id"` - ResourceName string `json:"resource_name"` - ResourceVersion string `json:"resource_version"` - ResourceType string `json:"resource_type"` - ResourceFile string `json:"resource_file"` - AlsoKnownAs []*types.AlternativeUri `json:"also_known_as"` -} - func CreateResourceLegacy(collectionID string, resourceID string, resourceName string, resourceType string, resourceFile string, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { args := []string{ "--collection-id", collectionID, @@ -36,24 +25,16 @@ func CreateResourceLegacy(collectionID string, resourceID string, resourceName s args = append(args, base64.StdEncoding.EncodeToString(signInput.PrivKey)) } - return Tx(container, CLIBinaryName, "resource", "create-resource", OperatorAccounts[container], args...) + args = append(args, GasParams...) + + return Tx(container, CliBinaryName, "resource", "create-resource", OperatorAccounts[container], args...) } -func CreateResource(msg types.MsgCreateResourcePayload, resourceFile string, signInputs []cli.SignInput, container string) (sdk.TxResponse, error) { +func CreateResource(payload types.MsgCreateResourcePayload, resourceFile string, signInputs []cli.SignInput, container, fees string) (sdk.TxResponse, error) { resourceFileName := filepath.Base(resourceFile) payloadFileName := "payload.json" - resourceOptions := CreateResourceOptions{ - CollectionID: msg.CollectionId, - ResourceID: msg.Id, - ResourceName: msg.Name, - ResourceVersion: msg.Version, - ResourceType: msg.ResourceType, - ResourceFile: resourceFileName, - AlsoKnownAs: msg.AlsoKnownAs, - } - - payloadJSON, err := json.Marshal(&resourceOptions) + payloadJSON, err := integrationhelpers.Codec.MarshalJSON(&payload) if err != nil { return sdk.TxResponse{}, err } @@ -73,10 +54,13 @@ func CreateResource(msg types.MsgCreateResourcePayload, resourceFile string, sig return sdk.TxResponse{}, err } - _, err = LocalnetExecExec(container, "/bin/bash", "-c", "echo '"+string(msg.Data)+"' > "+resourceFileName) + _, err = LocalnetExecExec(container, "/bin/bash", "-c", "echo '"+string(payload.Data)+"' > "+resourceFileName) if err != nil { return sdk.TxResponse{}, err } + args := []string{payloadFileName} + args = append(args, resourceFileName) + args = append(args, integrationhelpers.GenerateFees(fees)...) - return Tx(container, CLIBinaryName, "resource", "create", OperatorAccounts[container], payloadFileName) + return Tx(container, CliBinaryName, "resource", "create", OperatorAccounts[container], args...) } diff --git a/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json b/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json index 4d6fdea2d..83186f6ab 100644 --- a/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json +++ b/tests/upgrade/integration/generated/post/create - resource/resource_post_indy.json @@ -1,12 +1,12 @@ { "payload": { "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=", - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "9fbb1b86-91f8-4942-97b9-725b7714131c", "name": "Test Resource After Upgrade Name Indy Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.1-indy", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" diff --git a/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json b/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json index 85457fa65..dc7a5c8e1 100644 --- a/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json +++ b/tests/upgrade/integration/generated/post/create - resource/resource_post_uuid.json @@ -1,12 +1,12 @@ { "payload": { "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=", - "collection_id": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", + "collectionId": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", "id": "54cb8b4d-af33-4606-bc54-0f035ee30e0f", "name": "Test Resource After Upgrade Name UUID Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.2-uuid", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json index d9e220b8b..9f1e9b59a 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_16.json @@ -8,57 +8,57 @@ "controller": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" + "verificationMaterial": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" + "verificationMaterial": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" + "verificationMaterial": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" } ], "authentication": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4" ], "service": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-2", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-3" ] } diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json index 58f05c605..16a8a3f8b 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_indy_32.json @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6Mkt1M9dWKQMSUjE7VXxidhXpah8JGuebU6Pox7mU7iY8mW" + "verificationMaterial": "z6Mkt1M9dWKQMSUjE7VXxidhXpah8JGuebU6Pox7mU7iY8mW" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkoMnWWviQr7EKDe3CNKeUqWzyzQ3yMwqDuEGm3Vpp3Rq8" + "verificationMaterial": "z6MkoMnWWviQr7EKDe3CNKeUqWzyzQ3yMwqDuEGm3Vpp3Rq8" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkrEqEdWVB1b8ENt7VjStKnDtyiUK8vBXB9WnRN49VKXPx" + "verificationMaterial": "z6MkrEqEdWVB1b8ENt7VjStKnDtyiUK8vBXB9WnRN49VKXPx" }, { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b", - "verification_material": "z6MkeZENiP78isxXtk1AwusrLSGTH74LU48SkQJEmUpFCxFK" + "verificationMaterial": "z6MkeZENiP78isxXtk1AwusrLSGTH74LU48SkQJEmUpFCxFK" } ], "authentication": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3" ], "capability_invocation": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-4", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-1", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-2", "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:Nqoxg85PKyr9nPstjTpg5b#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json index 9cf3b8454..db89eedf2 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_lowcase.json @@ -9,30 +9,30 @@ "controller": [ "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" + "verificationMaterial": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" + "verificationMaterial": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" + "verificationMaterial": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" + "verificationMaterial": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" } ], "authentication": [ @@ -44,19 +44,19 @@ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-2", "serviceType": "type-2", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3" diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json index fb45f05b4..897e1c295 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_mixed.json @@ -8,65 +8,65 @@ "controller": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkfgridKfm6jqXYpNtRwLZ8w9JuZ6UaMs6ZLtGk2z1jRdS" + "verificationMaterial": "z6MkfgridKfm6jqXYpNtRwLZ8w9JuZ6UaMs6ZLtGk2z1jRdS" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkgBK3i3hWjXC392A1kXWiXHU8if679zXbv1W8RhShUtPU" + "verificationMaterial": "z6MkgBK3i3hWjXC392A1kXWiXHU8if679zXbv1W8RhShUtPU" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6MkkuYh8wsibknFcMWMsSsNptyK9YTR6pd6D5JUAJ3d9xni" + "verificationMaterial": "z6MkkuYh8wsibknFcMWMsSsNptyK9YTR6pd6D5JUAJ3d9xni" }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04", - "verification_material": "z6Mkf13qp3mXH9gnMKwG6ziGu8HiW7jHefNa4w8iM3NbZ7eg" + "verificationMaterial": "z6Mkf13qp3mXH9gnMKwG6ziGu8HiW7jHefNa4w8iM3NbZ7eg" } ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-3" ], "capability_invocation": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-1" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#key-4" ], "service": [ { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-2", "serviceType": "type-2", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-2" ] }, { "id": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04#service-3", "serviceType": "type-3", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-3" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3", diff --git a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json index b911b59d3..fa1ff0ce0 100644 --- a/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json +++ b/tests/upgrade/integration/generated/post/query - diddoc/diddoc_uuid_uppercase.json @@ -8,36 +8,36 @@ "controller": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" + "verificationMaterial": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" + "verificationMaterial": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" + "verificationMaterial": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" + "verificationMaterial": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" } ], "authentication": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", @@ -48,7 +48,7 @@ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2" ], @@ -56,11 +56,11 @@ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [] + "alsoKnownAs": [] } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json b/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json index 014144ae3..d6b002533 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_indy_16.json @@ -4,21 +4,21 @@ "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, "metadata": { - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Indy 16 symbols resource", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg/resources/7f2589aa-1279-4bd7-b704-f868772b460a", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json b/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json index b0030dae3..2b62f349f 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_post_indy.json @@ -4,12 +4,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0K" }, "metadata": { - "collection_id": "5rjaLzcffhGUH4nt4fyfAg", + "collectionId": "5rjaLzcffhGUH4nt4fyfAg", "id": "9fbb1b86-91f8-4942-97b9-725b7714131c", "name": "Test Resource After Upgrade Name Indy Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.1-indy", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -23,10 +23,10 @@ "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "d9c6f336c5edfc5034bc66aab9277daac01e1e85b41e49e6bf1b7a8f2a81c04f", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json b/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json index 040d2547c..2b0afd349 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_post_uuid.json @@ -4,12 +4,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0K" }, "metadata": { - "collection_id": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", + "collectionId": "91e5f0cf-5f1e-5c19-97d3-d313e84033b4", "id": "54cb8b4d-af33-4606-bc54-0f035ee30e0f", "name": "Test Resource After Upgrade Name UUID Case", - "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "version": "1.2-uuid", + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -23,10 +23,10 @@ "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "d9c6f336c5edfc5034bc66aab9277daac01e1e85b41e49e6bf1b7a8f2a81c04f", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json index 0c6e8a616..44003040d 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_1.json @@ -8,17 +8,17 @@ "id": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", "name": "UUID lowercase", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554/resources/b1c9406d-568c-4a41-9ed3-133fdf3e4974", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "9011d912-258e-4c76-93a8-200c2031685e" + "previousVersionId": "", + "nextVersionId": "9011d912-258e-4c76-93a8-200c2031685e" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json index 62c462b24..a03b14e0e 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_lower_2.json @@ -8,17 +8,17 @@ "id": "9011d912-258e-4c76-93a8-200c2031685e", "name": "UUID lowercase", "version": "", - "resource_type": "TestResourceType", - "also_known_as": [ + "resourceType": "TestResourceType", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554/resources/9011d912-258e-4c76-93a8-200c2031685e", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", - "next_version_id": "" + "previousVersionId": "b1c9406d-568c-4a41-9ed3-133fdf3e4974", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json index adf27339c..0658adc78 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_1.json @@ -8,17 +8,17 @@ "id": "f2f985da-62b5-457b-8167-54a0a739bdc4", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed1", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed1", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/f2f985da-62b5-457b-8167-54a0a739bdc4", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json index 94b3dd3d3..c487078cd 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_2.json @@ -8,17 +8,17 @@ "id": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed23", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed23", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "", - "next_version_id": "76ecedeb-225d-4164-90c2-a4857ac3c01a" + "previousVersionId": "", + "nextVersionId": "76ecedeb-225d-4164-90c2-a4857ac3c01a" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json index 63db2a3c7..477b96296 100644 --- a/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json +++ b/tests/upgrade/integration/generated/post/query - resource/resource_uuid_mixed_3.json @@ -8,17 +8,17 @@ "id": "76ecedeb-225d-4164-90c2-a4857ac3c01a", "name": "UUID mixed", "version": "", - "resource_type": "TestResourceTypeMixed23", - "also_known_as": [ + "resourceType": "TestResourceTypeMixed23", + "alsoKnownAs": [ { "uri": "did:cheqd:testnet:85d9e742-be4d-59e8-9b10-5449db2e2d04/resources/76ecedeb-225d-4164-90c2-a4857ac3c01a", "description": "did-url" } ], - "media_type": "application/json", + "mediaType": "application/json", "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "previous_version_id": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", - "next_version_id": "" + "previousVersionId": "b67d9bdc-b8f4-45fd-b5f6-1af38c26d4c8", + "nextVersionId": "" } } } \ No newline at end of file diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json index 1c9c7dbc8..87ee5d1c8 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_indy_16.json @@ -8,57 +8,57 @@ "controller": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" + "publicKeyMultibase": "z6MkpqEAYo7Ri8WYt6Kx4efLQdVJNgh4QzDf8ptVxJoexXdx" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" + "publicKeyMultibase": "z6MkqX2qR3rvt9UQpXsaYKFqGjX79ooFfwhhpZo8HfVXiDMP" }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg", - "verification_material": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" + "publicKeyMultibase": "z6MkqTTDS64UDxJGqNPb9FyeKRpz9YhDpV7qazkjXJkfRcfx" } ], "authentication": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-3" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4", "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#key-4" ], "service": [ { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:5rjaLzcffhGUH4nt4fyfAg#service-2", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-3" ] }, diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json index 5c3d835b3..127b2c12c 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_lowcase.json @@ -9,30 +9,30 @@ "controller": [ "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" + "publicKeyMultibase": "z6MkkEW1CN6EsnHgjX48Xvn2mAzhLrpQpDHh9iwpmxRn2NNi" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" + "publicKeyMultibase": "z6Mkmj3sSdRgFLgPfL8ujzZKYtoSg8dqgz72MSq8bexF7Azq" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" + "publicKeyMultibase": "z6MknAgHAdLyfHoaDroWRNw1XiLu7jU1GXfBnnGEkEvDEHoR" }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#key-4", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554", - "verification_material": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" + "publicKeyMultibase": "z6MkhiTEHjx3Ha49MWY48bXitkhwpgch4JK6H8xLMvftGRiG" } ], "authentication": [ @@ -43,20 +43,20 @@ "service": [ { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] }, { "id": "did:cheqd:testnet:2e5ca092-8264-47c7-9216-8b36e01e5554#service-2", - "serviceType": "type-2", - "service_endpoint": [ + "type": "type-2", + "serviceEndpoint": [ "endpoint-2" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2", "alias-3" diff --git a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json index 9da847232..b362ebeb2 100644 --- a/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json +++ b/tests/upgrade/integration/generated/post/update - diddoc/diddoc_uuid_uppercase.json @@ -8,60 +8,60 @@ "controller": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" + "publicKeyMultibase": "z6MkgsWjD4afggHtpX4Vzc8r6HzSzEU2jcpGsmuqnt9Vyg9j" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" + "publicKeyMultibase": "z6MkkkfNPuwBunkHrL8rzwUj6XsVji2bkAxGvsXJnP87QYvC" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" + "publicKeyMultibase": "z6MknyN27f3oxB3g8VmXb5nZU2GFcQdnMUF5bHWYG49BQkqM" }, { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", - "verificationMethodType": "Ed25519VerificationKey2020", + "type": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4", - "verification_material": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" + "publicKeyMultibase": "z6MkwCfE6fWEp2DTTsiK3wEFYTFthcGCiyiqkZADyrcCanP7" } ], "authentication": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-1", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-3", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-4", "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#key-2" ], "service": [ { "id": "did:cheqd:testnet:91e5f0cf-5f1e-5c19-97d3-d313e84033b4#service-1", - "serviceType": "type-1", - "service_endpoint": [ + "type": "type-1", + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [] + "alsoKnownAs": [] }, "signInputs": [ { diff --git a/tests/upgrade/integration/param_change_proposal_test.go b/tests/upgrade/integration/param_change_proposal_test.go index d78eaf20c..8b410c727 100644 --- a/tests/upgrade/integration/param_change_proposal_test.go +++ b/tests/upgrade/integration/param_change_proposal_test.go @@ -16,13 +16,13 @@ import ( var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for node catching up", func() { By("pinging the node status until catching up is flagged as false") - err := cli.WaitForCaughtUp(cli.Validator0, cli.CLIBinaryName, cli.VotingPeriod*6) + err := cli.WaitForCaughtUp(cli.Validator0, cli.CliBinaryName, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) It("should submit a parameter change proposal for did module", func() { By("passing the proposal file to the container") - _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, "proposal", "existing", "param_change_did.json"), cli.DockerHome, cli.Validator0) + _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "existing", "param_change_did.json"), cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) By("sending a SubmitParamChangeProposal transaction from `validator0` container") @@ -61,11 +61,11 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for the proposal to pass", func() { By("getting the current block height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for the proposal to pass") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+20, cli.VotingPeriod*3) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+20, cli.VotingPeriod*3) Expect(err).To(BeNil()) }) @@ -83,14 +83,14 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { By("checking against the expected fee params") var expectedFeeParams didtypes.FeeParams - _, err = Loader(filepath.Join(GeneratedJSONDir, "proposal", "expected", "param_change_did.json"), &expectedFeeParams) + _, err = Loader(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "expected", "param_change_did.json"), &expectedFeeParams) Expect(err).To(BeNil()) Expect(feeParams).To(Equal(expectedFeeParams)) }) It("should submit a parameter change proposal for resource module", func() { By("passing the proposal file to the container") - _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, "proposal", "existing", "param_change_resource.json"), cli.DockerHome, cli.Validator0) + _, err := cli.LocalnetExecCopyAbsoluteWithPermissions(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "existing", "param_change_resource.json"), cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) By("sending a SubmitParamChangeProposal transaction from `validator0` container") @@ -129,11 +129,11 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { It("should wait for the proposal to pass", func() { By("getting the current block height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for the proposal to pass") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+20, cli.VotingPeriod*3) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+20, cli.VotingPeriod*3) Expect(err).To(BeNil()) }) @@ -151,7 +151,7 @@ var _ = Describe("Upgrade - Fee parameter change proposal", func() { By("checking against the expected fee params") var expectedFeeParams resourcetypes.FeeParams - _, err = Loader(filepath.Join(GeneratedJSONDir, "proposal", "expected", "param_change_resource.json"), &expectedFeeParams) + _, err = Loader(filepath.Join(GeneratedJSONDir, ProposalJSONDir, "expected", "param_change_resource.json"), &expectedFeeParams) Expect(err).To(BeNil()) Expect(feeParams).To(Equal(expectedFeeParams)) }) diff --git a/tests/upgrade/integration/post_test.go b/tests/upgrade/integration/post_test.go index fb7ae55cf..fc968eebd 100644 --- a/tests/upgrade/integration/post_test.go +++ b/tests/upgrade/integration/post_test.go @@ -1,4 +1,4 @@ -//go:build upgrade_integration +// go:build upgrade_integration package integration @@ -6,6 +6,7 @@ import ( "fmt" "path/filepath" + clihelpers "github.com/cheqd/cheqd-node/tests/integration/helpers" cli "github.com/cheqd/cheqd-node/tests/upgrade/integration/cli" didcli "github.com/cheqd/cheqd-node/x/did/client/cli" didtypesv2 "github.com/cheqd/cheqd-node/x/did/types" @@ -16,20 +17,36 @@ import ( ) var _ = Describe("Upgrade - Post", func() { + var feeParams didtypesv2.FeeParams + var resourceFeeParams resourcetypesv2.FeeParams + + BeforeEach(func() { + // Query fee params + res, err := cli.QueryParams(cli.Validator0, didtypesv2.ModuleName, string(didtypesv2.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = clihelpers.Codec.UnmarshalJSON([]byte(res.Value), &feeParams) + Expect(err).To(BeNil()) + + res, err = cli.QueryParams(cli.Validator0, resourcetypesv2.ModuleName, string(resourcetypesv2.ParamStoreKeyFeeParams)) + Expect(err).To(BeNil()) + err = clihelpers.Codec.UnmarshalJSON([]byte(res.Value), &resourceFeeParams) + Expect(err).To(BeNil()) + }) + Context("After a software upgrade execution has concluded", func() { It("should wait for node catching up", func() { By("pinging the node status until catching up is flagged as false") - err := cli.WaitForCaughtUp(cli.Validator0, cli.CLIBinaryName, cli.VotingPeriod*6) + err := cli.WaitForCaughtUp(cli.Validator0, cli.CliBinaryName, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) It("should wait for a certain number of blocks to be produced", func() { By("fetching the current chain height") - currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CLIBinaryName) + currentHeight, err := cli.GetCurrentBlockHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) By("waiting for 10 blocks to be produced on top, after the upgrade") - err = cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, currentHeight+10, cli.VotingPeriod*6) + err = cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, currentHeight+10, cli.VotingPeriod*6) Expect(err).To(BeNil()) }) @@ -52,7 +69,7 @@ var _ = Describe("Upgrade - Post", func() { Expect(err).To(BeNil()) for _, payload := range DidDocUpdatePayloads { - var DidDocUpdatePayload didtypesv2.MsgUpdateDidDocPayload + var DidDocUpdatePayload didcli.DIDDocument var DidDocUpdateSignInput []didcli.SignInput testCase := GetCaseName(payload) @@ -63,7 +80,8 @@ var _ = Describe("Upgrade - Post", func() { DidDocUpdateSignInput, err = Loader(payload, &DidDocUpdatePayload) Expect(err).To(BeNil()) - res, err := cli.UpdateDid(DidDocUpdatePayload, DidDocUpdateSignInput, cli.Validator0) + tax := feeParams.UpdateDid.String() + res, err := cli.UpdateDid(DidDocUpdatePayload, DidDocUpdateSignInput, cli.Validator0, "", tax) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) } @@ -86,7 +104,8 @@ var _ = Describe("Upgrade - Post", func() { DidDocDeactivateSignInput, err = Loader(payload, &DidDocDeacctivatePayload) Expect(err).To(BeNil()) - res, err := cli.DeactivateDid(DidDocDeacctivatePayload, DidDocDeactivateSignInput, cli.Validator0) + tax := feeParams.DeactivateDid.String() + res, err := cli.DeactivateDid(DidDocDeacctivatePayload, DidDocDeactivateSignInput, cli.Validator0, tax) Expect(err).To(BeNil()) Expect(res.Code).To(BeEquivalentTo(0)) } @@ -115,6 +134,7 @@ var _ = Describe("Upgrade - Post", func() { ResourceFile, signInputs, cli.Validator0, + resourceFeeParams.Json.String(), ) Expect(err).To(BeNil()) @@ -194,7 +214,7 @@ var _ = Describe("Upgrade - Post", func() { Expect(res.Resource.Metadata.ResourceType).To(Equal(ResourceCreateRecord.Metadata.ResourceType)) Expect(res.Resource.Metadata.AlsoKnownAs).To(Equal(ResourceCreateRecord.Metadata.AlsoKnownAs)) Expect(res.Resource.Metadata.MediaType).To(Equal(ResourceCreateRecord.Metadata.MediaType)) - // Created fills while creating. We just ignoring it while checking. + // Created is populated on successful creation. We are ignoring it here. // Expect(res.Resource.Metadata.Created).To(Equal(ResourceCreateRecord.Metadata.Created)) Expect(res.Resource.Metadata.Checksum).To(Equal(ResourceCreateRecord.Metadata.Checksum)) Expect(res.Resource.Metadata.PreviousVersionId).To(Equal(ResourceCreateRecord.Metadata.PreviousVersionId)) diff --git a/tests/upgrade/integration/pre_test.go b/tests/upgrade/integration/pre_test.go index 4576a011f..fc1fb2a70 100644 --- a/tests/upgrade/integration/pre_test.go +++ b/tests/upgrade/integration/pre_test.go @@ -11,7 +11,6 @@ import ( didtypesv1 "github.com/cheqd/cheqd-node/x/did/types/v1" resourcetypesv1 "github.com/cheqd/cheqd-node/x/resource/types/v1" govtypesv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - // upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" <-- TODO: uncomment when whole sequence of upgrade tests is ready . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) @@ -20,24 +19,10 @@ var _ = Describe("Upgrade - Pre", func() { Context("Before a softare upgrade execution is initiated", func() { It("should wait for chain to bootstrap", func() { By("pinging the node status until the dvoting end height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, cli.BootstrapHeight, cli.BootstrapPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, cli.BootstrapHeight, cli.BootstrapPeriod) Expect(err).To(BeNil()) }) - // TODO: uncomment when whole sequence of upgrade tests is ready - // It("should match the expected module version map", func() { - // By("loading the expected module version map") - // var expected upgradetypes.QueryModuleVersionsResponse - // _, err := Loader(filepath.Join(GeneratedJSONDir, "pre", "query - module-version-map", "v069.json"), &expected) - // Expect(err).To(BeNil()) - - // By("matching the expected module version map") - // actual, err := cli.QueryModuleVersionMap(cli.Validator0) - // Expect(err).To(BeNil()) - - // Expect(actual.ModuleVersions).To(Equal(expected.ModuleVersions), "module version map mismatch") - // }) - It("should load and run existing diddoc payloads - case: create", func() { By("matching the glob pattern for existing diddoc payloads") ExistingDidDocCreatePayloads, err := RelGlob(GeneratedJSONDir, "pre", "create - diddoc", "*.json") @@ -112,7 +97,6 @@ var _ = Describe("Upgrade - Pre", func() { _, err = cli.LocalnetExecCopyAbsoluteWithPermissions(ResourceFile, cli.DockerHome, cli.Validator0) Expect(err).To(BeNil()) - // TODO: Add resource file. Right now, it is not possible to create a resource without a file. So we need to copy a file to the container home directory. res, err := cli.CreateResourceLegacy( ResourceCreatePayload.CollectionId, ResourceCreatePayload.Id, @@ -132,7 +116,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should calculate the upgrade height", func() { By("getting the current block height and calculating the voting end height") var err error - UPGRADE_HEIGHT, VOTING_END_HEIGHT, err = cli.CalculateUpgradeHeight(cli.Validator0, cli.CLIBinaryName) + UPGRADE_HEIGHT, VOTING_END_HEIGHT, err = cli.CalculateUpgradeHeight(cli.Validator0, cli.CliBinaryName) Expect(err).To(BeNil()) fmt.Printf("Upgrade height: %d\n", UPGRADE_HEIGHT) fmt.Printf("Voting end height: %d\n", VOTING_END_HEIGHT) @@ -182,7 +166,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should wait for the voting end height to be reached", func() { By("pinging the node status until the voting end height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, VOTING_END_HEIGHT, cli.VotingPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, VOTING_END_HEIGHT, cli.VotingPeriod) Expect(err).To(BeNil()) }) @@ -195,7 +179,7 @@ var _ = Describe("Upgrade - Pre", func() { It("should wait for the upgrade height to be reached", func() { By("pinging the node status until the upgrade height is reached") - err := cli.WaitForChainHeight(cli.Validator0, cli.CLIBinaryName, UPGRADE_HEIGHT, cli.VotingPeriod) + err := cli.WaitForChainHeight(cli.Validator0, cli.CliBinaryName, UPGRADE_HEIGHT, cli.VotingPeriod) Expect(err).To(BeNil()) }) }) diff --git a/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json b/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json index ab9b1c224..0b24a9eda 100644 --- a/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/checksum/existing/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [], "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "controller": [ @@ -8,17 +8,17 @@ "authentication": [ "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1" ], - "assertion_method": [], - "capability_invocation": [], - "capability_delegation": [], - "key_agreement": [], - "also_known_as": [], - "verification_method": [ + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ { "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "verification_material": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" + "verificationMaterial": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" } ], "service": [] @@ -26,9 +26,9 @@ "metadata": { "created": "2021-09-14T13:00:00Z", "updated": "2021-09-14T13:00:00Z", - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", "deactivated": false, - "next_version_id": "", - "previous_version_id": "" + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json b/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json index 6ccd6f415..7878c66f2 100644 --- a/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/checksum/existing/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json index ab9b1c224..0b24a9eda 100644 --- a/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/checksum/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [], "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", "controller": [ @@ -8,17 +8,17 @@ "authentication": [ "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1" ], - "assertion_method": [], - "capability_invocation": [], - "capability_delegation": [], - "key_agreement": [], - "also_known_as": [], - "verification_method": [ + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ { "id": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "verification_material": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" + "verificationMaterial": "z6MkjndtVVvRivBfWddHt5QC2WHoguixzrVBxTTnCJW2ArYp" } ], "service": [] @@ -26,9 +26,9 @@ "metadata": { "created": "2021-09-14T13:00:00Z", "updated": "2021-09-14T13:00:00Z", - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", "deactivated": false, - "next_version_id": "", - "previous_version_id": "" + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json index 878591935..833e3e69b 100644 --- a/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/checksum/expected/v2/resource.json @@ -1,16 +1,16 @@ { - "Resource": { - "Data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" + "resource": { + "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, - "Metadata": { - "Collection_Id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "Id": "7f2589aa-1279-4bd7-b704-f868772b460a", - "Name": "Test Resource", - "Resource_Type": "test-resource-type", - "Media_Type": "application/json", - "Created": "2022-11-01T10:54:01Z", - "Checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", - "Previous_Version_Id": null, - "Next_Version_Id": null + "metadata": { + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "id": "7f2589aa-1279-4bd7-b704-f868772b460a", + "name": "Test Resource", + "resourceType": "test-resource-type", + "mediaType": "application/json", + "created": "2022-11-01T10:54:01Z", + "checksum": "4f479bba31f71859d9943651538c8df2119804eceb7f58a0de241789ff214af4", + "previousVersionId": null, + "nextVersionId": null } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json index 48a9d544b..6546c44f4 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" + "verificationMaterial": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" + "verificationMaterial": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" + "verificationMaterial": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" }, { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:xcWigjiDhDTaBGRX", - "verification_material": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" + "verificationMaterial": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" } ], "authentication": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-1", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-2", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-3", "did:cheqd:testnet:xcWigjiDhDTaBGRX#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:xcWigjiDhDTaBGRX#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", - "next_version_id": "", - "previous_version_id": "" + "versionId": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json index 81f879fce..799aaea43 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" + "verificationMaterial": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" + "verificationMaterial": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" + "verificationMaterial": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" }, { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2", - "verification_material": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" + "verificationMaterial": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" } ], "authentication": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-1", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-2", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-3", "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:SWFYv4aPjJtxZ1q2#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "7c69f199-f71b-48b3-a570-950fa5e70ded", - "next_version_id": "", - "previous_version_id": "" + "versionId": "7c69f199-f71b-48b3-a570-950fa5e70ded", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json index c4e496c5c..fc33ff2c9 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "xcWigjiDhDTaBGRX", + "collectionId": "xcWigjiDhDTaBGRX", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json index d8ade8d1e..03521af87 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/existing/v2/resource_2.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "SWFYv4aPjJtxZ1q2", + "collectionId": "SWFYv4aPjJtxZ1q2", "id": "406855d8-546b-4446-b72a-2614c7d0c0d5", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json index 31f865bfb..20aec7cc1 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" + "verificationMaterial": "z6MkeXDkMqPMfDgq8ZQkRzwRZAo8TviYAo5nr957E56nTXE1" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" + "verificationMaterial": "z6MkjnP7TsFXr32rX3EoD6uUEzE2Fp2pPcGZYtBCEKL1fUAT" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" + "verificationMaterial": "z6MkofRWLT37dkx57TYhETh2ytBzifDMvV6dpVrLC5ugXm17" }, { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC", - "verification_material": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" + "verificationMaterial": "z6MkirAS5q6B4EQD1Vhe5vXFmorUpex6rLjuSH9eVYCHWK26" } ], "authentication": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-4", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-1", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-2", "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:7Hty8uGafcEsU7EpJEAPUC#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", - "next_version_id": "", - "previous_version_id": "" + "versionId": "e604fc38-a7b3-4bf7-b0b0-053ad9b15957", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json index 5391aa302..4fab24741 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,54 +8,54 @@ "controller": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" + "verificationMaterial": "z6MknYedstxzbpY2ieWByJ39zoBCxAUhEnqgzAjWttPq8xou" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" + "verificationMaterial": "z6Mkeu8apRGvw3LHEkxp7XGzWoHedYJEgpzQ5Xv7k7j8cqsK" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" + "verificationMaterial": "z6MkoD8YhYJseVZyBsXNN9iPemNRQUCgHwqkcCEgJT7pBv2M" }, { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg", - "verification_material": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" + "verificationMaterial": "z6MkkwHQ4yEBr4EvNXcrKLBJTX1tVYdyVwTm3w4ZKtGXFjKi" } ], "authentication": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-1", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-2", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-3", "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#key-4" ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ], @@ -63,7 +63,7 @@ { "id": "did:cheqd:testnet:5aayeuitt5VD2VWbL2zopg#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "7c69f199-f71b-48b3-a570-950fa5e70ded", - "next_version_id": "", - "previous_version_id": "" + "versionId": "7c69f199-f71b-48b3-a570-950fa5e70ded", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json index 5c80dcc41..1eae5c4a8 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "7Hty8uGafcEsU7EpJEAPUC", + "collectionId": "7Hty8uGafcEsU7EpJEAPUC", "id": "7f2589aa-1279-4bd7-b704-f868772b460a", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json index f0efd8115..01ba95d87 100644 --- a/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json +++ b/tests/upgrade/unit/generated/payload/indy_style/expected/v2/resource_2.json @@ -1,14 +1,14 @@ { "metadata": { - "collection_id": "5aayeuitt5VD2VWbL2zopg", + "collectionId": "5aayeuitt5VD2VWbL2zopg", "id": "406855d8-546b-4446-b72a-2614c7d0c0d5", "name": "Test Resource", - "resource_type": "test-resource-type", - "media_type": "application/json", + "resourceType": "test-resource-type", + "mediaType": "application/json", "created": "2022-11-01T10:54:01Z", "checksum": "T0ebujH3GFnZlDZRU4yN8hGYBOzrf1ig3iQXif8hSvQ=", - "previous_version_id": null, - "next_version_id": null + "previousVersionId": null, + "nextVersionId": null }, "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json index 09d8954fd..e7fd0e1e2 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MknmnJvvx4xK3EQQsbBS7DuMvsvKG7wF9GBXFxSVsVmYzV" + "verificationMaterial": "z6MknmnJvvx4xK3EQQsbBS7DuMvsvKG7wF9GBXFxSVsVmYzV" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MkotEbRMNwstgbk41M11yEBzSgVSnD5imzmQD83vvZGDur" + "verificationMaterial": "z6MkotEbRMNwstgbk41M11yEBzSgVSnD5imzmQD83vvZGDur" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6MknTEAYV9n61NZyqZdBF565j8YoXUzpBbvy4frDWtNuiAW" + "verificationMaterial": "z6MknTEAYV9n61NZyqZdBF565j8YoXUzpBbvy4frDWtNuiAW" }, { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE", - "verification_material": "z6Mkjt4a7XEZrZTY2MSL1myF8bfez6szk5BRrHVGEKjVvfWT" + "verificationMaterial": "z6Mkjt4a7XEZrZTY2MSL1myF8bfez6szk5BRrHVGEKjVvfWT" } ], "authentication": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-4", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-1", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-2", "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:GR4bwyhJMubXbHvHTGiYnE#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "75e0cf07-1729-40de-bd88-a4e091eff137", - "next_version_id": "", - "previous_version_id": "" + "versionId": "75e0cf07-1729-40de-bd88-a4e091eff137", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json index bd73053bb..56ab7c3f4 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/diddoc_2.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6Mkkc6v4z1jVWHBdaXR9TRSU9N9PSt1PK5czryfCCeYQ2pT" + "verificationMaterial": "z6Mkkc6v4z1jVWHBdaXR9TRSU9N9PSt1PK5czryfCCeYQ2pT" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6MkhvhXhLy9KbcVeXRoViiBMPUR6qUrPaz9yJCqLY4AjPe2" + "verificationMaterial": "z6MkhvhXhLy9KbcVeXRoViiBMPUR6qUrPaz9yJCqLY4AjPe2" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6Mkfd2VEesedDybq5UPhGfSqDQABcDTz1hraLbQcRHavP8v" + "verificationMaterial": "z6Mkfd2VEesedDybq5UPhGfSqDQABcDTz1hraLbQcRHavP8v" }, { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez", - "verification_material": "z6MkhpM45nn2SvgyUBrRoQop7rqSHH43n8c7tSBib7cCc1jK" + "verificationMaterial": "z6MkhpM45nn2SvgyUBrRoQop7rqSHH43n8c7tSBib7cCc1jK" } ], "authentication": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-4", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-1", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-2", "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:7RPNZSCSaQXTdYwFmQy6ez#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "c57cb7a2-2b35-4d0d-b453-eda463ae58ef", - "next_version_id": "", - "previous_version_id": "" + "versionId": "c57cb7a2-2b35-4d0d-b453-eda463ae58ef", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json index 27c197cbd..aeecfee58 100644 --- a/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json +++ b/tests/upgrade/unit/generated/payload/protobuf/expected/v2/resource.json @@ -1,16 +1,16 @@ { - "Resource": { + "resource": { "data": "eyAibWVzc2FnZSI6ICJoZWxsbyB3b3JsZCJ9" }, - "Metadata": { - "Collection_Id": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", - "Id": "7f2589aa-1279-4bd7-b704-f868772b460a", - "Name": "Test Resource", - "Resource_Type": "test-resource-type", - "Media_Type": "application/json", - "Created": "2022-11-01T10:54:01Z", - "Checksum": "7b76f4738e36f7c7dcd5cd78f5a7db7f873cf7de9f6fddb8dbb69ee357b8eb8f5bf77e1c6b8f79f7dd5befce766fce797b20226d657373616765223a202268656c6c6f20776f726c64227d", - "Previous_Version_Id": null, - "Next_Version_Id": null + "metadata": { + "collectionId": "97096fb1-63ea-4f81-b296-8eb5da6ab6eb", + "id": "7f2589aa-1279-4bd7-b704-f868772b460a", + "name": "Test Resource", + "resourceType": "test-resource-type", + "mediaType": "application/json", + "created": "2022-11-01T10:54:01Z", + "checksum": "7b76f4738e36f7c7dcd5cd78f5a7db7f873cf7de9f6fddb8dbb69ee357b8eb8f5bf77e1c6b8f79f7dd5befce766fce797b20226d657373616765223a202268656c6c6f20776f726c64227d", + "previousVersionId": null, + "nextVersionId": null } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json index d63c02b90..10f4349d6 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_1.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "0c3bc512-a55d-4815-8479-a7d43116f254", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "Ba6ogb568jBvvPUrKLH7cn" + "previousVersionId": "", + "nextVersionId": "Ba6ogb568jBvvPUrKLH7cn" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json index d150b0e05..9416c049b 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_2.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-02T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "0c3bc512-a55d-4815-8479-a7d43116f254", - "next_version_id": "c69b316e-0ca0-4885-a8d9-40cedf885c56" + "previousVersionId": "0c3bc512-a55d-4815-8479-a7d43116f254", + "nextVersionId": "c69b316e-0ca0-4885-a8d9-40cedf885c56" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json index 68f2f636a..b6616afea 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json +++ b/tests/upgrade/unit/generated/payload/resource_links/existing/v2/resource_type_3.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "c69b316e-0ca0-4885-a8d9-40cedf885c56", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_3", - "also_known_as": [ + "resourceType": "CL-Schema_3", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-03T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", - "next_version_id": "" + "previousVersionId": "91e0cb40-da1c-46b6-b497-c8aab06198f7", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json index b85fce99d..97d41d0b6 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_1.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "0c3bc512-a55d-4815-8479-a7d43116f254", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "91e0cb40-da1c-46b6-b497-c8aab06198f7" + "previousVersionId": "", + "nextVersionId": "91e0cb40-da1c-46b6-b497-c8aab06198f7" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json index 2d13249fe..8464275de 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_2.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "91e0cb40-da1c-46b6-b497-c8aab06198f7", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_12", - "also_known_as": [ + "resourceType": "CL-Schema_12", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-02T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "0c3bc512-a55d-4815-8479-a7d43116f254", - "next_version_id": "" + "previousVersionId": "0c3bc512-a55d-4815-8479-a7d43116f254", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json index 723c69dfa..3bdab0c69 100644 --- a/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json +++ b/tests/upgrade/unit/generated/payload/resource_links/expected/v2/resource_type_3.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "Ad8bNYGViXsuJNFEttRBrW", + "collectionId": "Ad8bNYGViXsuJNFEttRBrW", "id": "c69b316e-0ca0-4885-a8d9-40cedf885c56", "name": "Test Resource", "version": "", - "resource_type": "CL-Schema_3", - "also_known_as": [ + "resourceType": "CL-Schema_3", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-03T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json index cc38c72ef..f760e83fd 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_lowcase.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", - "next_version_id": "", - "previous_version_id": "" + "versionId": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json index 8e0dcb6f9..a3088740e 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_mixed.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" + "verificationMaterial": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" + "verificationMaterial": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" + "verificationMaterial": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" }, { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d", - "verification_material": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" + "verificationMaterial": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" } ], "authentication": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-4", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-1", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-2", "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:C1594E93-dEd6-4244-9CC4-74af38dab09d#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", - "next_version_id": "", - "previous_version_id": "" + "versionId": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json index 1bf03c3f9..1da8da26d 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/diddoc_upper.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" + "verificationMaterial": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" + "verificationMaterial": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" + "verificationMaterial": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" }, { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", - "verification_material": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" + "verificationMaterial": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" } ], "authentication": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-4", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-1", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-2", "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "efcd0b4f-9b24-4718-b596-50ccab40aabf", - "next_version_id": "", - "previous_version_id": "" + "versionId": "efcd0b4f-9b24-4718-b596-50ccab40aabf", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json index becb7f90b..d990353ad 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_lowcase.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "e77cc679-ada0-4a71-8738-918f388fcbb5", + "collectionId": "e77cc679-ada0-4a71-8738-918f388fcbb5", "id": "58a4f59a-bddf-41b4-ab54-d7a9e7ad90ff", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json index c2f6a8898..f7773ddeb 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_mixed.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "C1594E93-dEd6-4244-9CC4-74af38dab09d", + "collectionId": "C1594E93-dEd6-4244-9CC4-74af38dab09d", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json index 1ca422ef1..c19229c71 100644 --- a/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/existing/v2/resource_upper.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", + "collectionId": "FDFECBD2-A84A-4FB2-B634-E3FDB00F2ABC", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json index cc38c72ef..f760e83fd 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_lowcase.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", - "next_version_id": "", - "previous_version_id": "" + "versionId": "0e7a0369-e789-4381-96a4-c1bb9cbb8a09", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json index 3b1c42bd6..65ae076d1 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_mixed.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" + "verificationMaterial": "z6Mkhu3KZFd39BSD8kDNbiWyXsXXZ9uy8qMNrqbrkkV9z4YD" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" + "verificationMaterial": "z6MkwUMt89ooTRMGDrPXX1Uei93ouEhuNpgcXtRaazE33Dcw" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" + "verificationMaterial": "z6MksenQTTP7bs4HxfAisuJbh6qxW9ffucX5p5tpPkeQ4kmm" }, { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884", - "verification_material": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" + "verificationMaterial": "z6MkvLgz1avSwuTpMn9KwHR9edSrkJWypozqJgcLkRc3Ahn5" } ], "authentication": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-4", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-1", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-2", "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:a35d7486-1749-55bf-96d4-683958a9a884#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", - "next_version_id": "", - "previous_version_id": "" + "versionId": "80e5fa13-d60f-49fc-97b3-f75201cd7dde", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json index c299227cd..ff26461da 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/diddoc_upper.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" + "verificationMaterial": "z6Mkk9TamLok1PQjyBWTMqbJQHSXJKFv1HNCGhfoJehKLQSd" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" + "verificationMaterial": "z6MkrsTjbK78f9j51EDUsHtPpc76A23h7i5V3x1cTUbtRy5A" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" + "verificationMaterial": "z6MkssCp5pzQWtJnHQSSjfkzp5hz2haR2vnfPaAAv7uAjBL8" }, { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808", - "verification_material": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" + "verificationMaterial": "z6MkvHQLprMMxhavc1DTsbWgDFDdF5FaCVuZyPHuahpMMDUE" } ], "authentication": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-4", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-1", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-2", "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:d87f512c-cbfc-58d1-b995-f526589ad808#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "efcd0b4f-9b24-4718-b596-50ccab40aabf", - "next_version_id": "", - "previous_version_id": "" + "versionId": "efcd0b4f-9b24-4718-b596-50ccab40aabf", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json index becb7f90b..d990353ad 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_lowcase.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "e77cc679-ada0-4a71-8738-918f388fcbb5", + "collectionId": "e77cc679-ada0-4a71-8738-918f388fcbb5", "id": "58a4f59a-bddf-41b4-ab54-d7a9e7ad90ff", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json index 360dfe93e..c3f60c7c3 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_mixed.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "a35d7486-1749-55bf-96d4-683958a9a884", + "collectionId": "a35d7486-1749-55bf-96d4-683958a9a884", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json index 59c5bbffe..4633bba79 100644 --- a/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json +++ b/tests/upgrade/unit/generated/payload/uuid/expected/v2/resource_upper.json @@ -3,12 +3,12 @@ "data": "eyJhdHRyIjpbIm5hbWUiLCJhZ2UiXX0=" }, "metadata": { - "collection_id": "d87f512c-cbfc-58d1-b995-f526589ad808", + "collectionId": "d87f512c-cbfc-58d1-b995-f526589ad808", "id": "031ce9bf-2960-4936-9aa4-6261a6c72a46", "name": "Test Resource Name", "version": "", - "resource_type": "CL-Schema", - "also_known_as": [ + "resourceType": "CL-Schema", + "alsoKnownAs": [ { "uri": "https://example.com/alternative-uri", "description": "" @@ -18,10 +18,10 @@ "description": "Alternative URI description" } ], - "media_type": "application/json", + "mediaType": "application/json", "created": "2021-01-01T00:00:00Z", "checksum": "AKAIW1uO3jl8+fhEMe2Q815vZ+rTztzJmi40yp5JPt8=", - "previous_version_id": "", - "next_version_id": "" + "previousVersionId": "", + "nextVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json b/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json index c68a908e0..6f8004fea 100644 --- a/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json +++ b/tests/upgrade/unit/generated/payload/version_id/existing/v2/diddoc_hash.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "EDEAD35C83E20A72872ACD3C36B7BA42300712FC8E3EEE1340E47E2F1B216B2D", - "next_version_id": "", - "previous_version_id": "" + "versionId": "EDEAD35C83E20A72872ACD3C36B7BA42300712FC8E3EEE1340E47E2F1B216B2D", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json b/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json index 656708ea9..64d327604 100644 --- a/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json +++ b/tests/upgrade/unit/generated/payload/version_id/expected/v2/diddoc_hash.json @@ -1,5 +1,5 @@ { - "did_doc": { + "didDoc": { "context": [ "abc", "def" @@ -8,48 +8,48 @@ "controller": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5" ], - "verification_method": [ + "verificationMethod": [ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" + "verificationMaterial": "z6Mkw16FU8WVLAqScmkaj1AHHfGVSzAjsbccjuxYGiP2ZSiN" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" + "verificationMaterial": "z6Mks54F5e3v1uDtdGTmFRd71ed19h56SyABVL7SwPoSk4Fq" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" + "verificationMaterial": "z6MkfsqJdjYSsuBSL3osT7a9VRAMhKPztqvA2otbr6cKWvRJ" }, { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "verificationMethodType": "Ed25519VerificationKey2020", "controller": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5", - "verification_material": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" + "verificationMaterial": "z6MknyD9Tm3NN6khHabqkt5jEwfSaRCXM4stL6UhJjwrgYZG" } ], "authentication": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "assertion_method": [ + "assertionMethod": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3" ], - "capability_invocation": [ + "capabilityInvocation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1" ], - "capability_delegation": [ + "capabilityDelegation": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-4", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2" ], - "key_agreement": [ + "keyAgreement": [ "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-1", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-2", "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#key-3", @@ -59,12 +59,12 @@ { "id": "did:cheqd:testnet:e77cc679-ada0-4a71-8738-918f388fcbb5#service-1", "serviceType": "type-1", - "service_endpoint": [ + "serviceEndpoint": [ "endpoint-1" ] } ], - "also_known_as": [ + "alsoKnownAs": [ "alias-1", "alias-2" ] @@ -73,8 +73,8 @@ "created": "2021-01-01T00:00:00Z", "updated": "2021-01-01T00:00:00Z", "deactivated": false, - "version_id": "b459d3a4-5f02-565b-b137-d9f8436edc5b", - "next_version_id": "", - "previous_version_id": "" + "versionId": "b459d3a4-5f02-565b-b137-d9f8436edc5b", + "nextVersionId": "", + "previousVersionId": "" } } \ No newline at end of file diff --git a/tests/upgrade/unit/setup/loader.go b/tests/upgrade/unit/setup/loader.go index f88daca89..ed6e309c8 100644 --- a/tests/upgrade/unit/setup/loader.go +++ b/tests/upgrade/unit/setup/loader.go @@ -76,7 +76,7 @@ func (l Loader) LoadFile( case *didtypes.DidDocWithMetadata: err = setup.Cdc.UnmarshalJSON(file, dataChunk) case *resourcetypes.ResourceWithMetadata: - err = json.Unmarshal(file, dataChunk) + err = setup.Cdc.UnmarshalJSON(file, dataChunk) default: err = json.Unmarshal(file, dataChunk) } diff --git a/x/did/client/cli/tx.go b/x/did/client/cli/tx.go index 05ac7af56..e7d2d4c4e 100644 --- a/x/did/client/cli/tx.go +++ b/x/did/client/cli/tx.go @@ -8,12 +8,40 @@ import ( "github.com/cheqd/cheqd-node/x/did/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/spf13/cobra" + tmcli "github.com/tendermint/tendermint/libs/cli" ) +const ( + FlagVersionID = "version-id" +) + +type DIDDocument struct { + Context []string `json:"context"` + ID string `json:"id"` + Controller []string `json:"controller,omitempty"` + VerificationMethod []VerificationMethod `json:"verificationMethod,omitempty"` + Authentication []string `json:"authentication,omitempty"` + AssertionMethod []string `json:"assertionMethod,omitempty"` + CapabilityInvocation []string `json:"capabilityInvocation,omitempty"` + CapabilityDelegation []string `json:"capabilityDelegation,omitempty"` + KeyAgreement []string `json:"keyAgreement,omitempty"` + Service []Service `json:"service,omitempty"` + AlsoKnownAs []string `json:"alsoKnownAs,omitempty"` +} + +type VerificationMethod map[string]any + +type Service struct { + ID string `json:"id"` + Type string `json:"type"` + ServiceEndpoint []string `json:"serviceEndpoint"` +} + type PayloadWithSignInputs struct { Payload json.RawMessage SignInputs []SignInput @@ -24,6 +52,37 @@ type SignInput struct { PrivKey ed25519.PrivateKey } +// AddTxFlagsToCmd adds common flags to a module tx command. +func AddTxFlagsToCmd(cmd *cobra.Command) { + cmd.Flags().StringP(tmcli.OutputFlag, "o", "json", "Output format (text|json)") + cmd.Flags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used") + cmd.Flags().String(flags.FlagFrom, "", "Name or address of private key with which to sign") + cmd.Flags().Uint64P(flags.FlagAccountNumber, "a", 0, "The account number of the signing account (offline mode only)") + cmd.Flags().Uint64P(flags.FlagSequence, "s", 0, "The sequence number of the signing account (offline mode only)") + cmd.Flags().String(flags.FlagNote, "", "Note to add a description to the transaction (previously --memo)") + cmd.Flags().String(flags.FlagGasPrices, "", "Gas prices in decimal format to determine the transaction fee (e.g. 50ncheq)") + cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", ": to tendermint rpc interface for this chain") + cmd.Flags().Bool(flags.FlagUseLedger, false, "Use a connected Ledger device") + cmd.Flags().StringP(flags.FlagBroadcastMode, "b", flags.BroadcastSync, "Transaction broadcasting mode (sync|async|block)") + cmd.Flags().Bool(flags.FlagDryRun, false, "ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)") + cmd.Flags().Bool(flags.FlagGenerateOnly, false, "Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)") + cmd.Flags().Bool(flags.FlagOffline, false, "Offline mode (does not allow any online functionality)") + cmd.Flags().BoolP(flags.FlagSkipConfirmation, "y", false, "Skip tx broadcasting prompt confirmation") + cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test|memory)") + cmd.Flags().String(flags.FlagSignMode, "", "Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature") + cmd.Flags().Uint64(flags.FlagTimeoutHeight, 0, "Set a block timeout height to prevent the tx from being committed past a certain height") + cmd.Flags().String(flags.FlagFeePayer, "", "Fee payer pays fees for the transaction instead of deducting from the signer") + cmd.Flags().String(flags.FlagFeeGranter, "", "Fee granter grants fees for the transaction") + cmd.Flags().String(flags.FlagTip, "", "Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator") + cmd.Flags().Bool(flags.FlagAux, false, "Generate aux signer data instead of sending a tx") + + // overrides + cmd.Flags().String(flags.FlagGas, flags.GasFlagAuto, fmt.Sprintf("Gas limit to set per-transaction; set to %q to calculate sufficient gas automatically", flags.GasFlagAuto)) + cmd.Flags().Float64(flags.FlagGasAdjustment, 1.8, "adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored ") + + // flags --fees added by each module's tx command +} + // GetTxCmd returns the transaction commands for this module func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ @@ -103,3 +162,72 @@ func ReadPayloadWithSignInputsFromFile(filePath string) (json.RawMessage, []Sign return payloadWithSignInputs.Payload, payloadWithSignInputs.SignInputs, nil } + +func GetFromSpecCompliantPayload(specPayload DIDDocument) ([]*types.VerificationMethod, []*types.Service, error) { + verificationMethod := make([]*types.VerificationMethod, 0, len(specPayload.VerificationMethod)) + for i, vm := range specPayload.VerificationMethod { + var verificationMethodType string + if value, ok := vm["type"].(string); !ok { + return nil, nil, fmt.Errorf("%d: verification method type is not specified", i) + } else { + verificationMethodType = value + } + + switch verificationMethodType { + case "Ed25519VerificationKey2020": + _, ok := vm["publicKeyMultibase"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyMultibase is not specified", i) + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: vm["publicKeyMultibase"].(string), + }) + case "Ed25519VerificationKey2018": + _, ok := vm["publicKeyBase58"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyBase58 is not specified", i) + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: vm["publicKeyBase58"].(string), + }) + case "JsonWebKey2020": + _, ok := vm["publicKeyJwk"] + if !ok { + return nil, nil, fmt.Errorf("%d: publicKeyJwk is not specified", i) + } + + jwk, err := json.Marshal(vm["publicKeyJwk"]) + if err != nil { + return nil, nil, err + } + + verificationMethod = append(verificationMethod, &types.VerificationMethod{ + Id: vm["id"].(string), + VerificationMethodType: vm["type"].(string), + Controller: vm["controller"].(string), + VerificationMaterial: string(jwk), + }) + default: + return nil, nil, fmt.Errorf("%d: verification method type is not supported", i) + } + } + + service := make([]*types.Service, 0, len(specPayload.Service)) + for _, s := range specPayload.Service { + service = append(service, &types.Service{ + Id: s.ID, + ServiceType: s.Type, + ServiceEndpoint: s.ServiceEndpoint, + }) + } + + return verificationMethod, service, nil +} diff --git a/x/did/client/cli/tx_create_diddoc.go b/x/did/client/cli/tx_create_diddoc.go index 182b324ea..e6f6ba9fb 100644 --- a/x/did/client/cli/tx_create_diddoc.go +++ b/x/did/client/cli/tx_create_diddoc.go @@ -1,20 +1,74 @@ package cli import ( + "encoding/json" + "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdCreateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "create-did [payload-file]", + Use: "create-did [payload-file] --version-id [version-id]", Short: "Create a new DID and associated DID Document.", - Long: "Creates a new DID and associated DID Document. " + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Long: `Creates a new DID and associated DID Document. +[payload-file] is JSON encoded DID Document alongside with sign inputs. +Version ID is optional and is determined by the '--version-id' flag. +If not provided, a random UUID will be used as version-id. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document creation, REGARDLESS of what value is passed in '--fees' flag. +2. Payload file should be a JSON file containing properties specified in the DID Core Specification. Rules from DID Core spec are followed on which properties are mandatory and which ones are optional. +3. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "context": [ "https://www.w3.org/ns/did/v1" ], + "id": "did:cheqd::", + "controller": [ + "did:cheqd::" + ], + "authentication": [ + "did:cheqd::#" + ], + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ + { + "id": "did:cheqd::#", + "type": "", + "controller": "did:cheqd::", + "publicKeyMultibase": "" + } + ], + "service": [ + { + "id": "did:cheqd::#", + "type": "", + "serviceEndpoint": [ + "" + ] + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,28 +76,53 @@ func CmdCreateDidDoc() *cobra.Command { return err } - // 1. Add utility-fee as 2nd arg - // 2. Short - // 3. Long - // 4. Show example to query the actual params `cheqd-noded query params subspace cheqd` - payloadFile := args[0] + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - // Unmarshal payload - var payload types.MsgCreateDidDocPayload - err = clientCtx.Codec.UnmarshalJSON([]byte(payloadJSON), &payload) + // Unmarshal spec-compliant payload + var specPayload DIDDocument + err = json.Unmarshal([]byte(payloadJSON), &specPayload) + if err != nil { + return err + } + + // Validate spec-compliant payload & get verification methods + verificationMethod, service, err := GetFromSpecCompliantPayload(specPayload) if err != nil { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() + // Construct MsgCreateDidDocPayload + payload := types.MsgCreateDidDocPayload{ + Context: specPayload.Context, + Id: specPayload.ID, + Controller: specPayload.Controller, + VerificationMethod: verificationMethod, + Authentication: specPayload.Authentication, + AssertionMethod: specPayload.AssertionMethod, + CapabilityInvocation: specPayload.CapabilityInvocation, + CapabilityDelegation: specPayload.CapabilityDelegation, + KeyAgreement: specPayload.KeyAgreement, + Service: service, + AlsoKnownAs: specPayload.AlsoKnownAs, + VersionId: versionID, } // Build identity message @@ -65,7 +144,16 @@ func CmdCreateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultCreateDidTxFee)).String(), "Fixed fee for DID creation, e.g., 50000000000ncheq. Please check what the current fees are by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/client/cli/tx_deactivate_diddoc.go b/x/did/client/cli/tx_deactivate_diddoc.go index cf2503bcc..3c5c9ccd5 100644 --- a/x/did/client/cli/tx_deactivate_diddoc.go +++ b/x/did/client/cli/tx_deactivate_diddoc.go @@ -2,19 +2,41 @@ package cli import ( "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdDeactivateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "deactivate-did [payload-file]", + Use: "deactivate-did [payload-file] --version-id [version-id]", Short: "Deactivate a DID.", - Long: "Deactivates a DID and its associated DID Document." + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Long: `Deactivates a DID and its associated DID Document. +[payload-file] is JSON encoded MsgDeactivateDidDocPayload alongside with sign inputs. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document deactivation, REGARDLESS of what value is passed in '--fees' flag. +2. A new DID Document version is created when deactivating a DID Document so that the operation timestamp can be recorded. Version ID is optional and is determined by the '--version-id' flag. If not provided, a random UUID will be used as version-id. +3. Payload file should be a JSON file containing the properties given in example below. +4. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "id": "did:cheqd::" + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,8 +44,24 @@ func CmdDeactivateDidDoc() *cobra.Command { return err } + // Read payload file arg payloadFile := args[0] + // Read version-id flag + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } + payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err @@ -36,10 +74,8 @@ func CmdDeactivateDidDoc() *cobra.Command { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() - } + // Set version id from flag or random + payload.VersionId = versionID // Build identity message signBytes := payload.GetSignBytes() @@ -60,7 +96,16 @@ func CmdDeactivateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultDeactivateDidTxFee)).String(), "Fixed fee for DID deactivation, e.g., 10000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/client/cli/tx_update_diddoc.go b/x/did/client/cli/tx_update_diddoc.go index 537c35814..4bccfceb0 100644 --- a/x/did/client/cli/tx_update_diddoc.go +++ b/x/did/client/cli/tx_update_diddoc.go @@ -1,20 +1,74 @@ package cli import ( + "encoding/json" + "github.com/cheqd/cheqd-node/x/did/types" + "github.com/cheqd/cheqd-node/x/did/utils" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) func CmdUpdateDidDoc() *cobra.Command { cmd := &cobra.Command{ - Use: "update-did [payload-file]", - Short: "Update DID Document associated with a DID.", - Long: "Update DID Document associated with a given DID. " + - "[payload-file] is JSON encoded MsgCreateDidDocPayload alongside with sign inputs.", + Use: "update-did [payload-file] --version-id [version-id]", + Short: "Updates a DID and its associated DID Document.", + Long: `Update DID Document associated with a given DID. +[payload-file] is JSON encoded DID Document alongside with sign inputs. +Version ID is optional and is determined by the '--version-id' flag. +If not provided, a random UUID will be used as version-id. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for DID Document update, REGARDLESS of what value is passed in '--fees' flag. +2. DID update operations require the FULL new DID Document to be provided. Specifying just the changes/diff is not supported. +3. Payload file should be a JSON file containing properties specified in the DID Core Specification. Rules from DID Core spec are followed on which properties are mandatory and which ones are optional. +4. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "context": [ "https://www.w3.org/ns/did/v1" ], + "id": "did:cheqd::", + "controller": [ + "did:cheqd::" + ], + "authentication": [ + "did:cheqd::#" + ], + "assertionMethod": [], + "capabilityInvocation": [], + "capabilityDelegation": [], + "keyAgreement": [], + "alsoKnownAs": [], + "verificationMethod": [ + { + "id": "did:cheqd::#", + "type": "", + "controller": "did:cheqd::", + "publicKeyMultibase": "" + } + ], + "service": [ + { + "id": "did:cheqd::#", + "type": "", + "serviceEndpoint": [ + "" + ] + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +}`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) @@ -22,23 +76,56 @@ func CmdUpdateDidDoc() *cobra.Command { return err } + // Read payload file arg payloadFile := args[0] + // Read version-id flag + versionID, err := cmd.Flags().GetString(FlagVersionID) + if err != nil { + return err + } + + if versionID != "" { + err = utils.ValidateUUID(versionID) + if err != nil { + return err + } + } else { + versionID = uuid.NewString() + } + payloadJSON, signInputs, err := ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - // Unmarshal payload - var payload types.MsgUpdateDidDocPayload - err = clientCtx.Codec.UnmarshalJSON([]byte(payloadJSON), &payload) + // Unmarshal spec-compliant payload + var specPayload DIDDocument + err = json.Unmarshal([]byte(payloadJSON), &specPayload) if err != nil { return err } - // Check for versionId - if payload.VersionId == "" { - payload.VersionId = uuid.NewString() + // Validate spec-compliant payload & get verification methods + verificationMethod, service, err := GetFromSpecCompliantPayload(specPayload) + if err != nil { + return err + } + + // Construct MsgUpdateDidDocPayload + payload := types.MsgUpdateDidDocPayload{ + Context: specPayload.Context, + Id: specPayload.ID, + Controller: specPayload.Controller, + VerificationMethod: verificationMethod, + Authentication: specPayload.Authentication, + AssertionMethod: specPayload.AssertionMethod, + CapabilityInvocation: specPayload.CapabilityInvocation, + CapabilityDelegation: specPayload.CapabilityDelegation, + KeyAgreement: specPayload.KeyAgreement, + Service: service, + AlsoKnownAs: specPayload.AlsoKnownAs, + VersionId: versionID, // Set version id, from flag or random } // Build identity message @@ -60,7 +147,16 @@ func CmdUpdateDidDoc() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(FlagVersionID, "", "Version ID of the DID Document") + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultUpdateDidTxFee)).String(), "Fixed fee for DID update, e.g., 25000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace cheqd feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/did/tests/setup/utils.go b/x/did/tests/setup/utils.go index b8d2914ad..9c5f1a39a 100644 --- a/x/did/tests/setup/utils.go +++ b/x/did/tests/setup/utils.go @@ -42,6 +42,16 @@ func randSeq(n int) string { return string(b) } +func ParseJSONToMap(jsonStr string) (map[string]any, error) { + var result map[string]any + err := json.Unmarshal([]byte(jsonStr), &result) + if err != nil { + return nil, err + } + + return result, nil +} + func GenerateDID(idtype IDType) string { prefix := "did:cheqd:" + DidNamespace + ":" mathrand.Seed(time.Now().UnixNano()) diff --git a/x/did/types/diddoc.pb.go b/x/did/types/diddoc.pb.go index 727d15b64..8d0a51773 100644 --- a/x/did/types/diddoc.pb.go +++ b/x/did/types/diddoc.pb.go @@ -180,7 +180,7 @@ type VerificationMethod struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // type is the type of the verification method. // Example: Ed25519VerificationKey2020 - VerificationMethodType string `protobuf:"bytes,2,opt,name=verification_method_type,json=verificationMethodType,proto3" json:"verification_method_type,omitempty"` + VerificationMethodType string `protobuf:"bytes,2,opt,name=verification_method_type,json=verificationMethodType,proto3" json:"type,omitempty"` // controller is the DID of the controller of the verification method. // Format: did:cheqd:: Controller string `protobuf:"bytes,3,opt,name=controller,proto3" json:"controller,omitempty"` @@ -258,7 +258,7 @@ type Service struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // type is the type of the service. // Example: LinkedResource - ServiceType string `protobuf:"bytes,2,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` + ServiceType string `protobuf:"bytes,2,opt,name=service_type,json=serviceType,proto3" json:"type,omitempty"` // serviceEndpoint is the endpoint of the service. // Example: https://example.com/endpoint ServiceEndpoint []string `protobuf:"bytes,3,rep,name=service_endpoint,json=serviceEndpoint,proto3" json:"service_endpoint,omitempty"` @@ -488,52 +488,53 @@ func init() { func init() { proto.RegisterFile("cheqd/did/v2/diddoc.proto", fileDescriptor_b7b058eff1719454) } var fileDescriptor_b7b058eff1719454 = []byte{ - // 707 bytes of a gzipped FileDescriptorProto + // 722 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x4e, 0xdb, 0x4a, - 0x18, 0x8d, 0x13, 0xc8, 0xcf, 0x18, 0x08, 0x77, 0x08, 0x5c, 0x5f, 0xa4, 0x9b, 0xe4, 0xe6, 0x4a, - 0x2d, 0x48, 0xad, 0x2d, 0x85, 0x2e, 0xba, 0xaa, 0x44, 0x44, 0x17, 0x08, 0xb1, 0xa8, 0x8b, 0xa8, - 0xd4, 0x8d, 0x35, 0xf1, 0x7c, 0x38, 0x23, 0x12, 0x8f, 0x6b, 0x4f, 0x5c, 0xf2, 0x16, 0xbc, 0x42, - 0x9f, 0xa0, 0x8b, 0xbe, 0x04, 0x4b, 0x96, 0x5d, 0x54, 0xb4, 0x82, 0x1d, 0x4f, 0x51, 0x79, 0x3c, - 0x76, 0x9d, 0xa4, 0x8b, 0x6e, 0x12, 0xcf, 0xf9, 0xce, 0x39, 0xf3, 0x79, 0xce, 0x37, 0x46, 0xff, - 0xb8, 0x23, 0xf8, 0x40, 0x2d, 0xca, 0xa8, 0x15, 0xf7, 0x93, 0x3f, 0xca, 0x5d, 0x33, 0x08, 0xb9, - 0xe0, 0x78, 0x4d, 0x96, 0x4c, 0xca, 0xa8, 0x19, 0xf7, 0x77, 0x5b, 0x1e, 0xf7, 0xb8, 0x2c, 0x58, - 0xc9, 0x53, 0xca, 0xd9, 0xed, 0x78, 0x9c, 0x7b, 0x63, 0xb0, 0xe4, 0x6a, 0x38, 0xbd, 0xb0, 0x04, - 0x9b, 0x40, 0x24, 0xc8, 0x24, 0x48, 0x09, 0xbd, 0x6f, 0x15, 0x54, 0x3d, 0x62, 0xf4, 0x88, 0xbb, - 0xd8, 0x40, 0x35, 0x97, 0xfb, 0x02, 0xae, 0x84, 0xa1, 0x75, 0x2b, 0x7b, 0x0d, 0x3b, 0x5b, 0xe2, - 0x0d, 0x54, 0x66, 0xd4, 0x28, 0x77, 0xb5, 0xbd, 0x86, 0x5d, 0x66, 0x14, 0xb7, 0x11, 0x4a, 0x4a, - 0x21, 0x1f, 0x8f, 0x21, 0x34, 0x2a, 0x92, 0x5c, 0x40, 0xf0, 0x1b, 0xb4, 0x15, 0x43, 0xc8, 0x2e, - 0x98, 0x4b, 0x04, 0xe3, 0xbe, 0x33, 0x01, 0x31, 0xe2, 0xd4, 0x58, 0xe9, 0x56, 0xf6, 0xf4, 0x7e, - 0xd7, 0x2c, 0xf6, 0x6d, 0x9e, 0x17, 0x88, 0xa7, 0x92, 0x67, 0xe3, 0x78, 0x09, 0xc3, 0x4f, 0xd0, - 0x06, 0x99, 0x8a, 0x11, 0xf8, 0x42, 0xe1, 0xc6, 0xaa, 0xdc, 0x76, 0x01, 0xc5, 0xfb, 0x68, 0x93, - 0x44, 0x11, 0x84, 0xc5, 0x7d, 0xab, 0x92, 0xd9, 0xcc, 0x71, 0x65, 0x79, 0x80, 0xb6, 0x5d, 0x12, - 0x90, 0x21, 0x1b, 0x33, 0x31, 0x73, 0x98, 0x1f, 0x73, 0xe5, 0x5c, 0x93, 0xfc, 0xd6, 0xaf, 0xe2, - 0x71, 0x5e, 0x5b, 0x10, 0x51, 0x18, 0x83, 0x97, 0x8a, 0xea, 0x8b, 0xa2, 0xa3, 0xbc, 0x86, 0xff, - 0x47, 0xeb, 0x97, 0x30, 0x73, 0x88, 0x17, 0x02, 0x4c, 0xc0, 0x17, 0x46, 0x43, 0x92, 0xd7, 0x2e, - 0x61, 0x76, 0x98, 0x61, 0xd8, 0x42, 0xb5, 0x08, 0xc2, 0x98, 0xb9, 0x60, 0x20, 0x79, 0x50, 0xdb, - 0xf3, 0x07, 0xf5, 0x36, 0x2d, 0xda, 0x19, 0x0b, 0xf7, 0xd0, 0x3a, 0x19, 0x47, 0xdc, 0xb9, 0xf4, - 0xf9, 0x47, 0xdf, 0x21, 0x91, 0xa1, 0x4b, 0x57, 0x3d, 0x01, 0x4f, 0x12, 0xec, 0x30, 0xea, 0x7d, - 0xd1, 0x10, 0x5e, 0x3e, 0x61, 0x15, 0xa8, 0x96, 0x07, 0xfa, 0x12, 0x19, 0xbf, 0x09, 0xcc, 0x11, - 0xb3, 0x00, 0x54, 0xec, 0x3b, 0xcb, 0x99, 0x9c, 0xcd, 0x02, 0x58, 0x1a, 0x05, 0x6d, 0x61, 0x14, - 0x0e, 0xd0, 0xf6, 0xbc, 0x33, 0x11, 0x10, 0x32, 0x32, 0x36, 0x56, 0x24, 0xb5, 0x35, 0x67, 0xab, - 0x6a, 0x3d, 0x0f, 0xd5, 0xd4, 0xdb, 0x2e, 0x75, 0xfa, 0x1f, 0x5a, 0x53, 0xef, 0x5f, 0xec, 0x4e, - 0x57, 0x98, 0x6c, 0x69, 0x1f, 0x6d, 0x66, 0x14, 0xf0, 0x69, 0xc0, 0x99, 0x2f, 0xd4, 0x8c, 0x36, - 0x15, 0xfe, 0x5a, 0xc1, 0xbd, 0x4f, 0x1a, 0xc2, 0xe9, 0xf4, 0xbf, 0x63, 0x62, 0x74, 0x0a, 0x82, - 0x50, 0x22, 0x08, 0x7e, 0x85, 0x6a, 0x94, 0x51, 0x87, 0x72, 0x57, 0xee, 0xac, 0xf7, 0x5b, 0xf3, - 0x51, 0xa4, 0x92, 0x41, 0xf3, 0xf1, 0xae, 0xa3, 0x53, 0xf9, 0x3c, 0x4d, 0x22, 0xb4, 0xab, 0xe9, - 0x02, 0x9f, 0xa0, 0xfa, 0x44, 0x79, 0xc9, 0x06, 0xf5, 0xfe, 0xce, 0xbc, 0x41, 0xb6, 0xd3, 0xe0, - 0xef, 0xc7, 0xbb, 0xce, 0x56, 0xc1, 0x22, 0x2b, 0xd8, 0xb9, 0x41, 0xef, 0x73, 0x19, 0xd5, 0x8b, - 0x9d, 0xb9, 0x21, 0x10, 0x01, 0x54, 0x75, 0xb6, 0x6b, 0xa6, 0x37, 0xdc, 0xcc, 0x6e, 0xb8, 0x79, - 0x96, 0xdd, 0xf0, 0x41, 0xfd, 0xe6, 0xae, 0x53, 0xba, 0xfe, 0xde, 0xd1, 0xec, 0x4c, 0x94, 0xe8, - 0xa7, 0x01, 0x95, 0xfa, 0xf2, 0x1f, 0xe9, 0xb5, 0x54, 0xaf, 0x44, 0xb8, 0x8b, 0x74, 0x0a, 0xc4, - 0x15, 0x2c, 0x96, 0x1e, 0x49, 0xde, 0x75, 0xbb, 0x08, 0xe1, 0x7f, 0x11, 0x8a, 0x21, 0x8c, 0x92, - 0xac, 0x19, 0x55, 0x29, 0x37, 0x14, 0x72, 0x4c, 0xf1, 0x33, 0xd4, 0xf4, 0xe1, 0x4a, 0x38, 0x05, - 0xce, 0x6a, 0xc2, 0x19, 0xac, 0x24, 0x9b, 0xd9, 0xeb, 0x49, 0xf1, 0x3c, 0x67, 0xbf, 0x40, 0x5b, - 0x41, 0x08, 0x31, 0xe3, 0xd3, 0xa8, 0xa8, 0xa8, 0x16, 0x14, 0x7f, 0x65, 0x84, 0x5c, 0x35, 0x38, - 0xbc, 0xb9, 0x6f, 0x6b, 0xb7, 0xf7, 0x6d, 0xed, 0xc7, 0x7d, 0x5b, 0xbb, 0x7e, 0x68, 0x97, 0x6e, - 0x1f, 0xda, 0xa5, 0xaf, 0x0f, 0xed, 0xd2, 0xfb, 0xa7, 0x1e, 0x13, 0xa3, 0xe9, 0xd0, 0x74, 0xf9, - 0xc4, 0x4a, 0x3f, 0xac, 0xf2, 0xf7, 0xb9, 0xcf, 0x29, 0x58, 0x57, 0xf2, 0x2b, 0x9b, 0x4c, 0x55, - 0x34, 0xac, 0xca, 0xe3, 0x38, 0xf8, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xa3, 0x36, 0x8d, 0x7f, - 0x05, 0x00, 0x00, + 0x14, 0x8e, 0x13, 0xc8, 0xcf, 0x18, 0x08, 0x77, 0x08, 0x5c, 0x5f, 0xa4, 0x9b, 0x44, 0xb9, 0xd2, + 0xbd, 0x20, 0x71, 0x6d, 0x29, 0xb4, 0xdb, 0x4a, 0x44, 0x74, 0x81, 0x28, 0x8b, 0xba, 0x88, 0x4a, + 0xdd, 0x58, 0x13, 0xcf, 0x21, 0x19, 0x11, 0x7b, 0x5c, 0x7b, 0xe2, 0x12, 0xf5, 0x25, 0x78, 0x85, + 0x3e, 0x41, 0x1f, 0xa3, 0x2c, 0x59, 0x76, 0x51, 0xa5, 0x15, 0xec, 0x78, 0x8a, 0xca, 0xe3, 0x71, + 0xea, 0x24, 0x95, 0xda, 0x0d, 0x78, 0xbe, 0x9f, 0x33, 0x47, 0xe7, 0x9b, 0x1c, 0xf4, 0x97, 0x3b, + 0x84, 0xb7, 0xd4, 0xa2, 0x8c, 0x5a, 0x71, 0x37, 0xf9, 0x47, 0xb9, 0x6b, 0x06, 0x21, 0x17, 0x1c, + 0xaf, 0x49, 0xca, 0xa4, 0x8c, 0x9a, 0x71, 0x77, 0xb7, 0x31, 0xe0, 0x03, 0x2e, 0x09, 0x2b, 0xf9, + 0x4a, 0x35, 0xbb, 0xad, 0x01, 0xe7, 0x83, 0x11, 0x58, 0xf2, 0xd4, 0x1f, 0x5f, 0x5a, 0x82, 0x79, + 0x10, 0x09, 0xe2, 0x05, 0xa9, 0xa0, 0xf3, 0xa5, 0x84, 0xca, 0xc7, 0x8c, 0x1e, 0x73, 0x17, 0x1b, + 0xa8, 0xe2, 0x72, 0x5f, 0xc0, 0xb5, 0x30, 0xb4, 0x76, 0x69, 0xaf, 0x66, 0x67, 0x47, 0xbc, 0x81, + 0x8a, 0x8c, 0x1a, 0xc5, 0xb6, 0xb6, 0x57, 0xb3, 0x8b, 0x8c, 0xe2, 0x26, 0x42, 0x09, 0x15, 0xf2, + 0xd1, 0x08, 0x42, 0xa3, 0x24, 0xc5, 0x39, 0x04, 0xbf, 0x44, 0x5b, 0x31, 0x84, 0xec, 0x92, 0xb9, + 0x44, 0x30, 0xee, 0x3b, 0x1e, 0x88, 0x21, 0xa7, 0xc6, 0x4a, 0xbb, 0xb4, 0xa7, 0x77, 0xdb, 0x66, + 0xbe, 0x6f, 0xf3, 0x22, 0x27, 0x3c, 0x93, 0x3a, 0x1b, 0xc7, 0x4b, 0x18, 0xfe, 0x17, 0x6d, 0x90, + 0xb1, 0x18, 0x82, 0x2f, 0x14, 0x6e, 0xac, 0xca, 0x6b, 0x17, 0x50, 0xbc, 0x8f, 0x36, 0x49, 0x14, + 0x41, 0x98, 0xbf, 0xb7, 0x2c, 0x95, 0xf5, 0x19, 0xae, 0x4a, 0x1e, 0xa2, 0x6d, 0x97, 0x04, 0xa4, + 0xcf, 0x46, 0x4c, 0x4c, 0x1c, 0xe6, 0xc7, 0x5c, 0x55, 0xae, 0x48, 0x7d, 0xe3, 0x07, 0x79, 0x32, + 0xe3, 0x16, 0x4c, 0x14, 0x46, 0x30, 0x48, 0x4d, 0xd5, 0x45, 0xd3, 0xf1, 0x8c, 0xc3, 0xff, 0xa0, + 0xf5, 0x2b, 0x98, 0x38, 0x64, 0x10, 0x02, 0x78, 0xe0, 0x0b, 0xa3, 0x26, 0xc5, 0x6b, 0x57, 0x30, + 0x39, 0xca, 0x30, 0x6c, 0xa1, 0x4a, 0x04, 0x61, 0xcc, 0x5c, 0x30, 0x90, 0x1c, 0xd4, 0xf6, 0xfc, + 0xa0, 0x5e, 0xa5, 0xa4, 0x9d, 0xa9, 0x70, 0x07, 0xad, 0x93, 0x51, 0xc4, 0x9d, 0x2b, 0x9f, 0xbf, + 0xf3, 0x1d, 0x12, 0x19, 0xba, 0xac, 0xaa, 0x27, 0xe0, 0x69, 0x82, 0x1d, 0x45, 0x9d, 0x4f, 0x1a, + 0xc2, 0xcb, 0x13, 0x56, 0x81, 0x6a, 0xb3, 0x40, 0x5f, 0x20, 0xe3, 0x27, 0x81, 0x39, 0x62, 0x12, + 0x40, 0x1a, 0x7b, 0x0f, 0x3f, 0x4e, 0x5b, 0x1b, 0xc9, 0xf9, 0x80, 0x7b, 0x4c, 0x80, 0x17, 0x88, + 0x89, 0xbd, 0xb3, 0x9c, 0xd3, 0xf9, 0x24, 0x80, 0xa5, 0xe7, 0xa1, 0x2d, 0x3c, 0x8f, 0x43, 0xb4, + 0x3d, 0x7f, 0x1b, 0x11, 0x10, 0x32, 0x32, 0x32, 0x56, 0xa4, 0xb4, 0x31, 0x57, 0x56, 0x71, 0x9d, + 0xf7, 0xa8, 0xa2, 0x26, 0xb0, 0xd4, 0xfd, 0x53, 0xb4, 0xa6, 0x66, 0xf2, 0xab, 0x8e, 0x75, 0xa5, + 0x93, 0x6d, 0xee, 0xa3, 0xcd, 0xcc, 0x06, 0x3e, 0x0d, 0x38, 0xf3, 0x85, 0x7a, 0xcb, 0x75, 0x85, + 0x3f, 0x57, 0x70, 0xe7, 0x83, 0x86, 0x70, 0xfa, 0x2b, 0x79, 0xcd, 0xc4, 0xf0, 0x0c, 0x04, 0xa1, + 0x44, 0x10, 0xfc, 0x0c, 0x55, 0x28, 0xa3, 0x0e, 0xe5, 0xae, 0xec, 0x46, 0xef, 0x36, 0xe6, 0x23, + 0x4b, 0x2d, 0xbd, 0xfa, 0xe3, 0xb4, 0xa5, 0x53, 0xf9, 0x3d, 0x4e, 0xa2, 0xb6, 0xcb, 0xe9, 0x01, + 0x9f, 0xa2, 0xaa, 0xa7, 0x6a, 0xc9, 0xa6, 0xf5, 0xee, 0xce, 0x7c, 0x81, 0xec, 0xa6, 0xde, 0x9f, + 0x8f, 0xd3, 0xd6, 0x56, 0xae, 0x44, 0x46, 0xd8, 0xb3, 0x02, 0x9d, 0x8f, 0x45, 0x54, 0xcd, 0x77, + 0xe6, 0x86, 0x40, 0x04, 0x50, 0xd5, 0xd9, 0xae, 0x99, 0x6e, 0x02, 0x33, 0xdb, 0x04, 0xe6, 0x79, + 0xb6, 0x09, 0x7a, 0xd5, 0xdb, 0x69, 0xab, 0x70, 0xf3, 0xb5, 0xa5, 0xd9, 0x99, 0x29, 0xf1, 0x8f, + 0x03, 0x2a, 0xfd, 0xc5, 0xdf, 0xf2, 0x6b, 0xa9, 0x5f, 0x99, 0x70, 0x1b, 0xe9, 0x14, 0x88, 0x2b, + 0x58, 0x2c, 0x6b, 0x24, 0x6f, 0xa0, 0x6a, 0xe7, 0x21, 0xfc, 0x37, 0x42, 0x31, 0x84, 0x51, 0x92, + 0x3f, 0xa3, 0x2a, 0xf9, 0x9a, 0x42, 0x4e, 0x28, 0x3e, 0x40, 0x75, 0x1f, 0xae, 0x85, 0x93, 0xd3, + 0xac, 0xca, 0x58, 0x57, 0x92, 0xcb, 0xec, 0xf5, 0x84, 0xbc, 0x98, 0xa9, 0x9f, 0xa0, 0xad, 0x20, + 0x84, 0x98, 0xf1, 0x71, 0x94, 0x77, 0x94, 0x73, 0x8e, 0x3f, 0x32, 0xc1, 0xcc, 0xd5, 0x3b, 0xba, + 0xbd, 0x6f, 0x6a, 0x77, 0xf7, 0x4d, 0xed, 0xdb, 0x7d, 0x53, 0xbb, 0x79, 0x68, 0x16, 0xee, 0x1e, + 0x9a, 0x85, 0xcf, 0x0f, 0xcd, 0xc2, 0x9b, 0xff, 0x06, 0x4c, 0x0c, 0xc7, 0x7d, 0xd3, 0xe5, 0x9e, + 0x95, 0x2e, 0x60, 0xf9, 0xf7, 0x7f, 0x9f, 0x53, 0xb0, 0xae, 0xe5, 0x36, 0x4e, 0x5e, 0x56, 0xd4, + 0x2f, 0xcb, 0x71, 0x1c, 0x7e, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x79, 0x85, 0xfa, 0x40, 0xa7, 0x05, + 0x00, 0x00, } func (m *DidDoc) Marshal() (dAtA []byte, err error) { diff --git a/x/did/utils/proto.go b/x/did/utils/proto.go deleted file mode 100644 index e25f37e8a..000000000 --- a/x/did/utils/proto.go +++ /dev/null @@ -1,8 +0,0 @@ -package utils - -import "github.com/gogo/protobuf/proto" - -// MsgTypeURL returns the TypeURL of a `proto.Message`. -func MsgTypeURL(msg proto.Message) string { - return "/" + proto.MessageName(msg) -} diff --git a/x/did/utils/proto_test.go b/x/did/utils/proto_test.go deleted file mode 100644 index e1d338ae8..000000000 --- a/x/did/utils/proto_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils_test - -import ( - . "github.com/cheqd/cheqd-node/x/did/utils" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - bank_types "github.com/cosmos/cosmos-sdk/x/bank/types" -) - -var _ = Describe("Proto", func() { - Describe("Check that DenomUnit from bank type has expected value", func() { - Context("Denom Unit from cosmos-sdk", func() { - It("should return expected value", func() { - Expect(MsgTypeURL(&bank_types.DenomUnit{})).To(Equal("/cosmos.bank.v1beta1.DenomUnit")) - }) - }) - }) -}) diff --git a/x/did/utils/str_test.go b/x/did/utils/str_test.go index f52ce8a78..f06083c3f 100644 --- a/x/did/utils/str_test.go +++ b/x/did/utils/str_test.go @@ -16,14 +16,14 @@ var _ = Describe("Str utils functionality", func() { Expect(actual).To(Equal(expectedResult)) }, - Entry("Emty array, Empty element, Expected: -1", []string{}, "", 0, -1), + Entry("Empty array, Empty element, Expected: -1", []string{}, "", 0, -1), Entry("Nil as array, Empty element, Expected: -1", nil, "", 0, -1), Entry("Desired element is the first. Expected: 0", []string{"1", "2"}, "1", 0, 0), Entry("Desired element is the latest one. Expected: 2", []string{"1", "2", "3"}, "3", 0, 2), Entry("Desired element is absent. Expected: -1", []string{"1", "2", "3"}, "4", 0, -1), - Entry("There are more then 1 such elements but search should be started from the beginning. Expected: 0", []string{"4", "1", "6", "2", "3", "4"}, "4", 0, 0), - Entry("There are more then 1 such elements but search should be started from the index 1. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 1, 5), - Entry("There are more then 1 such elements but search should be started from the index 3. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 3, 5), + Entry("There are more than 1 such elements but search should be started from the beginning. Expected: 0", []string{"4", "1", "6", "2", "3", "4"}, "4", 0, 0), + Entry("There are more than 1 such elements but search should be started from the index 1. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 1, 5), + Entry("There are more than 1 such elements but search should be started from the index 3. Expected: 5", []string{"4", "1", "6", "2", "3", "4"}, "4", 3, 5), ) DescribeTable("Contains function", diff --git a/x/resource/client/cli/query_collection_resources.go b/x/resource/client/cli/query_collection_resources.go index 3e5138502..7e85be8ee 100644 --- a/x/resource/client/cli/query_collection_resources.go +++ b/x/resource/client/cli/query_collection_resources.go @@ -11,9 +11,13 @@ import ( func CmdGetCollectionResources() *cobra.Command { cmd := &cobra.Command{ - Use: "collection-resources [collectionId]", - Short: "Query all resource of a specific collection", - Args: cobra.ExactArgs(1), + Use: "collection-metadata [collection-id] [resource-id]", + Short: "Query metadata for an entire Collection", + Long: `Query metadata for an entire Collection by Collection ID. This will return the metadata for all Resources in the Collection. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc.`, + Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/query_resource.go b/x/resource/client/cli/query_resource.go index 181618aa6..c67488372 100644 --- a/x/resource/client/cli/query_resource.go +++ b/x/resource/client/cli/query_resource.go @@ -11,9 +11,16 @@ import ( func CmdGetResource() *cobra.Command { cmd := &cobra.Command{ - Use: "resource [collectionId] [id]", - Short: "Query a resource", - Args: cobra.ExactArgs(2), + Use: "specific-resource [collection-id] [resource-id]", + Short: "Query a specific resource", + Long: `Query a specific resource by Collection ID and Resource ID. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc. + + Resource ID is the UUID of the specific resource. + Example: 6e8bc430-9c3a-11d9-9669-0800200c9a66, 6e8bc430-9c3a-11d9-9669-0800200c9a67, etc.`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/query_resource_metadata.go b/x/resource/client/cli/query_resource_metadata.go index 6797dd454..0d00ec7db 100644 --- a/x/resource/client/cli/query_resource_metadata.go +++ b/x/resource/client/cli/query_resource_metadata.go @@ -11,9 +11,16 @@ import ( func CmdGetResourceMetadata() *cobra.Command { cmd := &cobra.Command{ - Use: "resource-metadata [collectionId] [id]", - Short: "Query a resource", - Args: cobra.ExactArgs(2), + Use: "metadata [collection-id] [resource-id]", + Short: "Query metadata for a specific resource", + Long: `Query metadata for a specific resource by Collection ID and Resource ID. + + Collection ID is the UNIQUE IDENTIFIER part of the DID the resource is linked to. + Example: c82f2b02-bdab-4dd7-b833-3e143745d612, wGHEXrZvJxR8vw5P3UWH1j, etc. + + Resource ID is the UUID of the specific resource. + Example: 6e8bc430-9c3a-11d9-9669-0800200c9a66, 6e8bc430-9c3a-11d9-9669-0800200c9a67, etc.`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) diff --git a/x/resource/client/cli/tx.go b/x/resource/client/cli/tx.go index ff2c56f1c..a651b1b76 100644 --- a/x/resource/client/cli/tx.go +++ b/x/resource/client/cli/tx.go @@ -5,9 +5,42 @@ import ( "github.com/cheqd/cheqd-node/x/resource/types" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" + tmcli "github.com/tendermint/tendermint/libs/cli" ) +// AddTxFlagsToCmd adds common flags to a module tx command. +func AddTxFlagsToCmd(cmd *cobra.Command) { + cmd.Flags().StringP(tmcli.OutputFlag, "o", "json", "Output format (text|json)") + cmd.Flags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used") + cmd.Flags().String(flags.FlagFrom, "", "Name or address of private key with which to sign") + cmd.Flags().Uint64P(flags.FlagAccountNumber, "a", 0, "The account number of the signing account (offline mode only)") + cmd.Flags().Uint64P(flags.FlagSequence, "s", 0, "The sequence number of the signing account (offline mode only)") + cmd.Flags().String(flags.FlagNote, "", "Note to add a description to the transaction (previously --memo)") + cmd.Flags().String(flags.FlagGasPrices, "", "Gas prices in decimal format to determine the transaction fee (e.g. 50ncheq)") + cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", ": to tendermint rpc interface for this chain") + cmd.Flags().Bool(flags.FlagUseLedger, false, "Use a connected Ledger device") + cmd.Flags().StringP(flags.FlagBroadcastMode, "b", flags.BroadcastSync, "Transaction broadcasting mode (sync|async|block)") + cmd.Flags().Bool(flags.FlagDryRun, false, "ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)") + cmd.Flags().Bool(flags.FlagGenerateOnly, false, "Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)") + cmd.Flags().Bool(flags.FlagOffline, false, "Offline mode (does not allow any online functionality)") + cmd.Flags().BoolP(flags.FlagSkipConfirmation, "y", false, "Skip tx broadcasting prompt confirmation") + cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test|memory)") + cmd.Flags().String(flags.FlagSignMode, "", "Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature") + cmd.Flags().Uint64(flags.FlagTimeoutHeight, 0, "Set a block timeout height to prevent the tx from being committed past a certain height") + cmd.Flags().String(flags.FlagFeePayer, "", "Fee payer pays fees for the transaction instead of deducting from the signer") + cmd.Flags().String(flags.FlagFeeGranter, "", "Fee granter grants fees for the transaction") + cmd.Flags().String(flags.FlagTip, "", "Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator") + cmd.Flags().Bool(flags.FlagAux, false, "Generate aux signer data instead of sending a tx") + + // overrides + cmd.Flags().String(flags.FlagGas, flags.GasFlagAuto, fmt.Sprintf("Gas limit to set per-transaction; set to %q to calculate sufficient gas automatically", flags.GasFlagAuto)) + cmd.Flags().Float64(flags.FlagGasAdjustment, 2.5, "adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored ") + + // flags --fees added by each module's tx command +} + // GetTxCmd returns the transaction commands for this module func GetTxCmd() *cobra.Command { cmd := &cobra.Command{ diff --git a/x/resource/client/cli/tx_create_resource.go b/x/resource/client/cli/tx_create_resource.go index d85c5132d..1571bd8c5 100644 --- a/x/resource/client/cli/tx_create_resource.go +++ b/x/resource/client/cli/tx_create_resource.go @@ -1,7 +1,6 @@ package cli import ( - "encoding/json" "os" didcli "github.com/cheqd/cheqd-node/x/did/client/cli" @@ -9,62 +8,87 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/google/uuid" "github.com/spf13/cobra" ) -type CreateResourceOptions struct { - CollectionID string `json:"collection_id"` - ResourceID string `json:"resource_id"` - ResourceName string `json:"resource_name"` - ResourceVersion string `json:"resource_version"` - ResourceType string `json:"resource_type"` - ResourceFile string `json:"resource_file"` - AlsoKnownAs []*types.AlternativeUri `json:"also_known_as"` -} - func CmdCreateResource() *cobra.Command { cmd := &cobra.Command{ - Use: "create [payload-file]", + Use: "create [payload-file] [resource-data-file]", Short: "Create a new Resource.", - Long: "Create a new Resource within a DID Resource Collection. " + - "[payload-file] is JSON encoded MsgCreateResourcePayload alongside with sign inputs.", - Args: cobra.ExactArgs(1), + Long: `Create a new Resource within a DID Resource Collection. +[payload-file] is JSON encoded MsgCreateResourcePayload alongside with sign inputs. +[resource-data-file] is a path to the Resource data file. + +NOTES: +1. Fee used for the transaction will ALWAYS take the fixed fee for Resource creation, REGARDLESS of what value is passed in '--fees' flag. +2. Fixed fees for Resource creation is defined based on the IANA media type of the Resource data file. These parameters can be updated using governance proposals. Currently, there are three categories of media types with different fees: 'image', 'json', and 'default' (for all other media types). +2. Payload file should contain the properties given in example below. +3. Private key provided in sign inputs is ONLY used locally to generate signature(s) and not sent to the ledger. + +Example payload file: +{ + "payload": { + "collectionId": "", + "id": "", + "name": "", + "version": "", + "resourceType": "", + "alsoKnownAs": [ + { + "uri": "did:cheqd::/resource/", + "description": "did-url" + }, + { + "uri": "https://example.com/alternative-uri", + "description": "http-url" + } + ] + }, + "signInputs": [ + { + "verificationMethodId": "did:cheqd::#", + "privKey": "" + } + ] +} +`, + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } + // Read payload file arg payloadFile := args[0] + // Read data file arg + dataFile := args[1] + payloadJSON, signInputs, err := didcli.ReadPayloadWithSignInputsFromFile(payloadFile) if err != nil { return err } - var options CreateResourceOptions - err = json.Unmarshal(payloadJSON, &options) + // Unmarshal payload + var payload types.MsgCreateResourcePayload + err = clientCtx.Codec.UnmarshalJSON(payloadJSON, &payload) if err != nil { return err } - data, err := os.ReadFile(options.ResourceFile) + // Read data file + data, err := os.ReadFile(dataFile) if err != nil { return err } // Prepare payload - payload := types.MsgCreateResourcePayload{ - CollectionId: options.CollectionID, - Id: options.ResourceID, - Name: options.ResourceName, - Version: options.ResourceVersion, - ResourceType: options.ResourceType, - AlsoKnownAs: options.AlsoKnownAs, - Data: data, - } + payload.Data = data + // Populate resource id if not set if payload.Id == "" { payload.Id = uuid.NewString() } @@ -88,7 +112,15 @@ func CmdCreateResource() *cobra.Command { }, } - flags.AddTxFlagsToCmd(cmd) + // add standard tx flags + AddTxFlagsToCmd(cmd) + + // add custom / override flags + cmd.Flags().String(flags.FlagFees, sdk.NewCoin(types.BaseMinimalDenom, sdk.NewInt(types.DefaultCreateResourceImageFee)).String(), "Fixed fee for Resource creation, e.g., 10000000000ncheq. Please check what the current fees by running 'cheqd-noded query params subspace resource feeparams'") + + _ = cmd.MarkFlagRequired(flags.FlagFees) + _ = cmd.MarkFlagRequired(flags.FlagGas) + _ = cmd.MarkFlagRequired(flags.FlagGasAdjustment) return cmd } diff --git a/x/resource/types/query.pb.go b/x/resource/types/query.pb.go index f888b4a1c..d26048411 100644 --- a/x/resource/types/query.pb.go +++ b/x/resource/types/query.pb.go @@ -6,6 +6,8 @@ package types import ( context "context" fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -28,10 +30,17 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryResourceRequest is the request type for the Query/Resource RPC method type QueryResourceRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -82,7 +91,11 @@ func (m *QueryResourceRequest) GetId() string { return "" } +// QueryResourceResponse is the response type for the Query/Resource RPC method type QueryResourceResponse struct { + // Successful resolution of the resource returns the following: + // - resource is the requested resource + // - metadata is the resource metadata associated with the requested resource Resource *ResourceWithMetadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` } @@ -126,10 +139,17 @@ func (m *QueryResourceResponse) GetResource() *ResourceWithMetadata { return nil } +// QueryResourceMetadataRequest is the request type for the Query/ResourceMetadata RPC method type QueryResourceMetadataRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // is unique identifier for a resource + // id is a unique id of the resource. + // Format: Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` } @@ -180,8 +200,10 @@ func (m *QueryResourceMetadataRequest) GetId() string { return "" } +// QueryResourceMetadataResponse is the response type for the Query/ResourceMetadata RPC method type QueryResourceMetadataResponse struct { - Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // resource is the requested resource metadata + Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResourceMetadata"` } func (m *QueryResourceMetadataResponse) Reset() { *m = QueryResourceMetadataResponse{} } @@ -224,9 +246,17 @@ func (m *QueryResourceMetadataResponse) GetResource() *Metadata { return nil } +// QueryCollectionResourcesRequest is the request type for the Query/CollectionResources RPC method type QueryCollectionResourcesRequest struct { - // is unique identifier a for collection + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryCollectionResourcesRequest) Reset() { *m = QueryCollectionResourcesRequest{} } @@ -269,8 +299,19 @@ func (m *QueryCollectionResourcesRequest) GetCollectionId() string { return "" } +func (m *QueryCollectionResourcesRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// QueryCollectionResourcesResponse is the response type for the Query/CollectionResources RPC method type QueryCollectionResourcesResponse struct { - Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + // resources is the requested collection of resource metadata + Resources []*Metadata `protobuf:"bytes,1,rep,name=resources,proto3" json:"linkedResourceMetadata"` + // pagination defines the pagination in the response. + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (m *QueryCollectionResourcesResponse) Reset() { *m = QueryCollectionResourcesResponse{} } @@ -313,6 +354,13 @@ func (m *QueryCollectionResourcesResponse) GetResources() []*Metadata { return nil } +func (m *QueryCollectionResourcesResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + func init() { proto.RegisterType((*QueryResourceRequest)(nil), "cheqd.resource.v2.QueryResourceRequest") proto.RegisterType((*QueryResourceResponse)(nil), "cheqd.resource.v2.QueryResourceResponse") @@ -325,36 +373,42 @@ func init() { func init() { proto.RegisterFile("cheqd/resource/v2/query.proto", fileDescriptor_14284472e64722d9) } var fileDescriptor_14284472e64722d9 = []byte{ - // 449 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0xce, 0x48, 0x2d, - 0x4c, 0xd1, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0xd5, 0x2f, 0x33, 0xd2, 0x2f, 0x2c, - 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0x4b, 0xeb, 0xc1, 0xa4, - 0xf5, 0xca, 0x8c, 0xa4, 0x14, 0x30, 0x75, 0xc0, 0xa5, 0xc1, 0x9a, 0xa4, 0x64, 0xd2, 0xf3, 0xf3, - 0xd3, 0x73, 0x52, 0xf5, 0x13, 0x0b, 0x32, 0xf5, 0x13, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x32, - 0xf3, 0xf3, 0x8a, 0x21, 0xb2, 0x4a, 0xde, 0x5c, 0x22, 0x81, 0x20, 0x1b, 0x82, 0xa0, 0x9a, 0x82, - 0x52, 0x0b, 0x4b, 0x53, 0x8b, 0x4b, 0x84, 0x94, 0xb9, 0x78, 0x93, 0xf3, 0x73, 0x72, 0x52, 0x93, - 0x41, 0x8a, 0xe3, 0x33, 0x53, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0x78, 0x10, 0x82, 0x9e, - 0x29, 0x42, 0x7c, 0x5c, 0x4c, 0x99, 0x29, 0x12, 0x4c, 0x60, 0x19, 0xa6, 0xcc, 0x14, 0xa5, 0x18, - 0x2e, 0x51, 0x34, 0xc3, 0x8a, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0x85, 0x9c, 0xb9, 0x38, 0x60, 0xae, - 0x02, 0x1b, 0xc4, 0x6d, 0xa4, 0xae, 0x87, 0xe1, 0x17, 0x3d, 0x98, 0xb6, 0xf0, 0xcc, 0x92, 0x0c, - 0xdf, 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0xc4, 0x20, 0xb8, 0x46, 0xa5, 0x60, 0x2e, 0x19, 0x14, - 0xd3, 0xe1, 0x4a, 0x28, 0x71, 0x72, 0x04, 0x97, 0x2c, 0x0e, 0x43, 0xa1, 0x4e, 0x37, 0xc7, 0x70, - 0xba, 0x34, 0x16, 0xa7, 0x63, 0x71, 0xae, 0x1b, 0x97, 0x3c, 0xd8, 0x64, 0x67, 0xb8, 0xf5, 0x30, - 0x3b, 0x8a, 0x49, 0x71, 0xb1, 0x52, 0x2c, 0x97, 0x02, 0x6e, 0x73, 0xa0, 0x8e, 0xb4, 0xe4, 0xe2, - 0x84, 0xd9, 0x5b, 0x2c, 0xc1, 0xa8, 0xc0, 0x4c, 0xc8, 0x95, 0x08, 0xd5, 0x46, 0x53, 0x58, 0xb8, - 0x58, 0xc1, 0xe6, 0x0b, 0xcd, 0x60, 0xe4, 0xe2, 0x80, 0x19, 0x2d, 0x84, 0x2d, 0x7e, 0xb0, 0x25, - 0x14, 0x29, 0x0d, 0xc2, 0x0a, 0x21, 0x8e, 0x54, 0xb2, 0x6c, 0xba, 0xfc, 0x64, 0x32, 0x93, 0xb1, - 0x90, 0xa1, 0x3e, 0x66, 0x9a, 0xad, 0x46, 0x09, 0x87, 0x5a, 0xb8, 0x5c, 0xb1, 0x7e, 0x75, 0x66, - 0x4a, 0xad, 0xd0, 0x4e, 0x46, 0x2e, 0x01, 0xf4, 0x18, 0x12, 0xd2, 0x27, 0x64, 0x33, 0x5a, 0x02, - 0x91, 0x32, 0x20, 0x5e, 0x03, 0xd4, 0xc9, 0x4e, 0x60, 0x27, 0xdb, 0x08, 0x59, 0x91, 0xec, 0x64, - 0xfd, 0x5c, 0x98, 0x33, 0x37, 0x33, 0x72, 0x09, 0x63, 0x89, 0x3b, 0x21, 0x23, 0x5c, 0xae, 0xc1, - 0x9d, 0x60, 0xa4, 0x8c, 0x49, 0xd2, 0x03, 0xf5, 0x84, 0x31, 0xd8, 0x13, 0xba, 0x42, 0xda, 0x44, - 0x78, 0x02, 0xe6, 0x6a, 0x27, 0xb7, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, - 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, - 0xd2, 0x49, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0x85, 0x1a, 0x08, 0x26, 0x75, - 0xf3, 0xf2, 0x53, 0x52, 0xf5, 0x2b, 0x10, 0xa6, 0x97, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, - 0x8b, 0x19, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, 0xf9, 0xe7, 0x82, 0xda, 0x04, 0x00, - 0x00, + // 549 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcf, 0x6b, 0x13, 0x41, + 0x18, 0xed, 0xc4, 0x1f, 0xb4, 0x53, 0x15, 0x1d, 0xab, 0x84, 0xb5, 0xdd, 0x86, 0x08, 0xb6, 0xa8, + 0x9d, 0x31, 0x9b, 0x93, 0xe2, 0x29, 0x85, 0x8a, 0x88, 0xa0, 0x5b, 0x44, 0x10, 0x41, 0x26, 0xbb, + 0xc3, 0x66, 0x30, 0xd9, 0xd9, 0x64, 0x26, 0xc1, 0x52, 0x7a, 0xf1, 0x0f, 0x10, 0x41, 0x0f, 0xfe, + 0x1f, 0x9e, 0xbc, 0x7a, 0xf2, 0x58, 0xf0, 0xe2, 0x49, 0x24, 0xf1, 0xe4, 0x5f, 0x21, 0x99, 0xdd, + 0xd9, 0x6d, 0xb3, 0x1b, 0xd2, 0xd0, 0x4b, 0x18, 0xe6, 0xfb, 0xde, 0xfb, 0xde, 0xfb, 0xe6, 0x65, + 0xe1, 0x9a, 0xd7, 0x62, 0x5d, 0x9f, 0xf4, 0x98, 0x14, 0xfd, 0x9e, 0xc7, 0xc8, 0xc0, 0x21, 0xdd, + 0x3e, 0xeb, 0xed, 0xe1, 0xa8, 0x27, 0x94, 0x40, 0x57, 0x74, 0x19, 0x9b, 0x32, 0x1e, 0x38, 0x56, + 0x25, 0x8f, 0x48, 0xcb, 0x1a, 0x64, 0xdd, 0xf6, 0x84, 0xec, 0x08, 0x49, 0x9a, 0x54, 0xb2, 0x98, + 0x8d, 0x0c, 0x6a, 0x4d, 0xa6, 0x68, 0x8d, 0x44, 0x34, 0xe0, 0x21, 0x55, 0x5c, 0x84, 0x49, 0xef, + 0x4a, 0x20, 0x02, 0xa1, 0x8f, 0x64, 0x7c, 0x4a, 0x6e, 0x57, 0x03, 0x21, 0x82, 0x36, 0x23, 0x34, + 0xe2, 0x84, 0x86, 0xa1, 0x50, 0x1a, 0x22, 0xe3, 0x6a, 0xf5, 0x09, 0x5c, 0x79, 0x3e, 0x66, 0x75, + 0x93, 0xb1, 0x2e, 0xeb, 0xf6, 0x99, 0x54, 0xe8, 0x26, 0xbc, 0xe8, 0x89, 0x76, 0x9b, 0x79, 0xe3, + 0xe6, 0x37, 0xdc, 0x2f, 0x83, 0x0a, 0xd8, 0x5c, 0x72, 0x2f, 0x64, 0x97, 0x8f, 0x7d, 0x74, 0x09, + 0x96, 0xb8, 0x5f, 0x2e, 0xe9, 0x4a, 0x89, 0xfb, 0xd5, 0xd7, 0xf0, 0xda, 0x04, 0x99, 0x8c, 0x44, + 0x28, 0x19, 0xda, 0x86, 0x8b, 0xc6, 0x97, 0x26, 0x5a, 0x76, 0x36, 0x70, 0x6e, 0x1b, 0xd8, 0xc0, + 0x5e, 0x72, 0xd5, 0x7a, 0xca, 0x14, 0xf5, 0xa9, 0xa2, 0x6e, 0x0a, 0xac, 0xee, 0xc2, 0xd5, 0x63, + 0xec, 0x69, 0xcb, 0x69, 0x24, 0x2b, 0xb8, 0x36, 0x85, 0x34, 0x91, 0xbe, 0x9b, 0x93, 0x7e, 0xa3, + 0x40, 0xba, 0x81, 0x35, 0xac, 0x7f, 0xbf, 0xd7, 0xaf, 0xb7, 0x79, 0xf8, 0x96, 0xf9, 0x39, 0xca, + 0xcc, 0xca, 0x07, 0x00, 0xd7, 0xf5, 0xd8, 0xed, 0x54, 0x9b, 0xe9, 0x96, 0x73, 0xd9, 0xd9, 0x81, + 0x30, 0x8b, 0x81, 0xb6, 0xb5, 0xec, 0xdc, 0xc2, 0x71, 0x66, 0xf0, 0x38, 0x33, 0x38, 0x4e, 0x60, + 0x92, 0x19, 0xfc, 0x8c, 0x06, 0xe6, 0x89, 0xdd, 0x23, 0xc8, 0xea, 0x77, 0x00, 0x2b, 0xd3, 0x05, + 0x25, 0xab, 0x78, 0x01, 0x97, 0x8c, 0x03, 0x59, 0x06, 0x95, 0x33, 0xa7, 0xd9, 0x45, 0xc6, 0x84, + 0x1e, 0x15, 0x78, 0xd8, 0x98, 0xe9, 0x21, 0xd6, 0x74, 0xd4, 0x84, 0xf3, 0xf9, 0x2c, 0x3c, 0xa7, + 0x4d, 0xa0, 0x2f, 0x00, 0x2e, 0x9a, 0x91, 0xa8, 0x28, 0x6a, 0x45, 0x99, 0xb7, 0x36, 0x67, 0x37, + 0xc6, 0x53, 0xab, 0xf7, 0xdf, 0xff, 0xfc, 0xfb, 0xa9, 0x54, 0x47, 0x35, 0x92, 0xff, 0x03, 0xef, + 0x1f, 0x7b, 0xb5, 0x83, 0xb4, 0x26, 0xc9, 0x3e, 0xf7, 0x0f, 0xd0, 0x37, 0x00, 0x2f, 0x4f, 0x6e, + 0x03, 0x91, 0x59, 0x93, 0x27, 0xb2, 0x6e, 0xdd, 0x3b, 0x39, 0x20, 0x91, 0xdc, 0xd0, 0x92, 0x1f, + 0xa2, 0x07, 0x73, 0x4b, 0x26, 0x1d, 0x23, 0xf3, 0x2b, 0x80, 0x57, 0x0b, 0x02, 0x82, 0x9c, 0x69, + 0x6a, 0xa6, 0xc7, 0xdb, 0xaa, 0xcf, 0x85, 0x49, 0x4c, 0xd4, 0xb5, 0x89, 0x2d, 0x74, 0xe7, 0x04, + 0x26, 0x8c, 0xea, 0xc6, 0xce, 0x8f, 0xa1, 0x0d, 0x0e, 0x87, 0x36, 0xf8, 0x33, 0xb4, 0xc1, 0xc7, + 0x91, 0xbd, 0x70, 0x38, 0xb2, 0x17, 0x7e, 0x8d, 0xec, 0x85, 0x57, 0x77, 0x03, 0xae, 0x5a, 0xfd, + 0x26, 0xf6, 0x44, 0x27, 0x21, 0xd4, 0xbf, 0x5b, 0xa1, 0xf0, 0x19, 0x79, 0x97, 0xb1, 0xab, 0xbd, + 0x88, 0xc9, 0xe6, 0x79, 0xfd, 0xc5, 0xac, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xb6, 0x8d, + 0x38, 0xe7, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -369,8 +423,11 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { + // Fetch data/payload for a specific resource (without metadata) Resource(ctx context.Context, in *QueryResourceRequest, opts ...grpc.CallOption) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(ctx context.Context, in *QueryResourceMetadataRequest, opts ...grpc.CallOption) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(ctx context.Context, in *QueryCollectionResourcesRequest, opts ...grpc.CallOption) (*QueryCollectionResourcesResponse, error) } @@ -411,8 +468,11 @@ func (c *queryClient) CollectionResources(ctx context.Context, in *QueryCollecti // QueryServer is the server API for Query service. type QueryServer interface { + // Fetch data/payload for a specific resource (without metadata) Resource(context.Context, *QueryResourceRequest) (*QueryResourceResponse, error) + // Fetch only metadata for a specific resource ResourceMetadata(context.Context, *QueryResourceMetadataRequest) (*QueryResourceMetadataResponse, error) + // Fetch metadata for all resources in a collection CollectionResources(context.Context, *QueryCollectionResourcesRequest) (*QueryCollectionResourcesResponse, error) } @@ -673,6 +733,18 @@ func (m *QueryCollectionResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if len(m.CollectionId) > 0 { i -= len(m.CollectionId) copy(dAtA[i:], m.CollectionId) @@ -703,6 +775,18 @@ func (m *QueryCollectionResourcesResponse) MarshalToSizedBuffer(dAtA []byte) (in _ = i var l int _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } if len(m.Resources) > 0 { for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { { @@ -801,6 +885,10 @@ func (m *QueryCollectionResourcesRequest) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -816,6 +904,10 @@ func (m *QueryCollectionResourcesResponse) Size() (n int) { n += 1 + l + sovQuery(uint64(l)) } } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -1286,6 +1378,42 @@ func (m *QueryCollectionResourcesRequest) Unmarshal(dAtA []byte) error { } m.CollectionId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -1370,6 +1498,42 @@ func (m *QueryCollectionResourcesResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/resource/types/query.pb.gw.go b/x/resource/types/query.pb.gw.go index 47f1996e3..bb8e07625 100644 --- a/x/resource/types/query.pb.gw.go +++ b/x/resource/types/query.pb.gw.go @@ -185,6 +185,10 @@ func local_request_Query_ResourceMetadata_0(ctx context.Context, marshaler runti } +var ( + filter_Query_CollectionResources_0 = &utilities.DoubleArray{Encoding: map[string]int{"collection_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + func request_Query_CollectionResources_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryCollectionResourcesRequest var metadata runtime.ServerMetadata @@ -207,6 +211,13 @@ func request_Query_CollectionResources_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "collection_id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CollectionResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.CollectionResources(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -234,6 +245,13 @@ func local_request_Query_CollectionResources_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "collection_id", err) } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CollectionResources_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.CollectionResources(ctx, &protoReq) return msg, metadata, err diff --git a/x/resource/types/resource.pb.go b/x/resource/types/resource.pb.go index dfdf3b2c2..b10d1116b 100644 --- a/x/resource/types/resource.pb.go +++ b/x/resource/types/resource.pb.go @@ -27,59 +27,6 @@ var _ = time.Kitchen // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// ResourceWithMetadata describes the overall structure of a DID-Linked Resource -type ResourceWithMetadata struct { - Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (m *ResourceWithMetadata) Reset() { *m = ResourceWithMetadata{} } -func (m *ResourceWithMetadata) String() string { return proto.CompactTextString(m) } -func (*ResourceWithMetadata) ProtoMessage() {} -func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{0} -} -func (m *ResourceWithMetadata) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ResourceWithMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ResourceWithMetadata.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 *ResourceWithMetadata) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceWithMetadata.Merge(m, src) -} -func (m *ResourceWithMetadata) XXX_Size() int { - return m.Size() -} -func (m *ResourceWithMetadata) XXX_DiscardUnknown() { - xxx_messageInfo_ResourceWithMetadata.DiscardUnknown(m) -} - -var xxx_messageInfo_ResourceWithMetadata proto.InternalMessageInfo - -func (m *ResourceWithMetadata) GetResource() *Resource { - if m != nil { - return m.Resource - } - return nil -} - -func (m *ResourceWithMetadata) GetMetadata() *Metadata { - if m != nil { - return m.Metadata - } - return nil -} - // Resource stores the contents of a DID-Linked Resource type Resource struct { // bytes is the raw data of the Resource @@ -90,7 +37,7 @@ func (m *Resource) Reset() { *m = Resource{} } func (m *Resource) String() string { return proto.CompactTextString(m) } func (*Resource) ProtoMessage() {} func (*Resource) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{1} + return fileDescriptor_abfe0b32f2a40f67, []int{0} } func (m *Resource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -130,25 +77,30 @@ func (m *Resource) GetData() []byte { type Metadata struct { // collection_id is the ID of the collection that the Resource belongs to. Defined client-side. // This field is the unique identifier of the DID linked to this Resource - CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + CollectionId string `protobuf:"bytes,1,opt,name=collection_id,json=collectionId,proto3" json:"resourceCollectionId"` // id is the ID of the Resource. Defined client-side. // This field is a unique identifier for this specific version of the Resource. // Format: - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"resourceId"` // name is a human-readable name for the Resource. Defined client-side. // Does not change between different versions. // Example: PassportSchema, EducationTrustRegistry - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"resourceName"` // version is a human-readable semantic version for the Resource. Defined client-side. // Stored as a string. OPTIONAL. // Example: 1.0.0, v2.1.0 - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"resourceVersion"` // resource_type is a Resource type that identifies what the Resource is. Defined client-side. // This is NOT the same as the resource's media type. // Example: AnonCredsSchema, StatusList2021 - ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + ResourceType string `protobuf:"bytes,5,opt,name=resource_type,json=resourceType,proto3" json:"resourceType"` // List of alternative URIs for the SAME Resource. - AlsoKnownAs []*AlternativeUri `protobuf:"bytes,6,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` + AlsoKnownAs []*AlternativeUri `protobuf:"bytes,6,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"resourceAlternativeUri"` // media_type is IANA media type of the Resource. Defined ledger-side. // Example: application/json, image/png MediaType string `protobuf:"bytes,7,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"` @@ -173,7 +125,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{2} + return fileDescriptor_abfe0b32f2a40f67, []int{1} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -302,7 +254,7 @@ func (m *AlternativeUri) Reset() { *m = AlternativeUri{} } func (m *AlternativeUri) String() string { return proto.CompactTextString(m) } func (*AlternativeUri) ProtoMessage() {} func (*AlternativeUri) Descriptor() ([]byte, []int) { - return fileDescriptor_abfe0b32f2a40f67, []int{3} + return fileDescriptor_abfe0b32f2a40f67, []int{2} } func (m *AlternativeUri) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -345,97 +297,108 @@ func (m *AlternativeUri) GetDescription() string { return "" } -func init() { - proto.RegisterType((*ResourceWithMetadata)(nil), "cheqd.resource.v2.ResourceWithMetadata") - proto.RegisterType((*Resource)(nil), "cheqd.resource.v2.Resource") - proto.RegisterType((*Metadata)(nil), "cheqd.resource.v2.Metadata") - proto.RegisterType((*AlternativeUri)(nil), "cheqd.resource.v2.AlternativeUri") +// ResourceWithMetadata describes the overall structure of a DID-Linked Resource +type ResourceWithMetadata struct { + Resource *Resource `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResource"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"linkedResourceMetadata"` } -func init() { proto.RegisterFile("cheqd/resource/v2/resource.proto", fileDescriptor_abfe0b32f2a40f67) } +func (m *ResourceWithMetadata) Reset() { *m = ResourceWithMetadata{} } +func (m *ResourceWithMetadata) String() string { return proto.CompactTextString(m) } +func (*ResourceWithMetadata) ProtoMessage() {} +func (*ResourceWithMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_abfe0b32f2a40f67, []int{3} +} +func (m *ResourceWithMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceWithMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResourceWithMetadata.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 *ResourceWithMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceWithMetadata.Merge(m, src) +} +func (m *ResourceWithMetadata) XXX_Size() int { + return m.Size() +} +func (m *ResourceWithMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceWithMetadata.DiscardUnknown(m) +} -var fileDescriptor_abfe0b32f2a40f67 = []byte{ - // 514 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcf, 0x6e, 0xd3, 0x4c, - 0x10, 0x8f, 0x93, 0x7c, 0x8d, 0x33, 0x69, 0xfa, 0xd1, 0xa5, 0x07, 0x2b, 0x08, 0x27, 0x84, 0x4b, - 0x0f, 0xc5, 0x96, 0x02, 0x12, 0x37, 0xa4, 0x46, 0x08, 0xa9, 0xaa, 0xb8, 0x58, 0x05, 0x24, 0x2e, - 0x91, 0xe3, 0x1d, 0x92, 0x55, 0x63, 0xaf, 0xf1, 0xae, 0x4d, 0xfb, 0x06, 0x1c, 0xfb, 0x44, 0x9c, - 0x73, 0xec, 0x91, 0x53, 0x41, 0xc9, 0x8b, 0xa0, 0x5d, 0x7b, 0xdd, 0x20, 0xe0, 0x62, 0xcd, 0xfe, - 0xf6, 0xf7, 0x67, 0x3c, 0xa3, 0x85, 0x51, 0xb4, 0xc4, 0xcf, 0xd4, 0xcf, 0x50, 0xf0, 0x3c, 0x8b, - 0xd0, 0x2f, 0x26, 0x75, 0xed, 0xa5, 0x19, 0x97, 0x9c, 0x1c, 0x6a, 0x86, 0x57, 0xa3, 0xc5, 0x64, - 0x70, 0xb4, 0xe0, 0x0b, 0xae, 0x6f, 0x7d, 0x55, 0x95, 0xc4, 0xc1, 0x70, 0xc1, 0xf9, 0x62, 0x85, - 0xbe, 0x3e, 0xcd, 0xf3, 0x4f, 0xbe, 0x64, 0x31, 0x0a, 0x19, 0xc6, 0x69, 0x49, 0x18, 0x7f, 0xb5, - 0xe0, 0x28, 0xa8, 0x6c, 0x3e, 0x30, 0xb9, 0x7c, 0x8b, 0x32, 0xa4, 0xa1, 0x0c, 0xc9, 0x4b, 0xb0, - 0x8d, 0xbd, 0x63, 0x8d, 0xac, 0xe3, 0xde, 0xe4, 0x91, 0xf7, 0x47, 0xaa, 0x67, 0xa4, 0x41, 0x4d, - 0x56, 0xc2, 0xb8, 0x32, 0x71, 0x9a, 0xff, 0x14, 0x9a, 0x9c, 0xa0, 0x26, 0x8f, 0x5d, 0xb0, 0x8d, - 0x1d, 0x21, 0xd0, 0xd6, 0x06, 0x2a, 0x79, 0x3f, 0xd0, 0xf5, 0xf8, 0x5b, 0x0b, 0xec, 0xba, 0xbd, - 0xa7, 0xd0, 0x8f, 0xf8, 0x6a, 0x85, 0x91, 0x64, 0x3c, 0x99, 0x31, 0xaa, 0x99, 0xdd, 0x60, 0xff, - 0x1e, 0x3c, 0xa3, 0xe4, 0x00, 0x9a, 0x8c, 0xea, 0x26, 0xba, 0x41, 0x93, 0x51, 0xe5, 0x9a, 0x84, - 0x31, 0x3a, 0x2d, 0x8d, 0xe8, 0x9a, 0x38, 0xd0, 0x29, 0x30, 0x13, 0x8c, 0x27, 0x4e, 0x5b, 0xc3, - 0xe6, 0xa8, 0x22, 0x4c, 0xc7, 0x33, 0x79, 0x9d, 0xa2, 0xf3, 0x5f, 0x19, 0x61, 0xc0, 0x8b, 0xeb, - 0x14, 0xc9, 0x39, 0xf4, 0xc3, 0x95, 0xe0, 0xb3, 0xcb, 0x84, 0x7f, 0x49, 0x66, 0xa1, 0x70, 0xf6, - 0x46, 0xad, 0xe3, 0xde, 0xe4, 0xc9, 0x5f, 0x7e, 0xf9, 0x74, 0x25, 0x31, 0x4b, 0x42, 0xc9, 0x0a, - 0x7c, 0x97, 0xb1, 0x69, 0x7b, 0x7d, 0x37, 0xb4, 0x82, 0x9e, 0x52, 0x9f, 0x2b, 0xf1, 0xa9, 0x20, - 0x8f, 0x01, 0x62, 0xa4, 0x2c, 0x2c, 0xe3, 0x3a, 0x3a, 0xae, 0xab, 0x11, 0x9d, 0xf5, 0x0a, 0x3a, - 0x51, 0x86, 0xa1, 0x44, 0xea, 0xd8, 0x7a, 0xb0, 0x03, 0xaf, 0x5c, 0xaf, 0x67, 0xd6, 0xeb, 0x5d, - 0x98, 0xf5, 0x4e, 0xed, 0xf5, 0xdd, 0xb0, 0x71, 0xf3, 0x63, 0x68, 0x05, 0x46, 0x44, 0x06, 0x60, - 0x47, 0x4b, 0x8c, 0x2e, 0x45, 0x1e, 0x3b, 0x5d, 0x6d, 0x5e, 0x9f, 0xc9, 0x0b, 0x78, 0x98, 0x66, - 0x58, 0x30, 0x9e, 0x8b, 0x59, 0x35, 0x00, 0x35, 0x55, 0x50, 0xb4, 0xaa, 0xd5, 0x43, 0x43, 0x78, - 0x5f, 0xde, 0x9f, 0x51, 0x72, 0x02, 0xff, 0x27, 0x78, 0x25, 0x77, 0x15, 0xbd, 0x1d, 0x45, 0x5f, - 0x5d, 0xd6, 0xec, 0xf1, 0x6b, 0x38, 0xf8, 0x7d, 0x06, 0xe4, 0x01, 0xb4, 0xf2, 0x8c, 0x55, 0xbb, - 0x53, 0x25, 0x19, 0x41, 0x8f, 0xa2, 0x88, 0x32, 0x96, 0xaa, 0x1d, 0x56, 0xbb, 0xdb, 0x85, 0xa6, - 0x6f, 0xd6, 0x1b, 0xd7, 0xba, 0xdd, 0xb8, 0xd6, 0xcf, 0x8d, 0x6b, 0xdd, 0x6c, 0xdd, 0xc6, 0xed, - 0xd6, 0x6d, 0x7c, 0xdf, 0xba, 0x8d, 0x8f, 0x27, 0x0b, 0x26, 0x97, 0xf9, 0xdc, 0x8b, 0x78, 0xec, - 0x97, 0x4f, 0x48, 0x7f, 0x9f, 0x25, 0x9c, 0xa2, 0x7f, 0x75, 0xff, 0x9e, 0xd4, 0x74, 0xc5, 0x7c, - 0x4f, 0x0f, 0xed, 0xf9, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x6a, 0xda, 0x2f, 0x6e, 0x03, - 0x00, 0x00, +var xxx_messageInfo_ResourceWithMetadata proto.InternalMessageInfo + +func (m *ResourceWithMetadata) GetResource() *Resource { + if m != nil { + return m.Resource + } + return nil } -func (m *ResourceWithMetadata) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err +func (m *ResourceWithMetadata) GetMetadata() *Metadata { + if m != nil { + return m.Metadata } - return dAtA[:n], nil + return nil } -func (m *ResourceWithMetadata) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) +func init() { + proto.RegisterType((*Resource)(nil), "cheqd.resource.v2.Resource") + proto.RegisterType((*Metadata)(nil), "cheqd.resource.v2.Metadata") + proto.RegisterType((*AlternativeUri)(nil), "cheqd.resource.v2.AlternativeUri") + proto.RegisterType((*ResourceWithMetadata)(nil), "cheqd.resource.v2.ResourceWithMetadata") } -func (m *ResourceWithMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Metadata != nil { - { - size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintResource(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Resource != nil { - { - size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintResource(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil +func init() { proto.RegisterFile("cheqd/resource/v2/resource.proto", fileDescriptor_abfe0b32f2a40f67) } + +var fileDescriptor_abfe0b32f2a40f67 = []byte{ + // 595 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x54, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0x8d, 0xdb, 0xfc, 0x5a, 0x77, 0xd2, 0xf4, 0xcf, 0xfe, 0x2a, 0xb0, 0x82, 0xb0, 0x43, 0xc4, + 0xa1, 0x87, 0x62, 0x8b, 0x00, 0x47, 0x90, 0x1a, 0x10, 0x52, 0x55, 0xc1, 0x61, 0x29, 0x20, 0x71, + 0x89, 0x5c, 0xef, 0x90, 0xac, 0x1a, 0x7b, 0x83, 0xbd, 0x0e, 0xed, 0xb7, 0xe8, 0xc7, 0xe1, 0xc6, + 0xb5, 0xc7, 0x1e, 0x39, 0x19, 0xd4, 0xdc, 0xf2, 0x29, 0xd0, 0xae, 0xb3, 0x26, 0x51, 0x7b, 0x89, + 0x66, 0xe6, 0xbd, 0x79, 0x1e, 0xcf, 0x9b, 0x18, 0xda, 0xd1, 0x10, 0xbf, 0xb1, 0x20, 0xc5, 0x4c, + 0xe4, 0x69, 0x84, 0xc1, 0xa4, 0x5b, 0xc5, 0xfe, 0x38, 0x15, 0x52, 0x90, 0x5d, 0xcd, 0xf0, 0xab, + 0xea, 0xa4, 0xdb, 0xda, 0x1b, 0x88, 0x81, 0xd0, 0x68, 0xa0, 0xa2, 0x92, 0xd8, 0xf2, 0x06, 0x42, + 0x0c, 0x46, 0x18, 0xe8, 0xec, 0x34, 0xff, 0x1a, 0x48, 0x1e, 0x63, 0x26, 0xc3, 0x78, 0x5c, 0x12, + 0x3a, 0x2e, 0xd8, 0x74, 0xae, 0x42, 0x08, 0xd4, 0x59, 0x28, 0x43, 0xc7, 0x6a, 0x5b, 0xfb, 0x9b, + 0x54, 0xc7, 0x9d, 0x9f, 0x75, 0xb0, 0xdf, 0xa1, 0x0c, 0x55, 0x42, 0x5e, 0x42, 0x33, 0x12, 0xa3, + 0x11, 0x46, 0x92, 0x8b, 0xa4, 0xcf, 0x99, 0x66, 0x6e, 0xf4, 0x9c, 0x59, 0xe1, 0xed, 0x99, 0x59, + 0x5e, 0x57, 0x84, 0x23, 0x46, 0x37, 0xa3, 0x85, 0x8c, 0xb8, 0xb0, 0xc2, 0x99, 0xb3, 0xa2, 0x7b, + 0xb6, 0x66, 0x85, 0x07, 0xa6, 0xe7, 0x88, 0xd1, 0x15, 0xce, 0xc8, 0x63, 0xa8, 0x27, 0x61, 0x8c, + 0xce, 0xaa, 0x66, 0xec, 0xcc, 0x0a, 0x6f, 0xd3, 0x30, 0xde, 0x87, 0x31, 0x52, 0x8d, 0x92, 0xa7, + 0xb0, 0x3e, 0xc1, 0x34, 0xe3, 0x22, 0x71, 0xea, 0x9a, 0x78, 0xff, 0xaa, 0xf0, 0xac, 0x59, 0xe1, + 0x6d, 0x1b, 0xf2, 0xa7, 0x12, 0xa6, 0x86, 0x47, 0x5e, 0x40, 0xd3, 0x60, 0x7d, 0x79, 0x31, 0x46, + 0xe7, 0xbf, 0xdb, 0x4f, 0x38, 0xb9, 0x18, 0x23, 0x5d, 0xca, 0x08, 0x42, 0x33, 0x1c, 0x65, 0xa2, + 0x7f, 0x96, 0x88, 0xef, 0x49, 0x3f, 0xcc, 0x9c, 0xb5, 0xf6, 0xea, 0x7e, 0xa3, 0xfb, 0xc8, 0xbf, + 0xb5, 0x7d, 0xff, 0x70, 0x24, 0x31, 0x4d, 0x42, 0xc9, 0x27, 0xf8, 0x31, 0xe5, 0x3d, 0x77, 0x3e, + 0xd2, 0x3d, 0xc3, 0x59, 0xc6, 0x69, 0x43, 0xe9, 0x1e, 0x2b, 0xd9, 0xc3, 0x8c, 0x3c, 0x04, 0x88, + 0x91, 0xf1, 0xb0, 0x1c, 0x6d, 0x5d, 0x8d, 0x46, 0x37, 0x74, 0x45, 0x4f, 0xf1, 0x0a, 0xd6, 0xa3, + 0x14, 0x43, 0x89, 0xcc, 0xb1, 0xdb, 0xd6, 0x7e, 0xa3, 0xdb, 0xf2, 0x4b, 0x53, 0x7d, 0x63, 0xaa, + 0x7f, 0x62, 0x4c, 0xed, 0xd9, 0x57, 0x85, 0x57, 0xbb, 0xfc, 0xed, 0x59, 0xd4, 0x34, 0x91, 0x16, + 0xd8, 0xd1, 0x10, 0xa3, 0xb3, 0x2c, 0x8f, 0x9d, 0x0d, 0x2d, 0x5e, 0xe5, 0xe4, 0x39, 0xfc, 0x3f, + 0x4e, 0x71, 0xc2, 0x45, 0x9e, 0xf5, 0xe7, 0xcb, 0x52, 0xb6, 0x82, 0x5e, 0x4f, 0x5d, 0xbd, 0x04, + 0xdd, 0x35, 0x84, 0xf9, 0x56, 0x8f, 0x18, 0x39, 0x80, 0xed, 0x04, 0xcf, 0xe5, 0x62, 0x47, 0x63, + 0xa1, 0xa3, 0xa9, 0xc0, 0x8a, 0xdd, 0x79, 0x03, 0x5b, 0xcb, 0x6f, 0x4f, 0x76, 0x60, 0x35, 0x4f, + 0x79, 0x79, 0x3c, 0x54, 0x85, 0xa4, 0x0d, 0x0d, 0x86, 0x59, 0x94, 0xf2, 0xb1, 0x3a, 0x95, 0xf2, + 0x44, 0xe8, 0x62, 0xa9, 0xf3, 0xc3, 0x82, 0x3d, 0x73, 0xa8, 0x9f, 0xb9, 0x1c, 0x56, 0x37, 0x79, + 0x0c, 0xb6, 0x59, 0xb2, 0x56, 0x6c, 0x74, 0x1f, 0xdc, 0xe1, 0x8f, 0x69, 0xed, 0x91, 0x59, 0xe1, + 0x6d, 0x8d, 0x78, 0x72, 0x86, 0xcc, 0xd4, 0x68, 0x25, 0x40, 0x3e, 0x80, 0x1d, 0xcf, 0x85, 0xf5, + 0x10, 0x77, 0x8b, 0x99, 0x67, 0xf7, 0x5a, 0xca, 0xe2, 0x65, 0x31, 0x83, 0xd1, 0x4a, 0xa8, 0xf7, + 0xf6, 0xea, 0xc6, 0xb5, 0xae, 0x6f, 0x5c, 0xeb, 0xcf, 0x8d, 0x6b, 0x5d, 0x4e, 0xdd, 0xda, 0xf5, + 0xd4, 0xad, 0xfd, 0x9a, 0xba, 0xb5, 0x2f, 0x07, 0x03, 0x2e, 0x87, 0xf9, 0xa9, 0x1f, 0x89, 0x38, + 0x28, 0xff, 0xf3, 0xfa, 0xf7, 0x49, 0x22, 0x18, 0x06, 0xe7, 0xff, 0x3e, 0x00, 0xea, 0x30, 0xb2, + 0xd3, 0x35, 0xed, 0xf7, 0xb3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xb4, 0xc8, 0xa0, 0x1f, + 0x04, 0x00, 0x00, } func (m *Resource) Marshal() (dAtA []byte, err error) { @@ -509,12 +472,12 @@ func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err3 != nil { - return 0, err3 + n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err1 != nil { + return 0, err1 } - i -= n3 - i = encodeVarintResource(dAtA, i, uint64(n3)) + i -= n1 + i = encodeVarintResource(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x42 if len(m.MediaType) > 0 { @@ -613,6 +576,53 @@ func (m *AlternativeUri) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ResourceWithMetadata) 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 *ResourceWithMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceWithMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Metadata != nil { + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintResource(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Resource != nil { + { + size, err := m.Resource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintResource(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintResource(dAtA []byte, offset int, v uint64) int { offset -= sovResource(v) base := offset @@ -624,23 +634,6 @@ func encodeVarintResource(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *ResourceWithMetadata) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Resource != nil { - l = m.Resource.Size() - n += 1 + l + sovResource(uint64(l)) - } - if m.Metadata != nil { - l = m.Metadata.Size() - n += 1 + l + sovResource(uint64(l)) - } - return n -} - func (m *Resource) Size() (n int) { if m == nil { return 0 @@ -724,134 +717,29 @@ func (m *AlternativeUri) Size() (n int) { return n } +func (m *ResourceWithMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Resource != nil { + l = m.Resource.Size() + n += 1 + l + sovResource(uint64(l)) + } + if m.Metadata != nil { + l = m.Metadata.Size() + n += 1 + l + sovResource(uint64(l)) + } + return n +} + func sovResource(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozResource(x uint64) (n int) { return sovResource(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *ResourceWithMetadata) 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 ErrIntOverflowResource - } - 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: ResourceWithMetadata: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthResource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Resource == nil { - m.Resource = &Resource{} - } - if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowResource - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthResource - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthResource - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Metadata == nil { - m.Metadata = &Metadata{} - } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipResource(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *Resource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -1455,6 +1343,128 @@ func (m *AlternativeUri) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResourceWithMetadata) 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 ErrIntOverflowResource + } + 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: ResourceWithMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceWithMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowResource + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthResource + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthResource + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resource == nil { + m.Resource = &Resource{} + } + if err := m.Resource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowResource + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthResource + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthResource + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metadata == nil { + m.Metadata = &Metadata{} + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipResource(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthResource + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipResource(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/resource/types/tx.pb.go b/x/resource/types/tx.pb.go index c37b3b895..7a15d39d2 100644 --- a/x/resource/types/tx.pb.go +++ b/x/resource/types/tx.pb.go @@ -7,6 +7,7 @@ import ( context "context" fmt "fmt" types "github.com/cheqd/cheqd-node/x/did/types" + _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" @@ -28,10 +29,12 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// MsgCreateResource defines the Msg/CreateResource request type. +// It describes the parameters of a request for creating a resource. type MsgCreateResource struct { - // Payload of the resource to be created + // Payload containing the resource to be created. Payload *MsgCreateResourcePayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // Signatures of the corresponding DID Document's controller(s) + // Signatures of the corresponding DID Document's controller(s). Signatures []*types.SignInfo `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` } @@ -82,21 +85,50 @@ func (m *MsgCreateResource) GetSignatures() []*types.SignInfo { return nil } +// MsgCreateResourcePayload defines the structure of the payload for creating a resource. +// +// If a resource with the given id does not exist already, +// it will be created. The resource will be created in the resource collection. +// +// If a resource with the given id, collection_id already exists, an error code 2200 will be returned. +// +// A new version of the resource in an existing collection will be created, +// if a resource in that collection with the same name, resource_type and empty next_version_id exists. +// +// An update operation is not possible, because the resource is immutable by design. type MsgCreateResourcePayload struct { - // data is a byte-representation of the actual Data the user wants to store + // data is a byte-representation of the actual Data the user wants to store. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - // collection_id is an identifier of the DidDocument the resource belongs to - CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"` - // id is an UUID of the resource - Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` - // name is a human-readable name of the resource - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // version is a version of the resource - Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` - // resource_type is a type of the resource - ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` - // also_known_as is a list of URIs that can be used to get the resource - AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"also_known_as,omitempty"` + // collection_id is an identifier of the DidDocument the resource belongs to. + // Format: + // + // Examples: + // - c82f2b02-bdab-4dd7-b833-3e143745d612 + // - wGHEXrZvJxR8vw5P3UWH1j + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId,proto3" json:"resourceCollectionId"` + // id is a unique id of the resource. + // Format: + Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"resourceId"` + // name is a human-readable name of the resource. + // Format: + // + // Does not change between different versions. + // Example: PassportSchema, EducationTrustRegistry + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"resourceName"` + // version is a version of the resource. + // Format: + // Stored as a string. OPTIONAL. + // + // Example: 1.0.0, v2.1.0 + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"resourceVersion"` + // resource_type is a type of the resource. + // Format: + // + // This is NOT the same as the resource's media type. + // Example: AnonCredsSchema, StatusList2021 + ResourceType string `protobuf:"bytes,6,opt,name=resource_type,json=resourceType,proto3" json:"resourceType"` + // also_known_as is a list of URIs that can be used to get the resource. + AlsoKnownAs []*AlternativeUri `protobuf:"bytes,7,rep,name=also_known_as,json=alsoKnownAs,proto3" json:"resourceAlternativeUri"` } func (m *MsgCreateResourcePayload) Reset() { *m = MsgCreateResourcePayload{} } @@ -182,8 +214,8 @@ func (m *MsgCreateResourcePayload) GetAlsoKnownAs() []*AlternativeUri { } type MsgCreateResourceResponse struct { - // Metadata which was creted after applying to the ledger - Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // Return the created resource metadata. + Resource *Metadata `protobuf:"bytes,1,opt,name=resource,proto3" json:"linkedResourceMetadata"` } func (m *MsgCreateResourceResponse) Reset() { *m = MsgCreateResourceResponse{} } @@ -235,34 +267,40 @@ func init() { func init() { proto.RegisterFile("cheqd/resource/v2/tx.proto", fileDescriptor_1d13b428c5ed4ca4) } var fileDescriptor_1d13b428c5ed4ca4 = []byte{ - // 429 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcf, 0x6b, 0xd4, 0x40, - 0x14, 0xde, 0xd9, 0xad, 0x5d, 0x9d, 0x6d, 0x0b, 0x1d, 0x50, 0xc6, 0x08, 0x21, 0xae, 0x1e, 0x16, - 0xac, 0x09, 0x44, 0xd0, 0x73, 0x15, 0x85, 0x22, 0x05, 0x19, 0xeb, 0xc5, 0x4b, 0x98, 0x66, 0x9e, - 0xe9, 0xd0, 0x74, 0x26, 0xce, 0xcc, 0xc6, 0xee, 0x7f, 0x21, 0xfe, 0x55, 0x1e, 0x7b, 0xf4, 0x28, - 0xbb, 0x7f, 0x87, 0x20, 0x99, 0x6c, 0xda, 0x62, 0x2a, 0xf4, 0x12, 0x26, 0xef, 0x7d, 0xdf, 0xf7, - 0x7e, 0x7c, 0x0f, 0x07, 0xf9, 0x09, 0x7c, 0x15, 0x89, 0x01, 0xab, 0xe7, 0x26, 0x87, 0xa4, 0x4e, - 0x13, 0x77, 0x1e, 0x57, 0x46, 0x3b, 0x4d, 0x76, 0x7d, 0x2e, 0xee, 0x72, 0x71, 0x9d, 0x06, 0xf7, - 0x5b, 0xb8, 0x90, 0xe2, 0x3a, 0x32, 0x88, 0xfa, 0x2a, 0x97, 0x2c, 0x8f, 0x98, 0xfe, 0x40, 0x78, - 0xf7, 0xd0, 0x16, 0x6f, 0x0c, 0x70, 0x07, 0x6c, 0x9d, 0x23, 0x6f, 0xf1, 0xb8, 0xe2, 0x8b, 0x52, - 0x73, 0x41, 0x51, 0x84, 0x66, 0x93, 0xf4, 0x59, 0xdc, 0xab, 0x19, 0xf7, 0x68, 0x1f, 0x5a, 0x0a, - 0xeb, 0xb8, 0xe4, 0x25, 0xc6, 0x56, 0x16, 0x8a, 0xbb, 0xb9, 0x01, 0x4b, 0x87, 0xd1, 0x68, 0x36, - 0x49, 0x1f, 0xac, 0x95, 0x84, 0x14, 0x8d, 0xc8, 0x47, 0x59, 0xa8, 0x03, 0xf5, 0x45, 0xb3, 0x6b, - 0xc8, 0xe9, 0x1f, 0x84, 0xe9, 0xff, 0xd4, 0x09, 0xc1, 0x1b, 0x82, 0x3b, 0xee, 0x1b, 0xdb, 0x62, - 0xfe, 0x4d, 0x9e, 0xe0, 0xed, 0x5c, 0x97, 0x25, 0xe4, 0x4e, 0x6a, 0x95, 0x49, 0x41, 0x87, 0x11, - 0x9a, 0xdd, 0x63, 0x5b, 0x57, 0xc1, 0x03, 0x41, 0x76, 0xf0, 0x50, 0x0a, 0x3a, 0xf2, 0x99, 0xa1, - 0xf4, 0x42, 0x8a, 0x9f, 0x01, 0xdd, 0xf0, 0x11, 0xff, 0x26, 0x14, 0x8f, 0x6b, 0x30, 0x56, 0x6a, - 0x45, 0xef, 0xf8, 0x70, 0xf7, 0xdb, 0x94, 0xe8, 0x86, 0xcf, 0xdc, 0xa2, 0x02, 0xba, 0xd9, 0x96, - 0xe8, 0x82, 0x47, 0x8b, 0xaa, 0xd9, 0xdb, 0x36, 0x2f, 0xad, 0xce, 0x4e, 0x95, 0xfe, 0xa6, 0x32, - 0x6e, 0xe9, 0xd8, 0xcf, 0xfc, 0xf8, 0x86, 0xed, 0xed, 0x97, 0x0e, 0x8c, 0xe2, 0x4e, 0xd6, 0xf0, - 0xc9, 0x48, 0x36, 0x69, 0x78, 0xef, 0x1b, 0xda, 0xbe, 0x9d, 0x1e, 0xe1, 0x87, 0xbd, 0xf1, 0x19, - 0xd8, 0x4a, 0x2b, 0x0b, 0xe4, 0x15, 0xbe, 0xdb, 0xe9, 0xac, 0xcd, 0x79, 0x74, 0x93, 0x39, 0xe0, - 0x78, 0xb3, 0x1a, 0x76, 0x09, 0x4e, 0x4f, 0xf1, 0xe8, 0xd0, 0x16, 0x44, 0xe0, 0x9d, 0x7f, 0xdc, - 0x7e, 0x7a, 0x1b, 0x73, 0x83, 0xbd, 0xdb, 0xa0, 0xba, 0x2e, 0x5f, 0xbf, 0xfb, 0xb9, 0x0c, 0xd1, - 0xc5, 0x32, 0x44, 0xbf, 0x97, 0x21, 0xfa, 0xbe, 0x0a, 0x07, 0x17, 0xab, 0x70, 0xf0, 0x6b, 0x15, - 0x0e, 0x3e, 0xef, 0x15, 0xd2, 0x9d, 0xcc, 0x8f, 0xe3, 0x5c, 0x9f, 0x25, 0xed, 0x79, 0xfa, 0xef, - 0x73, 0xa5, 0x05, 0x24, 0xe7, 0x57, 0xb7, 0xda, 0x2c, 0xd9, 0x1e, 0x6f, 0xfa, 0x33, 0x7d, 0xf1, - 0x37, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x0f, 0x8d, 0x06, 0x10, 0x03, 0x00, 0x00, + // 513 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x41, 0x6f, 0xd3, 0x30, + 0x18, 0x86, 0x9b, 0xb6, 0xac, 0xe0, 0xb6, 0x83, 0x59, 0x63, 0x98, 0x22, 0xa5, 0xa5, 0xda, 0xa1, + 0x12, 0x23, 0x11, 0x45, 0x70, 0xe3, 0xb0, 0x4e, 0x20, 0x55, 0x68, 0x08, 0x79, 0xc0, 0x81, 0x4b, + 0xe5, 0xc5, 0x26, 0xb3, 0x9a, 0xda, 0x21, 0x76, 0xcb, 0x7a, 0xe7, 0x07, 0x20, 0x7e, 0xd5, 0x8e, + 0x3b, 0x72, 0xaa, 0x50, 0x7b, 0xeb, 0xaf, 0x40, 0x71, 0xea, 0xd2, 0x91, 0x21, 0xed, 0x12, 0xd9, + 0x79, 0x9f, 0xf7, 0xf5, 0x97, 0x7c, 0x9f, 0x41, 0x23, 0x38, 0x63, 0x5f, 0xa9, 0x9f, 0x30, 0x25, + 0xc7, 0x49, 0xc0, 0xfc, 0x49, 0xd7, 0xd7, 0xe7, 0x5e, 0x9c, 0x48, 0x2d, 0xe1, 0x8e, 0xd1, 0x3c, + 0xab, 0x79, 0x93, 0x6e, 0xe3, 0x7e, 0x86, 0x53, 0x4e, 0x37, 0xc9, 0x46, 0x2b, 0x9f, 0xb2, 0x76, + 0x65, 0xc4, 0x6e, 0x28, 0x43, 0x69, 0x96, 0x7e, 0xba, 0xca, 0xde, 0xb6, 0x7f, 0x3a, 0x60, 0xe7, + 0x58, 0x85, 0x47, 0x09, 0x23, 0x9a, 0xe1, 0x95, 0x03, 0xbe, 0x06, 0x95, 0x98, 0x4c, 0x23, 0x49, + 0x28, 0x72, 0x5a, 0x4e, 0xa7, 0xda, 0x7d, 0xe2, 0xe5, 0x2a, 0xf1, 0x72, 0xb6, 0xf7, 0x99, 0x05, + 0x5b, 0x2f, 0x7c, 0x09, 0x80, 0xe2, 0xa1, 0x20, 0x7a, 0x9c, 0x30, 0x85, 0x8a, 0xad, 0x52, 0xa7, + 0xda, 0xdd, 0x5b, 0x25, 0x51, 0x4e, 0xd3, 0x90, 0x13, 0x1e, 0x8a, 0xbe, 0xf8, 0x22, 0xf1, 0x06, + 0xd9, 0xfe, 0x5e, 0x02, 0xe8, 0x7f, 0xe9, 0x10, 0x82, 0x32, 0x25, 0x9a, 0x98, 0xc2, 0x6a, 0xd8, + 0xac, 0xe1, 0x2b, 0x50, 0x0f, 0x64, 0x14, 0xb1, 0x40, 0x73, 0x29, 0x06, 0x9c, 0xa2, 0x62, 0xcb, + 0xe9, 0xdc, 0xe9, 0xa1, 0xe5, 0xac, 0xb9, 0x6b, 0x4b, 0x3e, 0x5a, 0x03, 0x7d, 0x8a, 0x6b, 0xc1, + 0xc6, 0x0e, 0xba, 0xa0, 0xc8, 0x29, 0x2a, 0x19, 0xcf, 0xf6, 0x72, 0xd6, 0x04, 0xd6, 0xd3, 0xa7, + 0xb8, 0xc8, 0x29, 0xdc, 0x07, 0x65, 0x41, 0x46, 0x0c, 0x95, 0x0d, 0x71, 0x6f, 0x39, 0x6b, 0xd6, + 0x2c, 0xf1, 0x8e, 0x8c, 0x18, 0x36, 0x2a, 0x7c, 0x06, 0x2a, 0x13, 0x96, 0x28, 0x2e, 0x05, 0xba, + 0x65, 0xc0, 0x07, 0x17, 0xb3, 0xa6, 0xb3, 0x9c, 0x35, 0xef, 0x5a, 0xf8, 0x53, 0x26, 0x63, 0xcb, + 0xc1, 0x17, 0xa0, 0x6e, 0xb5, 0x81, 0x9e, 0xc6, 0x0c, 0x6d, 0xe5, 0x4f, 0xf8, 0x30, 0x8d, 0x19, + 0xbe, 0xb2, 0x83, 0x0c, 0xd4, 0x49, 0xa4, 0xe4, 0x60, 0x28, 0xe4, 0x37, 0x31, 0x20, 0x0a, 0x55, + 0xcc, 0xaf, 0x7d, 0x7c, 0x4d, 0x93, 0x0e, 0x23, 0xcd, 0x12, 0x41, 0x34, 0x9f, 0xb0, 0x8f, 0x09, + 0xef, 0xb9, 0xab, 0x92, 0xf6, 0x2c, 0x73, 0x55, 0xc7, 0xd5, 0x34, 0xf7, 0x6d, 0x1a, 0x7b, 0xa8, + 0xda, 0x31, 0x78, 0x98, 0xeb, 0x02, 0x66, 0x2a, 0x96, 0x42, 0x31, 0x78, 0x02, 0x6e, 0xdb, 0x8c, + 0xd5, 0x8c, 0x3c, 0xba, 0x6e, 0x46, 0x98, 0x26, 0x69, 0x87, 0x7a, 0x8d, 0xf4, 0xd0, 0x88, 0x8b, + 0x21, 0xa3, 0x36, 0xca, 0x6a, 0x78, 0x1d, 0xd4, 0x1d, 0x82, 0xd2, 0xb1, 0x0a, 0x21, 0x05, 0xdb, + 0xff, 0x0c, 0xe4, 0xfe, 0x4d, 0xe6, 0xaf, 0x71, 0x70, 0x13, 0xca, 0x7e, 0x41, 0xef, 0xcd, 0xc5, + 0xdc, 0x75, 0x2e, 0xe7, 0xae, 0xf3, 0x7b, 0xee, 0x3a, 0x3f, 0x16, 0x6e, 0xe1, 0x72, 0xe1, 0x16, + 0x7e, 0x2d, 0xdc, 0xc2, 0xe7, 0x83, 0x90, 0xeb, 0xb3, 0xf1, 0xa9, 0x17, 0xc8, 0x91, 0x9f, 0xdd, + 0x2b, 0xf3, 0x7c, 0x2a, 0x24, 0x65, 0xfe, 0xf9, 0xdf, 0x4b, 0x96, 0xb6, 0x4c, 0x9d, 0x6e, 0x99, + 0x9b, 0xf4, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x6d, 0x3e, 0x2f, 0xc9, 0x03, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/resource/types/tx_msg_create_resource_payload.go b/x/resource/types/tx_msg_create_resource_payload.go index 094adc250..c5cf7c2f7 100644 --- a/x/resource/types/tx_msg_create_resource_payload.go +++ b/x/resource/types/tx_msg_create_resource_payload.go @@ -23,6 +23,7 @@ func (msg *MsgCreateResourcePayload) ToResource() ResourceWithMetadata { CollectionId: msg.CollectionId, Id: msg.Id, Name: msg.Name, + Version: msg.Version, ResourceType: msg.ResourceType, AlsoKnownAs: msg.AlsoKnownAs, }, diff --git a/x/resource/types/tx_msg_create_resource_payload_test.go b/x/resource/types/tx_msg_create_resource_payload_test.go index 2edc6dc07..06c158d9b 100644 --- a/x/resource/types/tx_msg_create_resource_payload_test.go +++ b/x/resource/types/tx_msg_create_resource_payload_test.go @@ -40,7 +40,7 @@ var _ = Describe("TxMsgCreateResourcePayload", func() { ResourceType: "", Data: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, } - Expect(msg.Validate().Error()).To(Equal("resource_type: cannot be blank.")) + Expect(msg.Validate().Error()).To(Equal("resourceType: cannot be blank.")) }) }) }) From 4c43e77c91667689f67404ea2e75339e054b9b5b Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 17:33:06 +0000 Subject: [PATCH 4/9] ci: Linter path exclude fix --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6b653d2ab..f30319568 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -90,7 +90,7 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LOG_LEVEL: WARN - FILTER_REGEX_EXCLUDE: ".*api/docs/config.*" + FILTER_REGEX_EXCLUDE: "**/config.yaml" VALIDATE_ALL_CODEBASE: false MULTI_STATUS: true From 2740109c61a751b10f32631a6f0aa72ff9f83933 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 18:04:28 +0000 Subject: [PATCH 5/9] ci: Absolute path for linter --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f30319568..bcbc32ef9 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -90,7 +90,7 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LOG_LEVEL: WARN - FILTER_REGEX_EXCLUDE: "**/config.yaml" + FILTER_REGEX_EXCLUDE: "/github/workspace/api/docs/config.yaml" VALIDATE_ALL_CODEBASE: false MULTI_STATUS: true From eb58589f7e9f74d0221f8584cf748a2c69fec569 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 18:47:14 +0000 Subject: [PATCH 6/9] ci: OpenAPI linter with overrides --- .github/linters/.openapirc.yaml | 13 +++++++++++++ .github/workflows/lint.yml | 1 - 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .github/linters/.openapirc.yaml diff --git a/.github/linters/.openapirc.yaml b/.github/linters/.openapirc.yaml new file mode 100644 index 000000000..2bf016dda --- /dev/null +++ b/.github/linters/.openapirc.yaml @@ -0,0 +1,13 @@ +--- + +########################## +########################## +## OpenAPI Linter rules ## +########################## +########################## + +extends: spectral:oas + +overrides: + files: + - "**/docs/config.yaml" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bcbc32ef9..1c1ed1b35 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -90,7 +90,6 @@ jobs: DEFAULT_BRANCH: main GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LOG_LEVEL: WARN - FILTER_REGEX_EXCLUDE: "/github/workspace/api/docs/config.yaml" VALIDATE_ALL_CODEBASE: false MULTI_STATUS: true From 1134b0a4e39154c543cc6a1f936d6ff31aa88f65 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 19:20:43 +0000 Subject: [PATCH 7/9] ci: Override path-params rule --- .github/linters/.openapirc.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/linters/.openapirc.yaml b/.github/linters/.openapirc.yaml index 2bf016dda..019fa8cb1 100644 --- a/.github/linters/.openapirc.yaml +++ b/.github/linters/.openapirc.yaml @@ -8,6 +8,5 @@ extends: spectral:oas -overrides: - files: - - "**/docs/config.yaml" +rules: + path-params: false From f6b4cd5851d9df01e8d402336336664576edce95 Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Fri, 20 Jan 2023 19:56:33 +0000 Subject: [PATCH 8/9] ci: oas2-schema warn --- .github/linters/.openapirc.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/linters/.openapirc.yaml b/.github/linters/.openapirc.yaml index 019fa8cb1..df4ec7868 100644 --- a/.github/linters/.openapirc.yaml +++ b/.github/linters/.openapirc.yaml @@ -9,4 +9,4 @@ extends: spectral:oas rules: - path-params: false + oas2-schema: warn From 014f7451c9eb18d68109fcd2d2ed5a8178b8767b Mon Sep 17 00:00:00 2001 From: Ankur Banerjee Date: Mon, 23 Jan 2023 09:01:03 +0000 Subject: [PATCH 9/9] fix: Set AppVersion/ProtocolVersion [DEV-2112] (#518) * Set AppVersion/ProtocolVersion * Update lint.yml * lint all codebase to see what happens * Revert "lint all codebase to see what happens" This reverts commit a4d7b001ebb641c5b47bb1b015cc79110238b642. --- app/app.go | 1 + app/const.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 99c2c6f0d..de3a9b671 100644 --- a/app/app.go +++ b/app/app.go @@ -259,6 +259,7 @@ func New( ) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) + bApp.SetProtocolVersion(ProtocolVersion) bApp.SetInterfaceRegistry(interfaceRegistry) keys := sdk.NewKVStoreKeys( diff --git a/app/const.go b/app/const.go index 866176da0..cf60550b9 100644 --- a/app/const.go +++ b/app/const.go @@ -4,7 +4,9 @@ const ( Name = "cheqd-node" Home = ".cheqdnode" - UpgradeName = "v1" + // Set ProtocolVersion to app's major version number + ProtocolVersion = 1 + UpgradeName = "v1" // allowed msg types of ica host authzMsgExec = "/cosmos.authz.v1beta1.MsgExec"