From 928dc49330360106e857d7bcf864c1931e00ed80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20=C4=86wirko?= Date: Mon, 11 Dec 2023 21:03:54 +0100 Subject: [PATCH] set properties and refactor --- CHANGELOG.md | 6 + Cargo.lock | 678 +++++++++------- Cargo.toml | 6 +- README.md | 9 +- meta/Cargo.lock | 1210 ++++++++++++++++++++++++++--- meta/Cargo.toml | 4 +- output/elven-nft-minter.abi.json | 310 ++++---- output/elven-nft-minter.mxsc.json | 314 ++++---- output/elven-nft-minter.wasm | Bin 18180 -> 19005 bytes src/lib.rs | 753 +----------------- src/operations.rs | 408 ++++++++++ src/setup.rs | 290 +++++++ src/storage.rs | 99 +++ wasm/Cargo.lock | 87 ++- wasm/Cargo.toml | 11 +- wasm/src/lib.rs | 29 +- 16 files changed, 2738 insertions(+), 1476 deletions(-) create mode 100644 src/operations.rs create mode 100644 src/setup.rs create mode 100644 src/storage.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ae2af6..edf40b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +### [1.14.0](https://github.com/ElvenTools/elven-nft-minter-sc/releases/tag/v1.14.0) (2023-12-11) +- update multiversx-sc dependencies +- initial refactoring +- add a possibility to define collection properties +- changes in arguments for issue_token + ### [1.13.0](https://github.com/ElvenTools/elven-nft-minter-sc/releases/tag/v1.13.0) (2023-08-09) - update multiversx-sc dependencies diff --git a/Cargo.lock b/Cargo.lock index 01a682c..855c89a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,13 +29,14 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -47,18 +48,23 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] @@ -83,17 +89,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -152,6 +158,12 @@ version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bech32" version = "0.9.1" @@ -165,8 +177,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" dependencies = [ "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", + "rand", + "rand_core", "serde", "unicode-normalization", ] @@ -259,45 +271,43 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.3.19" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstream", "anstyle", "clap_lex", - "once_cell", "strsim", ] [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "colorchoice" @@ -313,7 +323,7 @@ checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" dependencies = [ "is-terminal", "lazy_static", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -322,6 +332,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + [[package]] name = "convert_case" version = "0.6.0" @@ -331,6 +347,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "copy_dir" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543d1dd138ef086e2ff05e3a48cf9da045da2033d16f8538fd76b86cd49b2ca3" +dependencies = [ + "walkdir", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -356,6 +381,24 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -378,49 +421,40 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.2.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", "subtle", "zeroize", ] [[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "fnv", - "ident_case", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] -name = "darling_macro" -version = "0.20.3" +name = "der" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ - "darling_core", - "quote", - "syn 2.0.28", + "const-oid", + "zeroize", ] [[package]] @@ -448,20 +482,30 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ - "signature", + "signature 1.6.4", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature 2.2.0", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" dependencies = [ "curve25519-dalek", - "ed25519", - "rand 0.7.3", + "ed25519 2.2.3", "serde", - "sha2 0.9.9", + "sha2 0.10.7", + "subtle", "zeroize", ] @@ -473,7 +517,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elven-nft-minter" -version = "1.13.0" +version = "1.14.0" dependencies = [ "multiversx-sc", "multiversx-sc-scenario", @@ -494,40 +538,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" -[[package]] -name = "enumset" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" -dependencies = [ - "enumset_derive", -] - -[[package]] -name = "enumset_derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.28", -] - -[[package]] -name = "env_logger" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -542,7 +552,7 @@ checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" dependencies = [ "errno-dragonfly", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -561,6 +571,22 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +[[package]] +name = "fiat-crypto" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -649,17 +675,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.10" @@ -668,7 +683,7 @@ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -717,19 +732,14 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", + "allocator-api2", ] -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - [[package]] name = "heck" version = "0.4.1" @@ -759,9 +769,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hmac" @@ -807,12 +817,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.27" @@ -850,12 +854,6 @@ dependencies = [ "tokio-native-tls", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.4.0" @@ -900,7 +898,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", ] [[package]] @@ -917,14 +915,14 @@ checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi 0.3.2", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "itertools" -version = "0.10.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ "either", ] @@ -1015,15 +1013,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "wasi", + "windows-sys 0.48.0", ] [[package]] name = "multiversx-chain-scenario-format" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5bd3e4bf86e4d8c53f915be3110261432fac45b1defe42c8eebe07c82ab983" +checksum = "c57b56954b133e76bfe77e1f20a903983f25fd24d53b28fe9cc9c9e54f374d2f" dependencies = [ "bech32", "hex", @@ -1036,9 +1034,9 @@ dependencies = [ [[package]] name = "multiversx-chain-vm" -version = "0.4.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3455cb385718139ecaa30d2f62aa1ac86762e478333cd24a7a6d8e9f0b1c0c93" +checksum = "6d3c6d36157be3a413daef246de14c8c9465bea53b985941593aa741423722ce" dependencies = [ "bitflags 1.3.2", "ed25519-dalek", @@ -1048,7 +1046,7 @@ dependencies = [ "multiversx-chain-vm-executor", "num-bigint", "num-traits", - "rand 0.8.5", + "rand", "rand_seeder", "sha2 0.10.7", "sha3 0.10.8", @@ -1056,29 +1054,18 @@ dependencies = [ [[package]] name = "multiversx-chain-vm-executor" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14f14947682eb69459676336dd8b678e2317aa9844724220ce73411bc947c3" -dependencies = [ - "anyhow", - "cfg-if", - "enumset", - "env_logger", - "lazy_static", - "libc", - "log", - "paste", - "thiserror", -] +checksum = "b59072fa0624b55ae5ae3fa6bfa91515bbeb4ac440214bc4a509e2c8806d6e9f" [[package]] name = "multiversx-sc" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22c2d1e82a357b6f397f87d475314628473b8a88882aa407234197f596786aa" +checksum = "f11b51d6a2ab0218585ed58e100c5ac2218de09490fbfc4243b5ecd0ca7f5cbc" dependencies = [ "bitflags 1.3.2", - "hashbrown 0.13.2", + "hashbrown 0.14.3", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", @@ -1087,9 +1074,9 @@ dependencies = [ [[package]] name = "multiversx-sc-codec" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c97dc9e9f34f836de6a56386ddbe1b9e87e20916ff86b1ea728c08e1871ac2" +checksum = "327b0ad1c3477cab0d7c84391439ba302238f738ef3c6e1fcd18e247fba84875" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", @@ -1098,9 +1085,9 @@ dependencies = [ [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ab795364fcf0452a953e33eae7e0c22d1a6374ffeb0724d24a42727e099c6e" +checksum = "f444038e0043b8eda816b26952479c2aca3c4a643580f4337f71fb362a586db5" dependencies = [ "hex", "proc-macro2", @@ -1110,9 +1097,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d77a125ea6985b2fa5cf1a297cdb9202c5a528eebb22652cc68ab1a9305e11" +checksum = "784f0fc505806102fe6f808b368e12fcb13096dd73c5678f09c5663230724d6f" dependencies = [ "hex", "proc-macro2", @@ -1123,30 +1110,35 @@ dependencies = [ [[package]] name = "multiversx-sc-meta" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980378ddeed12b646490d8b86d8603a10348cc511160d9124568ca87e36560a2" +checksum = "9b3fad2491d11c6edf3fe131696be31743dc568457c013b2c256e56376da294b" dependencies = [ "clap", "colored", "common-path", "convert_case", + "copy_dir", "hex", "lazy_static", "multiversx-sc", "pathdiff", + "reqwest", "ruplacer", "rustc_version", "serde", "serde_json", "toml", + "wasmparser 0.116.1", + "wasmprinter", + "zip", ] [[package]] name = "multiversx-sc-scenario" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c260b2c7f1ba4bbdbaf965865de25205f46c850bd294acbe4834200dba83804c" +checksum = "285a6021a379c069cce06f5b6ba6b562ea63fb1c1fd252b031993e5f32e9e440" dependencies = [ "base64 0.13.1", "bech32", @@ -1172,21 +1164,21 @@ dependencies = [ [[package]] name = "multiversx-sdk" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb48ac185858a4ac825c300643df43344baeafe434fb4f9d9077fb81318f987" +checksum = "5baedd8e9f73ddee5a21964cde188397363c50bd43f1c12ee3dde20d15307cff" dependencies = [ "anyhow", "base64 0.13.1", "bech32", "bip39", - "ed25519", + "ed25519 1.5.3", "hex", "hmac", "itertools", "pbkdf2", "pem", - "rand 0.8.5", + "rand", "reqwest", "serde", "serde_json", @@ -1308,7 +1300,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1349,15 +1341,9 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.48.1", ] -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - [[package]] name = "pathdiff" version = "0.2.1" @@ -1400,12 +1386,28 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "platforms" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1423,9 +1425,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -1440,19 +1442,6 @@ dependencies = [ "nibble_vec", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - [[package]] name = "rand" version = "0.8.5" @@ -1460,18 +1449,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha", + "rand_core", ] [[package]] @@ -1481,16 +1460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -1499,16 +1469,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -1517,7 +1478,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf2890aaef0aa82719a50e808de264f9484b74b442e1a3a0e5ee38243ac40bdb" dependencies = [ - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1635,7 +1596,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1659,7 +1620,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1714,7 +1675,7 @@ checksum = "be02f6cb0cd3a5ec20bbcfbcbd749f57daddb1a0882dc2e46a6c236c90b977ed" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1737,7 +1698,16 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", +] + +[[package]] +name = "serde_spanned" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +dependencies = [ + "serde", ] [[package]] @@ -1813,6 +1783,15 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core", +] + [[package]] name = "slab" version = "0.4.8" @@ -1838,6 +1817,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "strsim" version = "0.10.0" @@ -1863,9 +1852,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" dependencies = [ "proc-macro2", "quote", @@ -1882,36 +1871,7 @@ dependencies = [ "fastrand", "redox_syscall", "rustix", - "windows-sys", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.28", + "windows-sys 0.48.0", ] [[package]] @@ -1956,7 +1916,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1967,7 +1927,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", ] [[package]] @@ -1996,12 +1956,37 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ - "indexmap 1.9.3", + "indexmap 2.0.0", "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] @@ -2117,12 +2102,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2150,7 +2129,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", "wasm-bindgen-shared", ] @@ -2184,7 +2163,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2195,6 +2174,36 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +[[package]] +name = "wasmparser" +version = "0.116.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a58e28b80dd8340cb07b8242ae654756161f6fc8d0038123d679b7b99964fa50" +dependencies = [ + "indexmap 2.0.0", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.118.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ee9723b928e735d53000dec9eae7b07a60e490c85ab54abb66659fc61bfcd9" +dependencies = [ + "indexmap 2.0.0", + "semver", +] + +[[package]] +name = "wasmprinter" +version = "0.2.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d027eb8294904fc715ac0870cebe6b0271e96b90605ee21511e7565c4ce568c" +dependencies = [ + "anyhow", + "wasmparser 0.118.1", +] + [[package]] name = "web-sys" version = "0.3.64" @@ -2242,7 +2251,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.1", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -2251,13 +2269,28 @@ version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -2266,42 +2299,93 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.10.1" @@ -2312,21 +2396,39 @@ dependencies = [ ] [[package]] -name = "zeroize" -version = "1.6.0" +name = "zerocopy" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" dependencies = [ - "zeroize_derive", + "zerocopy-derive", ] [[package]] -name = "zeroize_derive" -version = "1.4.2" +name = "zerocopy-derive" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.32", +] + +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", ] diff --git a/Cargo.toml b/Cargo.toml index 8d64f67..ea83208 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "elven-nft-minter" -version = "1.13.0" +version = "1.14.0" authors = ["Julian Ćwirko "] edition = "2021" publish = false @@ -9,7 +9,7 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "0.42.0" +version = "0.45.1" [dev-dependencies.multiversx-sc-scenario] -version = "0.42.0" +version = "0.45.1" diff --git a/README.md b/README.md index caee928..34984d3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ ### NFT minter Smart Contract - Docs: [www.elven.tools](https://www.elven.tools) -- Elven Tools Twitter: [www.twitter.com/ElvenTools](https://twitter.com/ElvenTools) +- Elven Tools Twitter: [www.x.com/ElvenTools](https://x.com/ElvenTools) - Quick jumpstart: [www.elven.tools/docs/jump-start.html](https://www.elven.tools/docs/jump-start.html) - Intro video: [www.youtu.be/Jou5jn8PFz8](https://youtu.be/Jou5jn8PFz8) -Be aware that the Smart Contract doesn't have any audits. It has complete functionality for the first version, but it still needs some improvements. Test it first on the devnet/testnet. +Be aware that the Smart Contract doesn't have any audits. It has complete functionality for the first version but still needs some improvements. Test it first on the devnet/testnet. **You can use [elven-tools-cli](https://github.com/ElvenTools/elven-tools-cli) for deployment, setup and interactions!** @@ -37,7 +37,7 @@ Also, check how simple it is to deploy and interact with it using [elven-tools-c ### Check out possible workflows -Examples of how you can configure your Smart Contract in a couple of scenarios and how to use the CLI to do this faster and more efficiently: [www.elven.tools/docs/elven-tools-workflows.html](https://www.elven.tools/docs/elven-tools-workflows.html)](https://www.elven.tools/docs/elven-tools-workflows.html) +Examples of how you can configure your Smart Contract in a couple of scenarios and how to use the CLI to do this faster and more efficiently: [www.elven.tools/docs/elven-tools-workflows.html](https://www.elven.tools/docs/elven-tools-workflows.html) ### All endpoints with short descriptions @@ -53,10 +53,11 @@ You can always clone it and change it as you need. The best is to use the Elven ### Contact -- [Twitter](https://twitter.com/JulianCwirko) +- [Twitter](https://twitter.com/theJulianIo) ### You may also like +- [Buildo.dev](https://www.buildo.dev) - Buildo.dev is a MultiversX app that helps with blockchain interactions, like issuing tokens and querying smart contracts. - [elven.js](https://github.com/elven-js/elven.js) - simplified wrapper over JS SDK, designed to work as a plug-n-play solution for browser based use cases. No build steps and frameworks, just one file to rule it all! Check usage examples! - [NFT Art Maker](https://github.com/juliancwirko/nft-art-maker) - generates images and metadata files and packs them into CAR files, all from provided PNG layers. - [Buildo Begins](https://github.com/xdevguild/buildo-begins) - CLI toolset for interacting with the MultiversX blockchain, APIs and smart contracts diff --git a/meta/Cargo.lock b/meta/Cargo.lock index 6e441dd..83428bc 100644 --- a/meta/Cargo.lock +++ b/meta/Cargo.lock @@ -12,15 +12,31 @@ dependencies = [ "regex", ] +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -41,18 +57,23 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] @@ -77,17 +98,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -119,12 +140,39 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bstr" version = "1.5.0" @@ -135,6 +183,24 @@ dependencies = [ "serde", ] +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + [[package]] name = "cc" version = "1.0.79" @@ -149,46 +215,43 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.3.3" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8f255e4b8027970e78db75e78831229c9815fdbfa67eb1a1b777a62e24b4a0" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.3" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd4f3c17c83b0ba34ffbc4f8bbd74f079413f747f84a6f89292f138057e36ab" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstream", "anstyle", - "bitflags", "clap_lex", - "once_cell", "strsim", ] [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.40", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "colorchoice" @@ -222,46 +285,109 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "copy_dir" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543d1dd138ef086e2ff05e3a48cf9da045da2033d16f8538fd76b86cd49b2ca3" +dependencies = [ + "walkdir", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + [[package]] name = "elven-nft-minter" -version = "1.13.0" +version = "1.14.0" dependencies = [ "multiversx-sc", ] [[package]] name = "elven-nft-minter-meta" -version = "1.13.0" +version = "1.14.0" dependencies = [ "elven-nft-minter", "multiversx-sc-meta", ] +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + [[package]] name = "endian-type" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" -version = "0.3.1" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "flate2" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ - "cc", - "libc", + "crc32fast", + "miniz_oxide", ] [[package]] @@ -270,6 +396,84 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + [[package]] name = "globset" version = "0.4.10" @@ -284,18 +488,32 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "h2" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", + "allocator-api2", ] [[package]] @@ -327,9 +545,90 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.3.4" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "idna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] [[package]] name = "ignore" @@ -350,36 +649,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys", + "equivalent", + "hashbrown", ] [[package]] -name = "is-terminal" -version = "0.4.7" +name = "ipnet" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys", -] +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" @@ -387,6 +669,15 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -395,15 +686,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.146" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "log" @@ -417,14 +708,40 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + [[package]] name = "multiversx-sc" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22c2d1e82a357b6f397f87d475314628473b8a88882aa407234197f596786aa" +checksum = "f11b51d6a2ab0218585ed58e100c5ac2218de09490fbfc4243b5ecd0ca7f5cbc" dependencies = [ - "bitflags", - "hashbrown 0.13.2", + "bitflags 1.3.2", + "hashbrown", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", @@ -433,9 +750,9 @@ dependencies = [ [[package]] name = "multiversx-sc-codec" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c97dc9e9f34f836de6a56386ddbe1b9e87e20916ff86b1ea728c08e1871ac2" +checksum = "327b0ad1c3477cab0d7c84391439ba302238f738ef3c6e1fcd18e247fba84875" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", @@ -444,9 +761,9 @@ dependencies = [ [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ab795364fcf0452a953e33eae7e0c22d1a6374ffeb0724d24a42727e099c6e" +checksum = "f444038e0043b8eda816b26952479c2aca3c4a643580f4337f71fb362a586db5" dependencies = [ "hex", "proc-macro2", @@ -456,9 +773,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d77a125ea6985b2fa5cf1a297cdb9202c5a528eebb22652cc68ab1a9305e11" +checksum = "784f0fc505806102fe6f808b368e12fcb13096dd73c5678f09c5663230724d6f" dependencies = [ "hex", "proc-macro2", @@ -469,23 +786,46 @@ dependencies = [ [[package]] name = "multiversx-sc-meta" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980378ddeed12b646490d8b86d8603a10348cc511160d9124568ca87e36560a2" +checksum = "9b3fad2491d11c6edf3fe131696be31743dc568457c013b2c256e56376da294b" dependencies = [ "clap", "colored", "common-path", "convert_case", + "copy_dir", "hex", "lazy_static", "multiversx-sc", "pathdiff", + "reqwest", "ruplacer", "rustc_version", "serde", "serde_json", "toml", + "wasmparser 0.116.1", + "wasmprinter", + "zip", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] @@ -528,48 +868,144 @@ dependencies = [ ] [[package]] -name = "once_cell" -version = "1.18.0" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.1", + "libc", +] [[package]] -name = "pathdiff" -version = "0.2.1" +name = "object" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] [[package]] -name = "proc-macro2" -version = "1.0.60" +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" dependencies = [ - "unicode-ident", + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", ] [[package]] -name = "quote" -version = "1.0.28" +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", + "quote", + "syn 2.0.40", ] [[package]] -name = "radix_trie" -version = "0.2.1" +name = "openssl-probe" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" dependencies = [ - "endian-type", - "nibble_vec", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "regex" -version = "1.8.4" +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ @@ -584,6 +1020,44 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "ruplacer" version = "0.8.1" @@ -599,6 +1073,12 @@ dependencies = [ "regex", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc_version" version = "0.4.0" @@ -610,16 +1090,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.19" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ - "bitflags", + "bitflags 2.4.1", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -637,6 +1116,38 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.17" @@ -660,7 +1171,7 @@ checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.40", ] [[package]] @@ -674,12 +1185,62 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "strsim" version = "0.10.0" @@ -699,15 +1260,49 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "thread_local" version = "1.1.7" @@ -718,34 +1313,177 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + [[package]] name = "toml" -version = "0.5.11" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "indexmap", "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-bidi" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" + [[package]] name = "unicode-ident" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" @@ -762,6 +1500,127 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.40", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "wasmparser" +version = "0.116.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a58e28b80dd8340cb07b8242ae654756161f6fc8d0038123d679b7b99964fa50" +dependencies = [ + "indexmap", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.118.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ee9723b928e735d53000dec9eae7b07a60e490c85ab54abb66659fc61bfcd9" +dependencies = [ + "indexmap", + "semver", +] + +[[package]] +name = "wasmprinter" +version = "0.2.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d027eb8294904fc715ac0870cebe6b0271e96b90605ee21511e7565c4ce568c" +dependencies = [ + "anyhow", + "wasmparser 0.118.1", +] + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -799,7 +1658,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -808,13 +1676,28 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -823,38 +1706,131 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "zerocopy" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] diff --git a/meta/Cargo.toml b/meta/Cargo.toml index b2957ca..95eb6b1 100644 --- a/meta/Cargo.toml +++ b/meta/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "elven-nft-minter-meta" -version = "1.13.0" +version = "1.14.0" authors = ["Julian Ćwirko "] edition = "2021" publish = false @@ -9,4 +9,4 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.42.0" +version = "0.45.1" diff --git a/output/elven-nft-minter.abi.json b/output/elven-nft-minter.abi.json index 49533c6..1edd0f1 100644 --- a/output/elven-nft-minter.abi.json +++ b/output/elven-nft-minter.abi.json @@ -9,11 +9,11 @@ }, "contractCrate": { "name": "elven-nft-minter", - "version": "1.13.0" + "version": "1.14.0" }, "framework": { "name": "multiversx-sc", - "version": "0.42.0" + "version": "0.45.1" } }, "name": "ElvenTools", @@ -67,6 +67,141 @@ "outputs": [] }, "endpoints": [ + { + "name": "getNftTokenId", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "TokenIdentifier" + } + ] + }, + { + "name": "getCollectionTokenName", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getNftTokenName", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getNftPrice", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "getProvenanceHash", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getTokensLimitPerAddressTotal", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "getMintedPerAddressTotal", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "getTokensLimitPerAddressPerDrop", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "isAllowlistEnabled", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "isDropActive", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "getTotalSupply", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "isMintingPaused", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "getTotalSupplyOfCurrentDrop", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, { "name": "issueToken", "onlyOwner": true, @@ -85,16 +220,20 @@ }, { "name": "is_not_number_in_name", - "type": "optional", - "multi_arg": true + "type": "bool" }, { "name": "nft_token_name", - "type": "optional", + "type": "bytes" + }, + { + "name": "token_properties", + "type": "optional>", "multi_arg": true } ], - "outputs": [] + "outputs": [], + "allow_multiple_var_args": true }, { "name": "setLocalRoles", @@ -328,144 +467,43 @@ "type": "u32" } ] - }, - { - "name": "getNftTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "getCollectionTokenName", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getNftTokenName", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getNftPrice", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "getProvenanceHash", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getTokensLimitPerAddressTotal", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "getMintedPerAddressTotal", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ + } + ], + "esdtAttributes": [], + "hasCallback": true, + "types": { + "NFTProperties": { + "type": "enum", + "variants": [ { - "type": "u32" - } - ] - }, - { - "name": "getTokensLimitPerAddressPerDrop", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanFreeze", + "discriminant": 0 + }, { - "type": "u32" - } - ] - }, - { - "name": "isAllowlistEnabled", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanWipe", + "discriminant": 1 + }, { - "type": "bool" - } - ] - }, - { - "name": "isDropActive", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanPause", + "discriminant": 2 + }, { - "type": "bool" - } - ] - }, - { - "name": "getTotalSupply", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanTransferCreateRole", + "discriminant": 3 + }, { - "type": "u32" - } - ] - }, - { - "name": "isMintingPaused", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanChangeOwner", + "discriminant": 4 + }, { - "type": "bool" - } - ] - }, - { - "name": "getTotalSupplyOfCurrentDrop", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanUpgrade", + "discriminant": 5 + }, { - "type": "u32" + "name": "CanAddSpecialRoles", + "discriminant": 6 } ] } - ], - "events": [], - "hasCallback": true, - "types": {} + } } diff --git a/output/elven-nft-minter.mxsc.json b/output/elven-nft-minter.mxsc.json index ce8288e..dbfdae0 100644 --- a/output/elven-nft-minter.mxsc.json +++ b/output/elven-nft-minter.mxsc.json @@ -9,11 +9,11 @@ }, "contractCrate": { "name": "elven-nft-minter", - "version": "1.13.0" + "version": "1.14.0" }, "framework": { "name": "multiversx-sc", - "version": "0.42.0" + "version": "0.45.1" } }, "abi": { @@ -68,6 +68,141 @@ "outputs": [] }, "endpoints": [ + { + "name": "getNftTokenId", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "TokenIdentifier" + } + ] + }, + { + "name": "getCollectionTokenName", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getNftTokenName", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getNftPrice", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "BigUint" + } + ] + }, + { + "name": "getProvenanceHash", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "name": "getTokensLimitPerAddressTotal", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "getMintedPerAddressTotal", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "getTokensLimitPerAddressPerDrop", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "isAllowlistEnabled", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "isDropActive", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "getTotalSupply", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, + { + "name": "isMintingPaused", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "getTotalSupplyOfCurrentDrop", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u32" + } + ] + }, { "name": "issueToken", "onlyOwner": true, @@ -86,16 +221,20 @@ }, { "name": "is_not_number_in_name", - "type": "optional", - "multi_arg": true + "type": "bool" }, { "name": "nft_token_name", - "type": "optional", + "type": "bytes" + }, + { + "name": "token_properties", + "type": "optional>", "multi_arg": true } ], - "outputs": [] + "outputs": [], + "allow_multiple_var_args": true }, { "name": "setLocalRoles", @@ -329,147 +468,46 @@ "type": "u32" } ] - }, - { - "name": "getNftTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "getCollectionTokenName", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getNftTokenName", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getNftPrice", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "getProvenanceHash", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "getTokensLimitPerAddressTotal", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "getMintedPerAddressTotal", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ + } + ], + "esdtAttributes": [], + "hasCallback": true, + "types": { + "NFTProperties": { + "type": "enum", + "variants": [ { - "type": "u32" - } - ] - }, - { - "name": "getTokensLimitPerAddressPerDrop", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanFreeze", + "discriminant": 0 + }, { - "type": "u32" - } - ] - }, - { - "name": "isAllowlistEnabled", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanWipe", + "discriminant": 1 + }, { - "type": "bool" - } - ] - }, - { - "name": "isDropActive", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanPause", + "discriminant": 2 + }, { - "type": "bool" - } - ] - }, - { - "name": "getTotalSupply", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanTransferCreateRole", + "discriminant": 3 + }, { - "type": "u32" - } - ] - }, - { - "name": "isMintingPaused", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanChangeOwner", + "discriminant": 4 + }, { - "type": "bool" - } - ] - }, - { - "name": "getTotalSupplyOfCurrentDrop", - "mutability": "readonly", - "inputs": [], - "outputs": [ + "name": "CanUpgrade", + "discriminant": 5 + }, { - "type": "u32" + "name": "CanAddSpecialRoles", + "discriminant": 6 } ] } - ], - "events": [], - "hasCallback": true, - "types": {} + } }, - "size": 18180, - "code": "0061736d01000000018401166000006000017f60027f7f0060017f017f60017f0060027f7f017f60037f7f7f0060047f7f7f7f0060037f7f7f017f60047f7f7f7f017f60017f017e60027f7e0060057f7f7e7f7f017f60017e006000017e60017e017f60067e7f7f7f7f7f017f60057f7f7f7f7f0060047f7f7e7f0060027f7e017f60047f7e7f7f0060027f7f017e0294093003656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000203656e760a6d4275666665724e6577000103656e760d6d427566666572417070656e64000503656e76126d427566666572417070656e644279746573000803656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000c03656e760d6d616e6167656443616c6c6572000403656e76106d616e61676564534341646472657373000403656e76136d616e616765644f776e657241646472657373000403656e76096d4275666665724571000503656e760f6973536d617274436f6e7472616374000303656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000503656e76126d616e616765645369676e616c4572726f72000403656e76136765744e756d455344545472616e7366657273000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e76106d4275666665724765744c656e677468000303656e7619626967496e74476574556e7369676e6564417267756d656e74000203656e760f6765744e756d417267756d656e7473000103656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e760d6d42756666657246696e697368000303656e7614736d616c6c496e7446696e6973685369676e6564000d03656e76186d616e616765644765744f726967696e616c547848617368000403656e760a626967496e745369676e000303656e760f6d4275666665725365744279746573000803656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e76146d427566666572436f707942797465536c696365000903656e76126d42756666657253746f726167654c6f6164000503656e76136d42756666657253746f7261676553746f7265000503656e76176d427566666572546f426967496e74556e7369676e6564000503656e76106d42756666657253657452616e646f6d000503656e760d6d616e61676564536861323536000503656e760a6765744761734c656674000e03656e7609626967496e744e6577000f03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001003656e760f636c65616e52657475726e44617461000003656e7609626967496e74436d70000503656e760e636865636b4e6f5061796d656e74000003656e7611676574455344544c6f63616c526f6c6573000a03656e7618626967496e7447657445787465726e616c42616c616e6365000203656e760a626967496e7454446976000603656e7614626967496e7446696e697368556e7369676e6564000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6d4275666665724765744279746573000503656e76136d42756666657247657442797465536c696365000903656e761b6d616e616765645472616e7366657256616c756545786563757465000c03656e76106d616e616765644173796e6343616c6c000703c901c70103011100010302030202120106070101010000040103070500080708080809090301080801070404040004040403070603070201020401040206030206040602031305090208020607030a02030406020b0214040507050606050502020607090207050302020203030205020802020203020202020303030302020004010601010101030101010101010303010102010101010701010101001501010101010400000000000000000000000000000000000000000000000000000000000000000000000000000005030100030616037f01418080080b7f004184e5080b7f004190e5080b078c0629066d656d6f7279020004696e697400d0010a6973737565546f6b656e00d1010d7365744c6f63616c526f6c657300d2010c70617573654d696e74696e6700d3010c73746172744d696e74696e6700d4010773657444726f7000d50109756e73657444726f7000d6010b7365744e6577507269636500d7010e6368616e6765426173654369647300d8011b7365744e6577546f6b656e734c696d69745065724164647265737300d90108676976656177617900da010c636c61696d536346756e647300db010f656e61626c65416c6c6f776c69737400dc011064697361626c65416c6c6f776c69737400dd0111706f70756c617465416c6c6f776c69737400de010e636c656172416c6c6f776c69737400df011672656d6f7665416c6c6f776c6973744164647265737300e001046d696e7400e1010773687566666c6500e2011167657444726f70546f6b656e734c65667400e30112676574546f74616c546f6b656e734c65667400e4011a6765744d696e7465645065724164647265737350657244726f7000e50118676574416c6c6f776c69737441646472657373436865636b00e60110676574416c6c6f776c69737453697a6500e7010d6765744e6674546f6b656e496400e80116676574436f6c6c656374696f6e546f6b656e4e616d6500e9010f6765744e6674546f6b656e4e616d6500ea010b6765744e6674507269636500eb011167657450726f76656e616e63654861736800ec011d676574546f6b656e734c696d697450657241646472657373546f74616c00ed01186765744d696e74656450657241646472657373546f74616c00ee011f676574546f6b656e734c696d69745065724164647265737350657244726f7000ef01126973416c6c6f776c697374456e61626c656400f0010c697344726f7041637469766500f1010e676574546f74616c537570706c7900f2010f69734d696e74696e6750617573656400f3011b676574546f74616c537570706c794f6643757272656e7444726f7000f4010863616c6c4261636b00f5010a5f5f646174615f656e6403010b5f5f686561705f6261736503020aaf65c7011601017f1031220142001000200120012000100120010b1901017f41bc960841bc960828020041016b220036020020000b2e000240200120024d0440200220044d0d011033000b1033000b2000200220016b3602042000200120036a3602000b060010f601000b0e01017f103122004201100020000b0f01017f10032201200010041a20010b0a0020002001103710380b0d00200010312200101c1a20000b3301017f200110112102200041106a41003a00002000410c6a20023602002000200136020820002002360204200041003602000b0900200020011002000be60101047f103b2106103b2107230041106b22042400103b21052001103521012003103021032004200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484843702042004200141187420014180fe03714108747220014108764180fe0371200141187672723602002004200341187420034180fe03714108747220034108764180fe03712003411876727236020c20052004411010051a2000200542002006200710061a200441106a24000b1301017f1031220041e49508410010191a20000b2300200141feffffff074704402000200142002002103a0f0b20002002103b103b103d0b0f0020002001420020022003102e1a0b0c01017f10312200100720000b0c01017f10312200100820000b0c01017f10312200100920000b18001040103e100a41004a04400f0b41e2930841241002000b2000416710074167104341e4e408100b41004c04400f0b41869408412c1002000b0b00200041e4e408102c1a0b2901017f41c09608280200220041ffffffff0746047f41c0960841753602004175100c41750520000b0b0d00200010312200100d1a20000b2e01017f41d680084117104722042000200110051a200441ed8008410310051a20042002200310051a2004100e000b1101017f103122022000200110191a20020b1200100f4504400f0b41f0800841251002000b1000200020012002104d2001200210530b3501017f0240200128020041e0e4082802004e0440410121040c010b200120022003104b21010b20002001360204200020043602000b0c00200020012002104d10450b5202027f017e41022104200028020041e0e40828020048047f02400240200020012002104d1010220542015804402005a741016b0d020c010b2001200241d4900841121046000b410121030b20030541020b0b2f01017f2000280200220341e0e4082802004e0440200120024195810841111046000b2000200341016a36020020030b0f002000200120032002102d4100470b5301027f2001200346047f4100210302402001450d00034020002d0000220420022d00002205460440200041016a2100200241016a2102200141016b22010d010c020b0b200420056b21030b20030541010b450b0c00200010312200101220000b2301017f4100104522001011412047044041ad8f08410741a4840841101046000b20000b0a0020002001200210530b2501017e20001010220342ffffffff0f5804402003a70f0b2001200241808008410e1046000bcd0101067f230041206b22002400410010452101103b2103200041086a200110382000280210210420002802082101200028020c210502400340200120054704402000200420014120105520002802004101470d0220002000280204220241187420024180fe03714108747220024108764180fe03712002411876727236021c20032000411c6a410410051a200141206a21010c010b0b200041186a2d0000044041d8e408410036020041dce40841003a00000b200041206a240020030f0b41c18e08410941f48208410f1046000b1f0020012002200310032201101b21022000200136020420002002453602000b1900200041e0e4082802004e04400f0b41a6810841121002000b1400101320004604400f0b41b8810841191002000b1900200041e0e4082802004c04400f0b4195810841111002000b0b0041e0e40810133602000b090020001079ad10140b09002000103710151a0b09002000105dad10160b2e01017e027f02402000107a2201420158044041002001a741016b0d021a0c010b41d490084112107b000b41010b0b2000200020012002105f200041b7940841b2940820031b4104410520031b105f0b0c00200020012002104710620b08002000412010470b260020022003104721022000103b3602102000200236020c200020013602082000427f3703000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410051a200241106a24000b0e01017f103122004200100020000b0d00103b1a20002001103510620bdc0201057f230041306b220124002000280210220204401066200141106a1067200120012d00143a001c20012001280210360218200041146a2802002204200141186a220310682003200220041069200041186a22022802002204106a20031068200120041011360228200141003602242001200236022003400240200141086a200141206a106b2001280208450d002001200128020c22031011220241187420024180fe03714108747220024108764180fe03712002411876727236022c200141186a2001412c6a41041069024020012d001c04402003101122044190ce0041d8e40828020022026b4b0d0120012002200220046a2202106c2003410020012802002001280204104e1a41d8e40820023602000c030b2001280218200310041a0c020b200141186a106d2001280218200310041a0c010b0b200128021820012d001c106e0b200028020020002802042000280208200028020c102f000b1b01027f10312200101741ea8208410a10472201200010041a20010b6c01027f230041106b220124002000027f41dce4082d0000220245044041dce40841013a000041d8e4084100360200200141086a410010762001280208200128020c41e4950841001078103b0c010b41e49508410010470b360200200020024101733a0004200141106a24000b0900200020011099010b7e01027f230041106b220324000240024020002d000404404190ce0041d8e40828020022046b2002490d01200341086a2004200220046a2200106c2003280208200328020c20012002107841d8e40820003602000c020b20002802002001200210051a0c010b2000106d20002802002001200210051a0b200341106a24000b0900200010114102760b8a0101047f230041106b220324002001280204220241046a220420012802084b047f41000520012802002003410036020c28020020022003410c6a410410731a200328020c210220012004360204200241187420024180fe03714108747220024108764180fe037120024118767272210241010b21012000200236020420002001360200200341106a24000b3f01017f230041106b22032400200341086a2001200241c896084190ce001032200328020c21012000200328020836020020002001360204200341106a24000b5701027f230041106b2201240020002d0004200041003a00040440200141086a410041d8e408280200107720002802002001280208200128020c10051a41d8e408410036020041dce40841003a00000b200141106a24000b5101017f230041106b22032400200320023a000c20032001360208200341086a106d2003280208210120032d000c044041d8e408410036020041dce40841003a00000b20002001101d1a200341106a24000b0d00103b1a20002001107010620b0f01017f103122012000101a1a20010b26002001500440417f20001018220041004720004100481b0f0b4172200110002000417210720b1500417f200020011025220041004720004100481b0b0c002000200120022003104e0b09002000200110041a0bb20101037f230041106b22032400027f024020002d000845044020002802002204101122054190ce004b0d0141dce4082d00000d0141d8e408200536020041dce40841013a0000200341086a20051076200441002003280208200328020c10731a200041013a00080b4101200141046a220041d8e4082802004b0d011a20032001200010772002410420032802002003280204107841000c010b200041003a0008200420012002410410730b200341106a24000b3e01017f230041106b22022400200241086a41c896084190ce00200110c301200228020c21012000200228020836020020002001360204200241106a24000b32000240200120024d044020024190ce004d0d011033000b1033000b2000200220016b3602042000200141c896086a3602000bb50201067f2001200346044020012203410f4b04402000410020006b41037122046a210520040440200221010340200020012d00003a0000200141016a2101200041016a22002005490d000b0b2005200320046b2203417c7122066a21000240200220046a22044103710440200641004c0d012004410374220141187121072004417c71220841046a2102410020016b4118712109200828020021010340200520012007762002280200220120097472360200200241046a2102200541046a22052000490d000b0c010b200641004c0d0020042102034020052002280200360200200241046a2102200541046a22052000490d000b0b20034103712103200420066a21020b20030440200020036a21010340200020022d00003a0000200241016a2102200041016a22002001490d000b0b0f0b1033000b2001017e2000107a22014280808080105a044041808008410e107b000b2001a70b6002027f017e230041106b22012400200142003703082000103722001011220241094f044041808008410e107b000b2001200141086a4108200210c301200041002001280200220020012802042202104e1a2000200210c901200141106a24000b1a01017f418e84084116104722022000200110051a2002100e000b0d0020004167101c1a416710110b0c00200041e495084100107e0b0d002000200120021047101d1a0b0a0020002001ad1080010b3701017f230041106b2202240020024200370308200220014100200241086a108201200020022802002002280204107e200241106a24000b3c01017f230041106b220224002002420037030820022001ad42ff01834101200241086a108201200020022802002002280204107e200241106a24000bf10102047f017e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422083700000240200150044041e495082104410021030c010b41002008a741077620027122056b41ff0171210602400340200441084704402006200320046a2d000022074704402004200741077620054720027122026b41094f0d03200420026b220220036a2104410820026b21030c0405200441016a21040c020b000b0b1033000b10f601000b20002003360204200020043602000b1400416c41e49508410010191a2000416c101d1a0b190020001035220041d18308410710051a20002001107420000b2c0020012003108601047f200220031084011079210341010541000b210120002003360204200020013602000b0c00200020011089014100470b4b01037f230041106b22032400200341086a20002802002204200041086a28020022052001108501200520011084012002ad1080012004200041046a2802002001108801200341106a24000bcf0101047f230041306b2203240020002002108601450440200341106a2001108c012003200328021c41016a220436021c024020032802102206450440200320043602140c010b200341086a200120032802182205108d012001200520032802082004108e010b2001200420054100108e01200341186a22052004360200200141f0830841062004108f012002101d1a2003200641016a360210200341286a2005290300370300200320032903103703202001200341206a10900120002002108a012004ad1080010b200341306a24000b0b0020002001108a0110790b190020001035220041d88308410810051a20002001107420000b0b0020002001108a01107d0bad0101047f230041206b220224000240024020011097012201107c450440410021010c010b200241086a22032001103620031098012101200241086a1098012103200241086a1098012104200241086a1098012105200228020c2002280208470d01200241186a2d0000450d0041d8e408410036020041dce40841003a00000b2000200536020c200020043602082000200336020420002001360200200241206a24000f0b41808008410e107b000b7e01027f230041206b22032400200341086a2204200141e58308410b2002108f01103620041098012101200341086a1098012102200328020c2003280208460440200341186a2d0000044041d8e408410036020041dce40841003a00000b2000200236020420002001360200200341206a24000f0b41808008410e107b000b5801017f230041106b22042400200041e58308410b2001108f0120041067200420042d00043a000c200420042802003602082002200441086a220110990120032001109901200428020820042d000c106e200441106a24000b18002000103522002001200210051a2003200010940120000b840101027f230041106b2202240020001097012100024020012802002203044020021067200220022d00043a000c200220022802003602082003200241086a22031099012001280204200310990120012802082003109901200128020c20031099012000200228020820022d000c106e0c010b200041e495084100107e0b200241106a24000b280002402002450d00200110792002490d00200020021092012003107f0f0b41bb940841121002000b1a0020001035220041e08308410510051a2001200010940120000b070020001079450b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410051a200241106a24000b1100200041e58308410b2001108f01107d0b1100200041f0830841062001108f01107d0b130020001035220041f68308410510051a20000b5202017f017e230041106b220124002001410036020c200041086a20002802002001410c6a1075044041f48208410f107b000b2000200028020041046a3602002001410c6a410410c901200141106a2400a70b4501017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a41041069200241106a24000b2600200041f0830841062001108f01103722001011412047044041a484084110107b000b20000b1900200010352200418a8408410410051a20002001ad1080010b2c000240200204402001107920024f0d010b41bb940841121002000b2000200210920110792200200220001b0b11002000107c45044020002001109e010b0b0b00200020011070101d1a0b1100200010a00104402000200110a1010b0b07002000107c450b0900200020011081010b1100200010a00104402000200110a3010b0b090020002001101d1a0b1000200010a001044020002001107f0b0b0f002000103710312200101e1a20000b1e01017e2000107a2201428080045a044041808008410e107b000b2001a70b5401047f230041106b22012400200010a8012102200141086a200028020820002802002203200210552001280208410147044041f48208410f10a901000b200128020c2000200220036a360200200141106a24000b5302017f017e230041106b220124002001410036020c200041086a20002802002001410c6a1075044041f48208410f10a901000b2000200028020041046a3602002001410c6a410410c901200141106a2400a70b1a01017f418e80084119104722022000200110051a2002100e000b1801017f20011035210220002001360204200020023602000bc10101047f230041206b22002400200041086a10ac01200028020c220110792102103b22034104101f1a2000410036021820034100200041186a4104104e1a200245044010f601000b200028020820012000280218220141187420014180fe03714108747220014108764180fe03712001411876727220027041016a2201109c0110ad01210320001067200020002d00043a001c200020002802003602182001200041186a22011068200110682003200028021820002d001c106e200041206a24000b3601037f41d6910841101047220110352102200110352203418a8408410410051a2000200336020420002001360200200020023602080b0a0041b79108410f10470bb90a02117f027e230041406a22032400200341206a220410ad01103620041098012107200410980121050240024020032802242003280220460440200341306a2d0000044041d8e408410036020041dce40841003a00000b1034211010af011037210f103b2108027f10b00110a001044010b1010c010b10b0010b1037210410b201105d2008200410041a450440200510b3012104200841c485084102104710041a2008200410041a0b10b40110a501211141b58508410910472106200510b301210941db840841051047210a10b5011037210b41be850841011047210c41da840841011047210d41bf850841051047210e103b2204200e10041a200410b601103710041a2004200c10041a2004200610041a2004200b10041a2004200d10041a2004200910041a2004200a10041a20041031220b10201a10b701105d103b210610b8011037210d10b5011037210e41da840841011047210941db840841051047211210b90110372113200510b301210a41e08408411510472205200d10041a2005200910041a2005200a10041a2005201310041a200620051062044041e08408411510472205200e10041a2005200910041a2005200a10041a2005201210041a2006200510620b20032006360214103b2105103b1a2005200f1035106220052010106f20052008106420052011106f2005200b10642005200410640240200610110440200320061011360228200341003602242003200341146a3602200340200341086a200341206a106b2003280208450d02200328020c2104103b1a20052004103510620c000b000b103b220441e49508410010191a2005200410620b102141a78008410d1047210441671008416742001022200420051031220410231a102420034100360220024020044100200341206a4104104e0d002003280220220441187420044180fe03714108747220044108764180fe03712004411876727222051011220441084b0d002003420037032020054100200320046b41286a2004104e0d002003290320221442388620144280fe0383422886842014428080fc0783421886201442808080f80f834208868484201442088842808080f80f832014421888428080fc07838420144228884280fe0383201442388884848421150b2001044041a08308106021020b200320023602182003103e220136021c200341186a2104200210114120460440200341386a4200370300200341306a4200370300200341286a42003703002003420037032020024100200341206a22024120104e1a2003411c6a200341186a2002412041a083084120104f1b21040b103421022004280200200f20152002103a200010ba01450d02200110bb0122022002107941016a107f10bc01105d450d0110bd0110a0010d01200341206a10bd0110a601220210be012003200328022020032802282001108501024020032802000440200328020422040d010b200341206a2204200210be012004200141011087010c020b200341206a2205200210be0120052001200441016a1087010c010b41808008410e107b000b104041feffffff072000103c0b10bf0110a001210110bf0121000240200145044020002000107941016a107f0c010b200042011080010b024010c0011079450d0010c10110a00110c101210045044020002000107941016a107f0c010b200042011080010b10c2010440200341206a10ac0120032802242200107921012003280220220220002001109c01210420012007470440200220002007109c011a2002200020072004410020042007471b1091010b20022000200141001091012003280228200141016b109b0110ab010b200341406b24000b0a0041e69008410a10470b0a0041909108410c10470b0a00418a9208411310470b0a00419d9208411110470bad02010a7f230041306b22012400200141286a41003b0100200142003703200240024003402002410a460d01200141206a20026a2000410a6e220341f6016c20006a4130723a0000200241016a21022000410a4920032100450d000b200141186a200141206a410a200210c30141002100200141106a4100200128021c2206410176220320012802182207200310322001280214210420012802102108200141086a41002003200620076a20036b20031032200341016b2102200128020c210320012802082109024003402002417f460d0120002004460d0320022003490440200020086a22052d0000210a2005200220096a22052d00003a00002005200a3a0000200241016b2102200041016a21000c010b0b1033000b200720061047200141306a24000f0b1033000b1033000b0a0041a39008410910470b0a0041aa9108410d10470b0a0041919008410410470b0a0041c69108411010470b0a0041f89008410c10470b0a0041959008410e10470b0f0020004200107141ff01714101460b1401017f41d492084115104722012000107420010b0a0041849108410c10470b0a0041da9308410810470b5d01027f230041106b2202240041fe92084117104721032002200141087420014180fe0371410876723b010e20032002410e6a410210051a2003103521012002200310aa012000200229030037020020002001360208200241106a24000b0a0041f89108411210470b0a0041e99208411510470b0a0041c19208411310470b1301017f10bf011079210010c501107920006b0b3b01017f230041106b22042400200441086a41002003200120021032200428020c21012000200428020836020020002001360204200441106a24000b1301017f10c1011079210010c001107920006b0b0a0041ae9208411310470b2801017f027f10c001107945044010c2010c010b10c4010b220045044010c70141011081010b20000b0a0041cb9308410610470b4701017f230041106b22002400024010af0110a001450440200010ac012000280204109301450d0141f88a0841d7001039000b41c9840841111039000b10ab01200041106a24000b3401017e02402001450d0003402001450d01200141016b210120003100002002420886842102200041016a21000c000b000b20020b0a0041f09008410810470b0a00419c9108410e10470b0a0041e69108411210470b0a0041959308411a10470b0a0041af9308411c10470b3c01027f230041106b22012400200141086a41d193084109104710aa01200128020c21022000200128020836020020002002360204200141106a24000baa03010e7f230041306b220024001026105941061058410010452104410110452105410241c49008411010522101410341ac900841181052210241041050210341051050210620004106360220200041186a200041206a41959008410e104a200028021c21072000280218210820002000280220360224200041106a200041246a419190084104104a200028021421092000280210210a20002000280224360228200041086a200041286a41829008410f104a200028020c210b2000280208210c2000200028022836022c2000412c6a41ef8f084113104c210d200028022c10560240024020034290ce00107141016a41ff017141014d04402001450d012002450d0210b801200410a20110b501200510a20110c501200110a40110cd01200210a40110cb01200c047f103b05200b0b10a20110b4012003109d0110ca012006109d0110b601200a047f103b0520090b10a20110b9012008047f41bf8608410410470520070b10a20110b701200d41ff01712201200141024771109f0110c7014101109f01200041306a24000f0b41a28608411d1039000b41f48508412e1039000b41c68508412e1039000ba804020e7f017e230041306b220124001048104110594102105841001045210441011045210620014102360228200141286a41928f084115104c2102200120012802283602082001200141086a41848f08410e104a2001280204210020012802002103200128020810561044210510af0110a00104402003044041e495084100104721000b10b201200241ff0171220220024102477110a10120001011044010b001200010a3010b10b101200410a301200510302103200141003b012c20014100360228200141013a002e230041206b2202240010631a200141286a22002d0006210520002d0005210720002d0004210820002d0003210920002d0002210a20002d0001210b20002d0000210c200241b98208106041d9820841101061200241186a220d2003360200200241106a2203280200220020041064200020061064200041d181084109200c105e200041da81084107200b105e200041e181084108200a105e200041e9810841182009105e200041818208410e2008105e2000418f8208410a2007105e20004199820841122005105e200141086a220041186a200d290300370300200041106a2003290300370300200041086a200241086a29030037030020002002290300370300200241206a240020012802102102200128022021042001290214210e200141206a103b3602002001411c6a410e360200200141978e083602182001200e3703102001200436020c2001200236020820001065000b41b4840841151039000b9a0201067f230041406a22012400102610414100105710af0110a001450440200141286a2104103f10af011037230041206b22032400200341086a41b98208106041ab8208410e1061103b1a103521022003280218220520021062103b1a41e98208210210352100034020052000106202400340200241ea8208460d0120022d00002100200241016a21022000450d000b20004102742200419896086a280200200041f495086a280200104721000c010b0b20042003290308370300200441106a200341186a290300370300200441086a200341106a290300370300200341206a240010632103200141003602182001200336020c2001200129023437031020012001280230360208200141086a1065000b41c9840841111039000b1200102610414100105710c70141011081010b2200102610414100105710af0110a001044041c9840841111039000b10c7011083010b850201047f230041106b2202240010261041105941011058410041eb8e084119105221032002410136020c02402002410c6a220128020041e0e4082802004e0440410121000c010b200141ca8e084121104921010b20022001360204200220003602002002280204210120022802002100200228020c1056024010c20120034f044010cd0110794100200120001b2200490d0110ce012000200320001b107f10c10110830110c0012003ad10800110bd0110a001210010bd012101024020004504402001200110a60141016aad42ffff03831080010c010b200142011080010b10bc01410110a101200241106a24000f0b41c48d0841d3001039000b41da8c0841ea001039000b2400102610414100105710c10110830110c00110830110ce0110830110bc01410010a1010b1a01017f102610414101105741001050210010ca012000109e010b3c01027f102610414102105741001045210041011045210110bf0110a00145044041f5840841c0001039000b10b801200010a30110b501200110a3010b1f01017f1026104141011057410041b48f0841051052210010cd012000107f0bd60101047f230041206b22002400102610414102105710542101410141a58e08411c105221022000200136020c0240024010af0110a00145044010af0110371027420483500d0110c6012001101141027620026c490d022000200110113602182000410036021420002000410c6a360210034002402000200041106a106b2000280200450d00200028020421032002210103402001450d02106341002003103510ae01200141016b21010c000b000b0b200041206a24000f0b41c9840841111039000b41c38c0841171039000b41cf8b0841f4001039000b3101037f1026104141001057103e103f10312100104341e4e40820001028416741e49508410010191a2000103b4167103d0b1200102610414100105710cc01410110a1010b1200102610414100105710cc01410010a1010b7a01047f230041306b22002400102610414101105720001054220136021c200041106a10cf0120002802142102200028021021032000200110113602282000410036022420002000411c6a3602200340200041086a200041206a106b2000280208044020032002200028020c1088010c010b0b200041306a24000bc60101057f230041406a220024001026104141001057200041186a10cf0120002802182104200041306a200028021c2202108c0120002802342101034020010440200041106a20022001108d012000280214200420022001109a01108b0121010c01050240200041206a2002108c012000280224210103402001450d01200041086a20022001108d01200028020c200220011095012002200110960121010c000b000b0b0b200041386a4200370300200042003703302002200041306a109001200041406b24000b850201077f230041406a22002400102610414101105710512105200041186a10cf01200028021c210120002802182206200510890122040440200041106a20012004108d012000280214210220002802102103200041206a2001108c01024020030440200041086a20012003108d012001200320002802082002108e010c010b200020023602240b024020020440200020012002108d012001200220032000280204108e010c010b200020033602280b2001200410950120012004109a011a200120041096012000200028022041016b360220200041386a200041286a290300370300200020002903203703302001200041306a10900120062005108b010b200041406b24000bb50301067f230041206b220124001048104241011057410041c490084110105221021044103e2100024010cc01105d450d00200141086a10cf01200128020820001086010d0041bd8a08413b1039000b02400240024002400240024002402002044010af0110a0010d0110af0110371027420483500d0210c70110a001450d0310c6012002490d04200010bb011079220410cd01107922034f0d05200320046b22044100200320044f1b2002490d0510bc01105d450d0710bd0110a001450d060c070b418a8a0841331039000b41c9840841111039000b41ef8908411b1039000b41c28908412d1039000b419f880841a3011039000b41d6870841c9001039000b200141106a10bd0110a60110be012001200128021020012802182000108501200128020021032001280204210410ce01107922002004410020031b22034b0440200020036b22034100200020034f1b20024f0d010b41dc860841fa001039000b1030210041722002ad100020002000417210290240200010ca0110a501107241ff017145044003402002450d02200010304101200210ae01200241016b21020c000b000b41c3860841191039000b200141206a24000b0d00102610424100105710c8010b0e0010264100105710c401ad10140b0e0010264100105710c201ad10140b6902027f017e230041206b2200240010264101105710512101024010bc01105d450d0010bd0110a0010d00200041106a10bd0110a60110be01200041086a200028021020002802182001108501200028020c410020002802081bad21020b20021014200041206a24000b3301027f230041106b2200240010264101105710512101200041086a10cf0120002802082001108601ad1016200041106a24000b3601017f230041206b22002400102641001057200041086a10cf01200041106a200028020c108c0120003502101014200041206a24000b100010264100105710af01103710151a0b0d0010264100105710b101105b0b0d0010264100105710b001105b0b100010264100105710ca0110a501102a0b0d0010264100105710cb01105b0b0d0010264100105710cd01105a0b0f00102641011057105110bb01105a0b0d0010264100105710ce01105a0b0d0010264100105710cc01105c0b0d0010264100105710bc01105c0b0d0010264100105710c501105a0b0d0010264100105710c701105c0b0d0010264100105710c001105a0b9f0701087f230041d0006b2201240002400240024002400240024010662205103722021011450d00200141086a2200200210351038200010a7012102200010a8012100103b21030340200004402003200141086a10a7011062200041016b21000c010b0b200128020c2001280208470d01200141186a22042d0000044041d8e408410036020041dce40841003a00000b2005108301200141c8006a22054200370300200141406b22064200370300200141386a22074200370300200142003703302001200141306a412020021011220010c3012002410020012802002001280204104e1a200141206a200529030037030020042006290300370300200141106a200729030037030020012000360228200120012903303703082000450d002000410e470d05200141086a410e41978e08410e104f450d051059410010582001410036022c200141306a2105230041106b220024000240027f02402001412c6a220241a78f0841061049220445200441ebde014672450440200228020041e0e408280200480d01103b0c020b41042104200241a78f084106104d1045220210114104460440200041003602002002410020004104104e1a41feffffff0720022000410441cd83084104104f1b21020b200041003602000c020b200241a78f084106104b0b21022000200436020420004101360200410821040b200020046a200236020020052000290300370200200541086a200041086a280200360200200041106a2400200128022c10562001280230200128023421002003106a1059044041a6810841121002000b45044010c5011079210210af01200041feffffff07460d032000101d1a200141306a10ac012001280234109301450d0420012802382002109b0110c8010c010b1040027f41c49608280200220041ffffffff0746044041c49608416b360200416b102b416b21000b024002400240200010114104760e020102000b41b4800841221002000b41feffffff072102104410300c010b200141386a42003703002001420037033020004100200141306a4110104e0d052001280230220041fffeff77470d01200041187420004180fe03714108747220004108764180fe0371200041187672722102200128023c220041187420004180fe03714108747220004108764180fe0371200041187672720b220010ba01450d0020022000103c0b200141d0006a24000f0b41808008410e10a901000b41c08308410d1002000b41fb8308410f1002000b41838308411d1002000b41b98f0841361002000b0b0041e49508410e1002000b0bb1160500418080080bb902696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a20455344544e4654437265617465696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747363616e467265657a6563616e5769706563616e506175736563616e5472616e736665724e4654437265617465526f6c6563616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c650041c282080b01010041d682080b4a02ffff69737375654e6f6e46756e6769626c650343425f434c4f53555245696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67650041c083080bfb124553445420657870656374656445474c442e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e73746f72616765206465636f6465206572726f723a20626164206172726179206c656e677468546f6b656e20616c72656164792069737375656421546f6b656e206e6f7420697373756564212f2e6a736f6e68747470733a2f2f697066732e696f2f697066732f596f752063616e2774206368616e67652074686520434944732e2054686572652061726520736f6d6520746f6b656e73206d696e74656420616c7265616479216d657461646174613a3b746167733a2023546f6b656e73206c696d69742070657220616464726573732073686f756c64206265206174206c65617374203121416d6f756e74206f6620746f6b656e7320746f206d696e742073686f756c64206265206174206c65617374203121526f79616c746965732063616e6e6f74206578636565642031303025212e706e67496e76616c696420616d6f756e74206173207061796d656e74596f752063616e2774206d696e74207375636820616e20616d6f756e74206f6620746f6b656e732e20436865636b20746865206c696d697473206279206f6e6520616464726573732120596f75206861766520746f2066697420696e206c696d6974732077697468207468652077686f6c6520616d6f756e742e596f752063616e2774206d696e74207375636820616e20616d6f756e74206f6620746f6b656e732e20436865636b20746865206c696d697473206279206f6e65206164647265737321416c6c20746f6b656e732068617665206265656e206d696e74656420616c7265616479206f722074686520616d6f756e7420796f752077616e7420746f206d696e7420697320746f206d7563682e20436865636b206c696d6974732028746f74616c6c79206f72207065722064726f70292e20596f75206861766520746f2066697420696e206c696d6974732077697468207468652077686f6c6520616d6f756e742e546865206d696e74696e6720697320706175736564206f7220686176656e277420737461727465642079657421455344544e465443726561746520726f6c65206e6f742073657421546865206e756d626572206f6620746f6b656e732070726f76696465642063616e2774206265206c657373207468616e20312154686520616c6c6f776c69737420697320656e61626c65642e204f6e6c7920656c696769626c65206164647265737365732063616e206d696e74215468657265206973206e6f7468696e6720746f2073687566666c652e20496e6465786573206e6f7420706f70756c61746564206f7220746865726520617265206e6f20746f6b656e7320746f206d696e74206c65667421416c6c20746f6b656e732068617665206265656e206d696e74656420616c7265616479206f722074686520616d6f756e7420796f752077616e7420746f206d696e7420697320746f6f206d7563682e20436865636b206c696d697473212028746f74616c6c79206f72207065722064726f7029214e465443726561746520726f6c65206e6f74207365742154686520746f6b656e73206c696d6974207065722061646472657373207065722064726f702073686f756c6420626520736d616c6c6572206f7220657175616c20746f2074686520746f74616c206c696d6974206f6620746f6b656e7320706572206164647265737321546865206e756d626572206f6620746f6b656e73207065722064726f702063616e277420626520686967686572207468616e2074686520746f74616c20616d6f756e74206f6620746f6b656e73206c6566742169737375655f63616c6c6261636b616d6f756e745f6f665f746f6b656e735f7065725f61646472657373616464726573736573746f6b656e735f6c696d69745f7065725f616464726573735f7065725f64726f70616d6f756e745f6f665f746f6b656e735f7065725f64726f706e66745f746f6b656e5f6e616d6569735f6e6f745f6e756d6265725f696e5f6e616d65726573756c74616464726573736c696d69746e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637469735f6d657461646174615f696e5f7572697370726f76656e616e63655f686173687461677366696c655f657874656e73696f6e726f79616c74696573746f6b656e735f6c696d69745f7065725f61646472657373616d6f756e745f6f665f746f6b656e73696e707574206f7574206f662072616e67656e6674546f6b656e49646e66745072696365696d61676542617365436964697344726f704163746976656e6674546f6b656e4e616d6570726f76656e616e6365486173686d6574616461426173654369646e657874496e646578546f4d696e7469734d65746164617461496e55726973746f6b656e734c656674546f4d696e746973416c6c6f776c697374456e61626c65646d696e746564496e6465786573546f74616c636f6c6c656374696f6e546f6b656e4e616d656e6f4e756d626572496e4e66744e616d65616d6f756e744f66546f6b656e73546f74616c6d696e746564496e6465786573427944726f706d696e74656450657241646472657373546f74616c616d6f756e744f66546f6b656e7350657244726f706d696e7465645065724164647265737350657244726f70746f6b656e734c696d697450657241646472657373546f74616c746f6b656e734c696d69745065724164647265737350657244726f70706175736564616c6c6f776c6973746c61737444726f70456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e747366616c736574727565696e646578206f7574206f662072616e676545534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e465441646455524945534454526f6c654e465455706461746541747472696275746573455344545472616e73666572526f6c6500000070616e6963206f63637572726564000000000000110000001100000011000000160000000f000000110000001b00000010000000e40a02004d0a02005e0a02006f0a0200800a0200960a0200a50a0200b60a0200d10a020041bc96080b0c9cffffffffffff7fffffff7f" + "size": 19005, + "code": "0061736d01000000018401166000006000017f60027f7f0060017f017f60017f0060027f7f017f60037f7f7f0060047f7f7f7f0060037f7f7f017f60047f7f7f7f017f60017f017e60027f7e0060057f7f7e7f7f017f60017e006000017e60017e017f60067e7f7f7f7f7f017f60057f7f7f7f7f0060047f7f7e7f0060027f7e017f60047f7e7f7f0060027f7f017e0294093003656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000203656e760a6d4275666665724e6577000103656e760d6d427566666572417070656e64000503656e76126d427566666572417070656e644279746573000803656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000c03656e760d6d616e6167656443616c6c6572000403656e76106d616e61676564534341646472657373000403656e76136d616e616765644f776e657241646472657373000403656e76096d4275666665724571000503656e760f6973536d617274436f6e7472616374000303656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000503656e76126d616e616765645369676e616c4572726f72000403656e76136765744e756d455344545472616e7366657273000103656e76106d4275666665724765744c656e677468000303656e7619626967496e74476574556e7369676e6564417267756d656e74000203656e760f6765744e756d417267756d656e7473000103656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e7614736d616c6c496e7446696e6973685369676e6564000d03656e760d6d42756666657246696e697368000303656e76186d616e616765644765744f726967696e616c547848617368000403656e760a626967496e745369676e000303656e760f6d4275666665725365744279746573000803656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e76146d427566666572436f707942797465536c696365000903656e76126d42756666657253746f726167654c6f6164000503656e76136d42756666657253746f7261676553746f7265000503656e76176d427566666572546f426967496e74556e7369676e6564000503656e76106d42756666657253657452616e646f6d000503656e760d6d616e61676564536861323536000503656e760a6765744761734c656674000e03656e7609626967496e744e6577000f03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001003656e760f636c65616e52657475726e44617461000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e7609626967496e74436d70000503656e760e636865636b4e6f5061796d656e74000003656e7614626967496e7446696e697368556e7369676e6564000403656e7611676574455344544c6f63616c526f6c6573000a03656e7618626967496e7447657445787465726e616c42616c616e6365000203656e760a626967496e7454446976000603656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6d4275666665724765744279746573000503656e76136d42756666657247657442797465536c696365000903656e761b6d616e616765645472616e7366657256616c756545786563757465000c03656e76106d616e616765644173796e6343616c6c000703cf01cd01030111000103020302021201060701010100000401030705000708080809090802010301070808040404000203040403040706030701020401040206020604060207090203130502030608020607030a02030406020b021404050705060605050202060709020705030202020303020502080202020302020202030303030202000401060101010301010101010103030101020101010101010101000615060101010101010400000000000000000000000000000000000000000000000000000000000000000000000000000005030100030616037f01418080080b7f004198e5080b7f0041a0e5080b078c0629066d656d6f7279020004696e697400d6010d6765744e6674546f6b656e496400d70116676574436f6c6c656374696f6e546f6b656e4e616d6500d8010f6765744e6674546f6b656e4e616d6500d9010b6765744e6674507269636500da011167657450726f76656e616e63654861736800db011d676574546f6b656e734c696d697450657241646472657373546f74616c00dc01186765744d696e74656450657241646472657373546f74616c00dd011f676574546f6b656e734c696d69745065724164647265737350657244726f7000de01126973416c6c6f776c697374456e61626c656400df010c697344726f7041637469766500e0010e676574546f74616c537570706c7900e1010f69734d696e74696e6750617573656400e2011b676574546f74616c537570706c794f6643757272656e7444726f7000e3010a6973737565546f6b656e00e4010d7365744c6f63616c526f6c657300e5010c70617573654d696e74696e6700e6010c73746172744d696e74696e6700e7010773657444726f7000e80109756e73657444726f7000e9010b7365744e6577507269636500ea010e6368616e6765426173654369647300eb011b7365744e6577546f6b656e734c696d69745065724164647265737300ec0108676976656177617900ed010c636c61696d536346756e647300ee010f656e61626c65416c6c6f776c69737400ef011064697361626c65416c6c6f776c69737400f00111706f70756c617465416c6c6f776c69737400f1010e636c656172416c6c6f776c69737400f2011672656d6f7665416c6c6f776c6973744164647265737300f301046d696e7400f4010773687566666c6500f5011167657444726f70546f6b656e734c65667400f60112676574546f74616c546f6b656e734c65667400f7011a6765744d696e7465645065724164647265737350657244726f7000f80118676574416c6c6f776c69737441646472657373436865636b00f90110676574416c6c6f776c69737453697a6500fa010863616c6c4261636b00fb010a5f5f646174615f656e6403010b5f5f686561705f6261736503020ace6bcd011601017f1031220142001000200120012000100120010b1901017f41d0960841d0960828020041016b220036020020000b2e000240200120024d0440200220044d0d011033000b1033000b2000200220016b3602042000200120036a3602000b060010fc01000b0e01017f103122004201100020000b0f01017f10032201200010041a20010b0a0020002001103710380b0d00200010312200101b1a20000b3301017f200110102102200041106a41003a00002000410c6a20023602002000200136020820002002360204200041003602000b0900200020011002000be60101047f103b2106103b2107230041106b22042400103b21052001103521012003103021032004200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484843702042004200141187420014180fe03714108747220014108764180fe0371200141187672723602002004200341187420034180fe03714108747220034108764180fe03712003411876727236020c20052004411010051a2000200542002006200710061a200441106a24000b1301017f1031220041f89508410010181a20000b2300200141feffffff074704402000200142002002103a0f0b20002002103b103b103d0b0f0020002001420020022003102e1a0b0c01017f10312200100720000b0c01017f10312200100820000b0c01017f10312200100920000b18001040103e100a41004a04400f0b41f9930841241002000b2000416710074167104341f8e408100b41004c04400f0b419d9408412c1002000b0b00200041f8e408102c1a0b2901017f41d49608280200220041ffffffff0746047f41d4960841753602004175100c41750520000b0b0d00200010312200100d1a20000b2e01017f41e380084117104722042000200110051a200441fa8008410310051a20042002200310051a2004100e000b1101017f103122022000200110181a20020b1200100f4504400f0b41fd800841251002000b3501017f0240200128020041f4e4082802004e0440410121040c010b200120022003104a21010b20002001360204200020043602000b0c00200020012002104c10450b1000200020012002104c2001200210560b2f01017f2000280200220341f4e4082802004e04402001200241a2810841111046000b2000200341016a36020020030b0f002000200120032002102d4100470b5301027f2001200346047f4100210302402001450d00034020002d0000220420022d00002205460440200041016a2100200241016a2102200141016b22010d010c020b0b200420056b21030b20030541010b450b3201017e027f0240200010242203420158044041002003a741016b0d021a0c010b2001200241eb900841121046000b41010b0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410051a200241106a24000b2301017f41001045220010104120470440418f8b08410741b1840841101046000b20000b0c00200010312200101120000bcd0101067f230041206b22002400410010452101103b2103200041086a200110382000280210210420002802082101200028020c210502400340200120054704402000200420014120105420002802004101470d0220002000280204220241187420024180fe03714108747220024108764180fe03712002411876727236021c20032000411c6a410410051a200141206a21010c010b0b200041186a2d0000044041ece408410036020041f0e40841003a00000b200041206a240020030f0b41db8c08410941818308410f1046000b1f0020012002200310032201101a21022000200136020420002002453602000b0a0020002001200210560b2501017e20001024220342ffffffff0f5804402003a70f0b20012002418d8008410e1046000b1900200041f4e4082802004e04400f0b41b3810841121002000b1400101220004604400f0b41c5810841191002000b1900200041f4e4082802004c04400f0b41a2810841111002000b0b0041f4e40810123602000b1f01017f2001105c21022000410036020820002002360204200020013602000b0900200010104102760b09002000107ead10130b09002000105fad10140b2f01017e027f02402000107f2201420158044041002001a741016b0d021a0c010b41eb90084112108001000b41010b0b09002000103710151a0b20002000200120021062200041ce940841c9940820031b4104410520031b10620b0c00200020012002104710500b08002000412010470b2a002002200310472102103b21032000427f3703082000200336020420002002360200200020013602100b0e01017f103122004200100020000b0d00103b1a20002001103510500bdc0201057f230041306b220124002000280210220204401068200141106a1069200120012d00143a001c20012001280210360218200041146a2802002204200141186a2203106a200320022004106b200041186a22022802002204105c2003106a200120041010360228200141003602242001200236022003400240200141086a200141206a106c2001280208450d002001200128020c22031010220241187420024180fe03714108747220024108764180fe03712002411876727236022c200141186a2001412c6a4104106b024020012d001c04402003101022044190ce0041ece40828020022026b4b0d0120012002200220046a2202106d2003410020012802002001280204104d1a41ece40820023602000c030b2001280218200310041a0c020b200141186a106e2001280218200310041a0c010b0b200128021820012d001c106f0b2000280208200028020c20002802002000280204102f000b1b01027f10312200101641f78208410a10472201200010041a20010b6c01027f230041106b220124002000027f41f0e4082d0000220245044041f0e40841013a000041ece4084100360200200141086a4100107b2001280208200128020c41f895084100107d103b0c010b41f89508410010470b360200200020024101733a0004200141106a24000b090020002001109e010b7e01027f230041106b220324000240024020002d000404404190ce0041ece40828020022046b2002490d01200341086a2004200220046a2200106d2003280208200328020c20012002107d41ece40820003602000c020b20002802002001200210051a0c010b2000106e20002802002001200210051a0b200341106a24000b8a0101047f230041106b220324002001280204220241046a220420012802084b047f41000520012802002003410036020c28020020022003410c6a410410721a200328020c210220012004360204200241187420024180fe03714108747220024108764180fe037120024118767272210241010b21012000200236020420002001360200200341106a24000b3f01017f230041106b22032400200341086a2001200241dc96084190ce001032200328020c21012000200328020836020020002001360204200341106a24000b5701027f230041106b2201240020002d0004200041003a00040440200141086a410041ece408280200107c20002802002001280208200128020c10051a41ece408410036020041f0e40841003a00000b200141106a24000b5101017f230041106b22032400200320023a000c20032001360208200341086a106e2003280208210120032d000c044041ece408410036020041f0e40841003a00000b20002001101c1a200341106a24000b9c0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a200241106a41202001101022061071200141002002280208200228020c10721a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b3b01017f230041106b22042400200441086a41002003200120021032200428020c21012000200428020836020020002001360204200441106a24000b0c002000200120022003104d0b0d00103b1a20002001107410500b0f01017f10312201200010191a20010b26002001500440417f20001017220041004720004100481b0f0b4172200110002000417210760b1500417f200020011025220041004720004100481b0b09002000200110041a0b070020001010450b6401017f230041106b220324002003410036020c200120024102742003410c6a410410722102200328020c2101200020024101733602002000200141187420014180fe03714108747220014108764180fe037120014118767272360204200341106a24000bb20101037f230041106b22032400027f024020002d000845044020002802002204101022054190ce004b0d0141f0e4082d00000d0141ece408200536020041f0e40841013a0000200341086a2005107b200441002003280208200328020c10721a200041013a00080b4101200141046a220041ece4082802004b0d011a200320012000107c2002410420032802002003280204107d41000c010b200041003a0008200420012002410410720b200341106a24000b3d01017f230041106b22022400200241086a41dc96084190ce0020011071200228020c21012000200228020836020020002001360204200241106a24000b32000240200120024d044020024190ce004d0d011033000b1033000b2000200220016b3602042000200141dc96086a3602000bb50201067f2001200346044020012203410f4b04402000410020006b41037122046a210520040440200221010340200020012d00003a0000200141016a2101200041016a22002005490d000b0b2005200320046b2203417c7122066a21000240200220046a22044103710440200641004c0d012004410374220141187121072004417c71220841046a2102410020016b4118712109200828020021010340200520012007762002280200220120097472360200200241046a2102200541046a22052000490d000b0c010b200641004c0d0020042102034020052002280200360200200241046a2102200541046a22052000490d000b0b20034103712103200420066a21020b20030440200020036a21010340200020022d00003a0000200241016a2102200041016a22002001490d000b0b0f0b1033000b2101017e2000107f22014280808080105a0440418d8008410e108001000b2001a70b5f02027f017e230041106b22012400200142003703082000103722001010220241094f0440418d8008410e108001000b2001200141086a200210ce01200041002001280200220020012802042202104d1a2000200210cd01200141106a24000b1a01017f419b84084116104722022000200110051a2002100e000b0d0020004167101b1a416710100b0d00200041f8950841001083010b0d002000200120021047101c1a0b0a0020002001ad1085010b3801017f230041106b2202240020024200370308200220014100200241086a108701200020022802002002280204108301200241106a24000b3d01017f230041106b220224002002420037030820022001ad42ff01834101200241086a108701200020022802002002280204108301200241106a24000bf10102047f017e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422083700000240200150044041f895082104410021030c010b41002008a741077620027122056b41ff0171210602400340200441084704402006200320046a2d000022074704402004200741077620054720027122026b41094f0d03200420026b220220036a2104410820026b21030c0405200441016a21040c020b000b0b1033000b10fc01000b20002003360204200020043602000b1400416c41f89508410010181a2000416c101c1a0b190020001035220041de8308410710051a20002001107720000b2c0020012003108b01047f20022003108901107e210341010541000b210120002003360204200020013602000b0c0020002001108e014100470b4b01037f230041106b22032400200341086a20002802002204200041086a28020022052001108a01200520011089012002ad1085012004200041046a2802002001108d01200341106a24000bcf0101047f230041306b2203240020002002108b01450440200341106a20011091012003200328021c41016a220436021c024020032802102206450440200320043602140c010b200341086a20012003280218220510920120012005200328020820041093010b2001200420054100109301200341186a22052004360200200141fd8308410620041094012002101c1a2003200641016a360210200341286a2005290300370300200320032903103703202001200341206a10950120002002108f012004ad1085010b200341306a24000b0b0020002001108f01107e0b190020001035220041e58308410810051a20002001107720000b0c0020002001108f011082010baf0101047f230041206b22022400024002402001109c012201108101450440410021010c010b200241086a2203200110362003109d012101200241086a109d012103200241086a109d012104200241086a109d012105200228020c2002280208470d01200241186a2d0000450d0041ece408410036020041f0e40841003a00000b2000200536020c200020043602082000200336020420002001360200200241206a24000f0b418d8008410e108001000b7f01027f230041206b22032400200341086a2204200141f28308410b200210940110362004109d012101200341086a109d012102200328020c2003280208460440200341186a2d0000044041ece408410036020041f0e40841003a00000b2000200236020420002001360200200341206a24000f0b418d8008410e108001000b5801017f230041106b22042400200041f28308410b200110940120041069200420042d00043a000c200420042802003602082002200441086a2201109e0120032001109e01200428020820042d000c106f200441106a24000b18002000103522002001200210051a2003200010990120000b850101027f230041106b220224002000109c012100024020012802002203044020021069200220022d00043a000c200220022802003602082003200241086a2203109e0120012802042003109e0120012802082003109e01200128020c2003109e012000200228020820022d000c106f0c010b200041f8950841001083010b200241106a24000b290002402002450d002001107e2002490d002000200210970120031084010f0b41d2940841121002000b1a0020001035220041ed8308410510051a2001200010990120000b07002000107e450b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410051a200241106a24000b1200200041f28308410b20011094011082010b1200200041fd8308410620011094011082010b130020001035220041838408410510051a20000b5302017f017e230041106b220124002001410036020c200041086a20002802002001410c6a107a044041818308410f108001000b2000200028020041046a3602002001410c6a410410cd01200141106a2400a70b4501017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104106b200241106a24000b2700200041fd830841062001109401103722001010412047044041b184084110108001000b20000b190020001035220041978408410410051a20002001ad1085010b2c000240200204402001107e20024f0d010b41d2940841121002000b20002002109701107e2200200220001b0b120020001081014504402000200110a3010b0b090020002001101c1a0b1100200010a5010440200020011084010b0b08002000108101450b1100200010a50104402000200110a7010b0b0900200020011086010b120020001081014504402000200110a9010b0b0b00200020011074101c1a0b1f01017e2000107f2201428080045a0440418d8008410e108001000b2001a70b0f002000103710312200101d1a20000b5401047f230041106b22012400200010ad012102200141086a200028020820002802002203200210542001280208410147044041818308410f10ae01000b200128020c2000200220036a360200200141106a24000b5302017f017e230041106b220124002001410036020c200041086a20002802002001410c6a107a044041818308410f10ae01000b2000200028020041046a3602002001410c6a410410cd01200141106a2400a70b1a01017f419b80084119104722022000200110051a2002100e000b1801017f20011035210220002001360204200020023602000bc10101047f230041206b22002400200041086a10b101200028020c2201107e2102103b22034104101e1a2000410036021820034100200041186a4104104d1a200245044010fc01000b200028020820012000280218220141187420014180fe03714108747220014108764180fe03712001411876727220027041016a220110a10110b201210320001069200020002d00043a001c200020002802003602182001200041186a2201106a2001106a2003200028021820002d001c106f200041206a24000b3601037f41ed91084110104722011035210220011035220341978408410410051a2000200336020420002001360200200020023602080b0a0041ce9108410f10470b900a02117f027e230041d0006b22032400200341306a220410b20110362004109d0121072004109d0121050240024020032802342003280230460440200341406b2d0000044041ece408410036020041f0e40841003a00000b1034211010b4011037210f103b210810b5011037210410b601105f2008200410041a450440200510b7012104200841f085084102104710041a2008200410041a0b10b80110ab01211141e18508410910472106200510b701210941c7850841051047210a10b9011037210b41ea850841011047210c41c6850841011047210d41eb850841051047210e103b2204200e10041a200410ba01103710041a2004200c10041a2004200610041a2004200b10041a2004200d10041a2004200910041a2004200a10041a20041031220b101f1a10bb01105f103b210610bc011037210d10b9011037210e41c6850841011047210941c7850841051047211210bd0110372113200510b701210a41cc8508411510472205200d10041a2005200910041a2005200a10041a2005201310041a200620051050044041cc8508411510472205200e10041a2005200910041a2005200a10041a2005201210041a2006200510500b20032006360224103b2105103b1a2005200f103510502005201010732005200810662005201110732005200b10662005200410660240200610100440200320061010360238200341003602342003200341246a3602300340200341186a200341306a106c2003280218450d02200328021c2104103b1a20052004103510500c000b000b103b220441f89508410010181a2005200410500b102041b48008410d1047210441671008416742001021200420051031220410221a1023200341106a200441001079024020032802104101470d00200328021422051010220441084b0d002003420037033020054100200320046b41386a2004104d0d002003290330221442388620144280fe0383422886842014428080fc0783421886201442808080f80f834208868484201442088842808080f80f832014421888428080fc07838420144228884280fe0383201442388884848421150b2001044041ad8308106321020b200320023602282003103e220136022c200341286a2104200210104120460440200341c8006a4200370300200341406b4200370300200341386a42003703002003420037033020024100200341306a22024120104d1a2003412c6a200341286a2002412041ad83084120104e1b21040b103421022004280200200f20152002103a200010be01450d02200110bf0122022002107e41016a10840110c001105f450d0110c10110a5010d01200341306a10c10110aa01220210c201200341086a200328023020032802382001108a01024020032802080440200328020c22040d010b200341306a2204200210c201200420014101108c010c020b200341306a2205200210c20120052001200441016a108c010c010b418d8008410e108001000b104041feffffff072000103c0b10c30110a501210110c30121000240200145044020002000107e41016a1084010c010b200042011085010b024010c401107e450d0010c50110a50110c501210045044020002000107e41016a1084010c010b200042011085010b10c6010440200341306a10b10120032802342200107e2101200328023022022000200110a10121042001200747044020022000200710a1011a2002200020072004410020042007471b1096010b20022000200141001096012003280238200141016b10a00110b0010b200341d0006a24000b0a0041fd9008410a10470b0a0041a79108410c10470b0a0041b49208411110470bac02010a7f230041306b22012400200141286a41003b0100200142003703200240024003402002410a460d01200141206a20026a2000410a6e220341f6016c20006a4130723a0000200241016a21022000410a4920032100450d000b200141186a200141206a410a2002107141002100200141106a4100200128021c2206410176220320012802182207200310322001280214210420012802102108200141086a41002003200620076a20036b20031032200341016b2102200128020c210320012802082109024003402002417f460d0120002004460d0320022003490440200020086a22052d0000210a2005200220096a22052d00003a00002005200a3a0000200241016b2102200041016a21000c010b0b1033000b200720061047200141306a24000f0b1033000b1033000b0a0041908c08410910470b0a0041c19108410d10470b0a0041fe8b08410410470b0a0041dd9108411010470b0a00418f9108410c10470b0a0041828c08410e10470b0f0020004200107541ff01714101460b1401017f41eb92084115104722012000107720010b0a00419b9108410c10470b0a0041f19308410810470b5d01027f230041106b22022400419593084117104721032002200141087420014180fe0371410876723b010e20032002410e6a410210051a2003103521012002200310af012000200229030037020020002001360208200241106a24000b0a00418f9208411210470b0a0041809308411510470b0a0041d89208411310470b1301017f10c301107e210010c801107e20006b0b1301017f10c501107e210010c401107e20006b0b0a0041c59208411310470b2801017f027f10c401107e45044010c6010c010b10c7010b220045044010ca0141011086010b20000b0a0041e29308410610470b4701017f230041106b22002400024010b40110a501450440200010b1012000280204109801450d0141b88a0841d7001039000b41b9890841111039000b10b001200041106a24000b4401017f230041306b22032400200341086a200110702000027f2003280228044020002001360204200041086a200236020041010c010b41000b360200200341306a24000b3401017e02402001450d0003402001450d01200141016b210120003100002002420886842102200041016a21000c000b000b20020b3901017f230041106b22032400200341086a2001410820021071200328020c21012000200328020836020020002001360204200341106a24000b0a0041879108410810470b0a0041b39108410e10470b0a0041fd9108411210470b0a0041a19208411310470b0a0041ac9308411a10470b0a0041c69308411c10470b3c01027f230041106b22012400200141086a41e893084109104710af01200128020c21022000200128020836020020002002360204200141106a24000bc503010e7f230041306b220024001026105a41061059410010452105410110452106410241968b08411010552102410341998c0841181055210341041052210441051052210720004106360220200041186a200041206a41828c08410e1049200028021c21082000280218210920002000280220360224200041106a200041246a41fe8b08410410492000280214210a2000280210210b20002000280224360228200041086a200041286a41ef8b08410f1049200028020c210c2000280208210d2000200028022836022c2000412c6a220128020041f4e40828020048047f200141dc8b084113104c41dc8b084113104f0541020b2101200028022c10570240024020044290ce00107541016a41ff017141014d04402002450d012003450d0210bc01200510a20110b901200610a20110c801200210a40110d301200310a40110d001200d047f103b05200c0b10a20110b801200410a80110cf01200710a80110ba01200b047f103b05200a0b10a20110bd012009047f41c28508410410470520080b10a20110bb01200141ff017141024720017110a60110ca01410110a601200041306a24000f0b41a58508411d1039000b41f78408412e1039000b41c98408412e1039000b100010264100105810b401103710151a0b0d0010264100105810d20110600b0d0010264100105810b50110600b100010264100105810cf0110ab0110270b0d0010264100105810d00110600b0d0010264100105810d301105d0b0f00102641011058105110bf01105d0b0d0010264100105810d401105d0b0d0010264100105810d101105e0b0d0010264100105810c001105e0b0d0010264100105810c801105d0b0d0010264100105810ca01105e0b0d0010264100105810c401105d0bbb0702107f017e230041406a2200240010481041105a4104105941001045210941011045210d410241ae8d084115104f210741031045210320004104360218200041106a21020240200041186a2205280200220641f4e4082802004e0440410121040c010b103b21010340200641f4e4082802004e0d0120012005419e8d084110104a1050200528020021060c000b000b2002200136020420022004360200200028021421022000280210210420002802181057104421050240024010b40110a5010440200310780d010c020b41ce8d0841151039000b2009103521030b10b601200710a70110b501200310a30110d201200910a301410021010240024020040d00200041186a2002105b20002802202203200028021c220120012003491b2106200028021821074100210203402002210120032006460d01200041086a200720031079024002402000280208410146044041012102200028020c103522041010450d022000420037033820041010220841094f0d052000200041386a200810ce01200441002000280200220420002802042208104d1a2004200810cd0122104280025a0d052010a741ff0171220441074f0d01024002400240024002400240200441016b0e06000102030405080b4101210a0c040b4101210b0c030b4101210c0c020b4101210e0c010b4101210f0b200121020c020b41c18408410841a2810841111046000b41c18408410841808008410d1046000b200341016a21030c000b000b200510302103200041013a003e2000200f3a003d2000200e3a003c2000200c3a003b2000200b3a003a2000200a3a0039200020013a0038230041206b2202240010651a200041386a22012d0006210420012d0005210520012d0004210620012d0003210720012d0002210820012d0001210a20012d0000210b200241c68208106341e6820841101064200241186a220c200336020020022802042201200910662001200d1066200141de81084109200b1061200141e781084107200a1061200141ee8108410820081061200141f681084118200710612001418e8208410e200610612001419c8208410a20051061200141a68208411220041061200041186a220141186a200c290300370300200141106a200241106a290300370300200141086a200241086a29030037030020012002290300370300200241206a2400200029031821102000280228210220002802302103200041306a103b3602002000412c6a410e3602002000200336022420002002360220200041b18c083602282000201037031820011067000b41c184084108418d8008410e1046000bb50201077f230041406a22022400102610414100105810b40110a501450440200241286a2104103f10b4011037230041306b22002400200041186a41c68208106341b88208410e1064103b1a10352103200028021c220520031050200041106a200041286a2903003703002000200029032037030820002802182106103b1a41f68208210310352101034020052001105002400340200341f78208460d0120032d00002101200341016a21032001450d000b2001410274220141ac96086a2802002001418896086a280200104721010c010b0b200420053602042004200636020020042000290308370308200441106a200041106a290300370300200041306a240020021065360214200241003602182002200228023836021020022002290328370308200241086a1067000b41b9890841111039000b1200102610414100105810ca0141011086010b2200102610414100105810b40110a501044041b9890841111039000b10ca011088010b860201047f230041106b2202240010261041105a41011059410041858d084119105521032002410136020c02402002410c6a220128020041f4e4082802004e0440410121000c010b200141e48c084121104b21010b20022001360204200220003602002002280204210120022802002100200228020c1057024010c60120034f044010d301107e4100200120001b2200490d0110d4012000200320001b10840110c50110880110c4012003ad10850110c10110a501210010c1012101024020004504402001200110aa0141016aad42ffff03831085010c010b200142011085010b10c001410110a701200241106a24000f0b4198900841d3001039000b41ae8f0841ea001039000b2400102610414100105810c50110880110c40110880110d40110880110c001410010a7010b1a01017f102610414101105841001052210010cf01200010a9010b3c01027f102610414102105841001045210041011045210110c30110a50145044041e38d0841c0001039000b10bc01200010a30110b901200110a3010b2001017f1026104141011058410041c98d0841051055210010d30120001084010bd60101047f230041206b22002400102610414102105810532101410141bf8c08411c105521022000200136020c0240024010b40110a50145044010b40110371028420483500d0110c9012001101041027620026c490d022000200110103602182000410036021420002000410c6a360210034002402000200041106a106c2000280200450d00200028020421032002210103402001450d02106541002003103510b301200141016b21010c000b000b0b200041206a24000f0b41b9890841111039000b41978f0841171039000b41a38e0841f4001039000b3101037f1026104141001058103e103f10312100104341f8e40820001029416741f89508410010181a2000103b4167103d0b1200102610414100105810d101410110a7010b1200102610414100105810d101410010a7010b7a01047f230041306b22002400102610414101105820001053220136021c200041106a10d50120002802142102200028021021032000200110103602282000410036022420002000411c6a3602200340200041086a200041206a106c2000280208044020032002200028020c108d010c010b0b200041306a24000bc60101057f230041406a220024001026104141001058200041186a10d50120002802182104200041306a200028021c220210910120002802342101034020010440200041106a200220011092012000280214200420022001109f0110900121010c01050240200041206a20021091012000280224210103402001450d01200041086a20022001109201200028020c20022001109a0120022001109b0121010c000b000b0b0b200041386a4200370300200042003703302002200041306a109501200041406b24000b850201077f230041406a22002400102610414101105810512105200041186a10d501200028021c2101200028021822062005108e0122040440200041106a200120041092012000280214210220002802102103200041206a2001109101024020030440200041086a2001200310920120012003200028020820021093010c010b200020023602240b02402002044020002001200210920120012002200320002802041093010c010b200020033602280b20012004109a0120012004109f011a20012004109b012000200028022041016b360220200041386a200041286a290300370300200020002903203703302001200041306a109501200620051090010b200041406b24000bb50301067f230041206b220124001048104241011058410041968b084110105521021044103e2100024010d101105f450d00200141086a10d50120012802082000108b010d0041fd8908413b1039000b02400240024002400240024002402002044010b40110a5010d0110b40110371028420483500d0210ca0110a501450d0310c9012002490d04200010bf01107e220410d301107e22034f0d05200320046b22044100200320044f1b2002490d0510c001105f450d0710c10110a501450d060c070b41ca890841331039000b41b9890841111039000b419e8908411b1039000b41f18808412d1039000b41ce870841a3011039000b4185870841c9001039000b200141106a10c10110aa0110c2012001200128021020012802182000108a01200128020021032001280204210410d401107e22002004410020031b22034b0440200020036b22034100200020034f1b20024f0d010b418b860841fa001039000b1030210041722002ad1000200020004172102a0240200010cf0110ab01107641ff017145044003402002450d02200010304101200210b301200241016b21020c000b000b41f2850841191039000b200141206a24000b0d00102610424100105810cb010b0e0010264100105810c701ad10130b0e0010264100105810c601ad10130b6902027f017e230041206b2200240010264101105810512101024010c001105f450d0010c10110a5010d00200041106a10c10110aa0110c201200041086a200028021020002802182001108a01200028020c410020002802081bad21020b20021013200041206a24000b3301027f230041106b2200240010264101105810512101200041086a10d50120002802082001108b01ad1014200041106a24000b3601017f230041206b22002400102641001058200041086a10d501200041106a200028020c10910120003502101013200041206a24000bfd0601067f230041e0006b22012400024002400240024002400240106822041037220210780d00200141286a2200200210351038200010ac012102200010ad012100103b21030340200004402003200141286a10ac011050200041016b21000c010b0b200128022c2001280228470d01200141386a2d0000044041ece408410036020041f0e40841003a00000b20041088012001200210702001280220450d00200141286a2002107020012802482200450d0002402000410e470d00200141286a410e41b18c08410e104e450d00105a410010592001410036024c200141d0006a2104230041106b220024000240027f0240200141cc006a220241c38d084106104b220545200541ebde014672450440200228020041f4e408280200480d01103b0c020b41042105200241c38d084106104c1045220210104104460440200041003602002002410020004104104d1a41feffffff0720022000410441da83084104104e1b21020b200041003602000c020b200241c38d084106104a0b21022000200536020420004101360200410821050b200020056a200236020020042000290300370200200441086a200041086a280200360200200041106a2400200128024c105720012802502001280254210020042003105b105a200128025420012802584b044041b3810841121002000b45044010c801107e210210b401200041feffffff07460d042000101c1a200141d0006a10b1012001280254109801450d052001280258200210a00110cb010c020b1040027f41d89608280200220041ffffffff0746044041d89608416b360200416b102b416b21000b024002400240200010104104760e020102000b41c1800841221002000b41feffffff072102104410300c010b200141d8006a42003703002001420037035020004100200141d0006a4110104d0d062001280250220041fffeff77470d02200041187420004180fe03714108747220004108764180fe0371200041187672722102200128025c220041187420004180fe03714108747220004108764180fe0371200041187672720b220010be01450d0120022000103c0c010b200141d0006a2002200310cc012001280250450d00200141286a2001280254200141d8006a28020010cc0120012802280d050b200141e0006a24000f0b418d8008410e10ae01000b41cd8308410d1002000b41888408410f1002000b41908308411d1002000b41a68b0841361002000b0b0041f89508410e1002000b0bc5160500418080080bc602696e76616c69642076616c7565696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a20455344544e4654437265617465696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747363616e467265657a6563616e5769706563616e506175736563616e5472616e736665724e4654437265617465526f6c6563616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c650041cf82080b01010041e382080b4a02ffff69737375654e6f6e46756e6769626c650343425f434c4f53555245696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67650041cd83080b82134553445420657870656374656445474c442e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e73746f72616765206465636f6465206572726f723a20626164206172726179206c656e6774687661722061726773546f6b656e73206c696d69742070657220616464726573732073686f756c64206265206174206c65617374203121416d6f756e74206f6620746f6b656e7320746f206d696e742073686f756c64206265206174206c65617374203121526f79616c746965732063616e6e6f74206578636565642031303025212e706e672f2e6a736f6e68747470733a2f2f697066732e696f2f697066732f6d657461646174613a3b746167733a2023496e76616c696420616d6f756e74206173207061796d656e74596f752063616e2774206d696e74207375636820616e20616d6f756e74206f6620746f6b656e732e20436865636b20746865206c696d697473206279206f6e6520616464726573732120596f75206861766520746f2066697420696e206c696d6974732077697468207468652077686f6c6520616d6f756e742e596f752063616e2774206d696e74207375636820616e20616d6f756e74206f6620746f6b656e732e20436865636b20746865206c696d697473206279206f6e65206164647265737321416c6c20746f6b656e732068617665206265656e206d696e74656420616c7265616479206f722074686520616d6f756e7420796f752077616e7420746f206d696e7420697320746f206d7563682e20436865636b206c696d6974732028746f74616c6c79206f72207065722064726f70292e20596f75206861766520746f2066697420696e206c696d6974732077697468207468652077686f6c6520616d6f756e742e546865206d696e74696e6720697320706175736564206f7220686176656e277420737461727465642079657421455344544e465443726561746520726f6c65206e6f742073657421546f6b656e206e6f742069737375656421546865206e756d626572206f6620746f6b656e732070726f76696465642063616e2774206265206c657373207468616e20312154686520616c6c6f776c69737420697320656e61626c65642e204f6e6c7920656c696769626c65206164647265737365732063616e206d696e74215468657265206973206e6f7468696e6720746f2073687566666c652e20496e6465786573206e6f7420706f70756c61746564206f7220746865726520617265206e6f20746f6b656e7320746f206d696e74206c6566742161646472657373616d6f756e745f6f665f746f6b656e736e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637469735f6d657461646174615f696e5f7572697370726f76656e616e63655f686173687461677366696c655f657874656e73696f6e726f79616c74696573746f6b656e735f6c696d69745f7065725f6164647265737369737375655f63616c6c6261636b616d6f756e745f6f665f746f6b656e735f7065725f61646472657373616464726573736573746f6b656e735f6c696d69745f7065725f616464726573735f7065725f64726f70616d6f756e745f6f665f746f6b656e735f7065725f64726f70746f6b656e5f70726f7065727469657369735f6e6f745f6e756d6265725f696e5f6e616d65726573756c746c696d6974546f6b656e20616c72656164792069737375656421596f752063616e2774206368616e67652074686520434944732e2054686572652061726520736f6d6520746f6b656e73206d696e74656420616c726561647921416c6c20746f6b656e732068617665206265656e206d696e74656420616c7265616479206f722074686520616d6f756e7420796f752077616e7420746f206d696e7420697320746f6f206d7563682e20436865636b206c696d697473212028746f74616c6c79206f72207065722064726f7029214e465443726561746520726f6c65206e6f74207365742154686520746f6b656e73206c696d6974207065722061646472657373207065722064726f702073686f756c6420626520736d616c6c6572206f7220657175616c20746f2074686520746f74616c206c696d6974206f6620746f6b656e7320706572206164647265737321546865206e756d626572206f6620746f6b656e73207065722064726f702063616e277420626520686967686572207468616e2074686520746f74616c20616d6f756e74206f6620746f6b656e73206c65667421696e707574206f7574206f662072616e67656e6674546f6b656e49646e66745072696365696d61676542617365436964697344726f704163746976656e6674546f6b656e4e616d6570726f76656e616e6365486173686d6574616461426173654369646e657874496e646578546f4d696e7469734d65746164617461496e55726973746f6b656e734c656674546f4d696e746973416c6c6f776c697374456e61626c65646d696e746564496e6465786573546f74616c636f6c6c656374696f6e546f6b656e4e616d656e6f4e756d626572496e4e66744e616d65616d6f756e744f66546f6b656e73546f74616c6d696e746564496e6465786573427944726f706d696e74656450657241646472657373546f74616c616d6f756e744f66546f6b656e7350657244726f706d696e7465645065724164647265737350657244726f70746f6b656e734c696d697450657241646472657373546f74616c746f6b656e734c696d69745065724164647265737350657244726f70706175736564616c6c6f776c6973746c61737444726f70456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e747366616c736574727565696e646578206f7574206f662072616e676545534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e465441646455524945534454526f6c654e465455706461746541747472696275746573455344545472616e73666572526f6c6570616e6963206f63637572726564000000000000110000001100000011000000160000000f000000110000001b00000010000000f80a0200640a0200750a0200860a0200970a0200ad0a0200bc0a0200cd0a0200e80a020041d096080b0c9cffffffffffff7fffffff7f" } diff --git a/output/elven-nft-minter.wasm b/output/elven-nft-minter.wasm index eb26855677d9e47017237a4468797af29d829c19..3e4e2102dd6aa7202677015167a9e8f9b9f4c993 100755 GIT binary patch literal 19005 zcmb`P3!Ge6ec$i7_s;I@&OVMFHfu?gJA(+T)RJXmOF{y&ccqmqEK9v&3ClJH^DyC=LI{L{+Z2-$pd}$`;-r{Iu^~Vcnh;9DBNRdclmba()bH<{ zJCBtGl+P#9XYW1tJpbqa{{PRt6O@~aCI|v^m$~w`Ah<0s=WYwnoeOR==O`HpJW-0y zsWRruO%K$$C)dlIrQ6xyw%oaMXI+!wA)wZrrM-_jKZ17txp~gIsnr~7j9=$$`1*mZ zQKfczWOW|mu(V93wvJMJzoEL0jntU8+wKC&D58kJ_#SFg#c58Ym?G*+|>WME94@?ect zn@1MQjn?jZt<@;cw1UV1>-W5`($ZqjEiWur{KV~D(2_PzEH74St@idja7TKO;~-pf zqS89Jyr>PeH`nx7vKc7Mb)Zr^(K_kZzN)kKtu>*#GTT|nVSCh1*sjbbyRx|mq>ycI zwN`DOY!3~FwVkyq8wF!!);G0D<%f9)#xm>y*r7)CL=|cuz2nAm^Q6bYV8$iP;`@(g z8-Z_n=z3LFySGtaoOFEE0m?DN+N^zded&yb9a*T(RDuDA{`Q2edIQ!tP%mdpv}R?) z5!x#r|4+zTj@B=?RvXnocuTo9TVM2phTGh8vV7eQ+kD+1=-pRt9;h5|1tS6`<9{*t zsGiqngEHPcRNGT&I`*mD(F&}3jLs}n%C%c6t>s2-Pq|eN0ynNr1kl>XM4O1gV9!ds z7neLJBQqx}GxG=Qhs$Riqq%9;dhB09X2)u)09|}`pgvPxxTU^;gt>Xg{1Dcix}#NT zK+ehXLb(REz4-d(qkF2Sy@YS*(%%WC=Db7>+9YRAPjW}nHhHqz9*VY+))oOLQY)mp zEy-!~Ol?N11^v;d%p)c;s}Pqk3d7Z=uiqHdW^AJVT+pA-=LZJzAw4L@am;SwIEwrG zqJ9&`CJy_;zPK;!9|)s0xiIR>hkgCgAf5WcLbx{0_2>Hfa=DP&fv`Wv0$~(|xiGH+ ze?0LVvRWUjM*QiAONr{EN}$|3Ck7kqM%{E2DEJJ%2u5I2WXE{;IpZom>Aa z`!@A0Ru=1xGpvdjw}L-4!_f5L@z&A$e5JO3Huy7hB^A5tXuz3PwO(`e2g{3<;Pb{Q zhODcr`X8p?M;~rTwEo>HII|}n?y;WWazF@}a zaC5cRs?1*6_Lt^KKW;Ex_cZED!57WyYBOC}sNcR&ZMLRrviM6S3ft<)x*CGr?aOG_zK%)=nHQFE<(V*Jl07PKS=~UT!o{!EU85o556o9NZ9Bz)BjEoq)?&fsfisM$jCx1ayU^fSQC^mQ|^Tx&o4FH@k1^m`f(`^y~{O*{+$_x6kw!- zpy2O~ovk)k)_vQoTB+k9I->(f)tU;Pmt?8gd#pAu@&O>64Z6()2M<8-;_9&Oc(VH0GSWwqzy)8zhGR zf#q7bit6;!Z_Mj&JPcAZUkbK`K@t?U1mOhT!kgoXBuwI)hmCz&P|#lzP+{h`g)t?Q zL~{%%^ab{xOi&o{%LJ2#WrD(}9;1?0i`TK-AeD)++wG3RFhu|g?D}
S2Tu*EP5 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, - nft_token_name: OptionalValue, - ) { - let issue_cost = self.call_value().egld_value(); - require!(self.nft_token_id().is_empty(), "Token already issued!"); - - let nfts_name = match nft_token_name { - OptionalValue::Some(name) => name, - OptionalValue::None => ManagedBuffer::new_from_bytes(b""), - }; - - self.no_number_in_nft_name() - .set(is_not_number_in_name.into_option().unwrap_or_default()); - - if nfts_name.len() != 0 { - self.nft_token_name().set(&nfts_name); - } - - self.collection_token_name().set(&collection_token_name); - - self.send() - .esdt_system_sc_proxy() - .issue_non_fungible( - issue_cost.clone_value(), - &collection_token_name, - &collection_token_ticker, - NonFungibleTokenProperties { - can_freeze: false, - can_wipe: false, - can_pause: false, - can_transfer_create_role: false, - can_change_owner: false, - can_upgrade: false, - can_add_special_roles: true, - }, - ) - .async_call() - .with_callback(self.callbacks().issue_callback()) - .call_and_exit(); - } - - #[only_owner] - #[endpoint(setLocalRoles)] - fn set_local_roles(&self) { - require!(!self.nft_token_id().is_empty(), "Token not issued!"); - - self.send() - .esdt_system_sc_proxy() - .set_special_roles( - &self.blockchain().get_sc_address(), - &self.nft_token_id().get(), - (&[EsdtLocalRole::NftCreate][..]).into_iter().cloned(), - ) - .async_call() - .call_and_exit(); - } - - #[only_owner] - #[endpoint(pauseMinting)] - fn pause_minting(&self) { - let paused = true; - self.paused().set(&paused); - } - - #[only_owner] - #[endpoint(startMinting)] - fn start_minting(&self) { - require!(!self.nft_token_id().is_empty(), "Token not issued!"); - - self.paused().clear(); - } - - #[only_owner] - #[endpoint(setDrop)] - fn set_drop( - &self, - amount_of_tokens_per_drop: u32, - tokens_limit_per_address_per_drop: OptionalValue, - ) { - let total_tokens_left = self.total_tokens_left(); - - require!( - amount_of_tokens_per_drop <= total_tokens_left, - "The number of tokens per drop can't be higher than the total amount of tokens left!" - ); - - let tokens_limit = tokens_limit_per_address_per_drop - .into_option() - .unwrap_or_default(); - let tokens_limit_total = self.tokens_limit_per_address_total().get(); - - require!(tokens_limit <= tokens_limit_total, "The tokens limit per address per drop should be smaller or equal to the total limit of tokens per address!"); - - if tokens_limit > 0 { - self.tokens_limit_per_address_per_drop().set(tokens_limit); - } else { - self.tokens_limit_per_address_per_drop() - .set(amount_of_tokens_per_drop); - } - - self.minted_indexes_by_drop().clear(); - self.amount_of_tokens_per_drop() - .set(&amount_of_tokens_per_drop); - - if self.last_drop().is_empty() { - self.last_drop().set(1); - } else { - self.last_drop().update(|sum| *sum += 1); - } - - self.is_drop_active().set(true); - } - - #[only_owner] - #[endpoint(unsetDrop)] - fn unset_drop(&self) { - self.minted_indexes_by_drop().clear(); - self.amount_of_tokens_per_drop().clear(); - self.tokens_limit_per_address_per_drop().clear(); - self.is_drop_active().set(false); - } - - // The owner can change the price, for example, a new price for the next nft drop. - #[only_owner] - #[endpoint(setNewPrice)] - fn set_new_price(&self, price: BigUint) { - self.selling_price().set(&price); - } - - // The owner can change CIDs only before any NFT is minted! - #[only_owner] - #[endpoint(changeBaseCids)] - fn change_base_cids(&self, image_base_cid: ManagedBuffer, metadata_base_cid: ManagedBuffer) { - require!( - self.minted_indexes_total().is_empty(), - "You can't change the CIDs. There are some tokens minted already!" - ); - - self.image_base_cid().set(&image_base_cid); - self.metadata_base_cid().set(&metadata_base_cid); - } - - #[only_owner] - #[endpoint(setNewTokensLimitPerAddress)] - fn set_new_tokens_limit_per_address(&self, limit: u32) { - self.tokens_limit_per_address_total().set(limit); - } - - // As an owner of the smart contract, you can send randomly minted NFTs to chosen addresses. - #[only_owner] - #[endpoint(giveaway)] - fn giveaway(&self, addresses: ManagedVec, amount_of_tokens_per_address: u32) { - require!(!self.nft_token_id().is_empty(), "Token not issued!"); - - let token = self.nft_token_id().get(); - let roles = self.blockchain().get_esdt_local_roles(&token); - - require!( - roles.has_role(&EsdtLocalRole::NftCreate), - "NFTCreate role not set!" - ); - - require!( - self.get_current_left_tokens_amount() >= amount_of_tokens_per_address * addresses.len() as u32, - "All tokens have been minted already or the amount you want to mint is too much. Check limits! (totally or per drop)!" - ); - - for address in addresses.into_iter() { - for _ in 0..amount_of_tokens_per_address { - self.mint_single_nft(BigUint::zero(), OptionalValue::Some(address.clone())); - } - } - } - - // As an owner, claim Smart Contract balance - temporary solution for royalities, the SC has to be payable to be able to get royalties - #[only_owner] - #[endpoint(claimScFunds)] - fn claim_sc_funds(&self) { - self.send().direct_egld( - &self.blockchain().get_caller(), - &self - .blockchain() - .get_sc_balance(&EgldOrEsdtTokenIdentifier::egld(), 0), - ); - } - - #[only_owner] - #[endpoint(enableAllowlist)] - fn enable_allowlist(&self) { - self.is_allowlist_enabled().set(true); - } - - #[only_owner] - #[endpoint(disableAllowlist)] - fn disable_allowlist(&self) { - self.is_allowlist_enabled().set(false); - } - - #[only_owner] - #[endpoint(populateAllowlist)] - fn populate_allowlist(&self, addresses: ManagedVec) { - self.allowlist().extend(&addresses); - } - - #[only_owner] - #[endpoint(clearAllowlist)] - fn clear_allowlist(&self) { - self.allowlist().clear(); - } - - #[only_owner] - #[endpoint(removeAllowlistAddress)] - fn remove_allowlist_address(&self, address: ManagedAddress) { - self.allowlist().remove(&address); - } - - // Main mint function - requires the payment sum for all tokens to mint. - #[only_user_account] - #[payable("EGLD")] - #[endpoint(mint)] - fn mint(&self, amount_of_tokens: u32) { - let payment_amount = self.call_value().egld_value(); - let caller = self.blockchain().get_caller(); - - let is_allowlist_enabled = self.is_allowlist_enabled().get(); - if is_allowlist_enabled { - require!( - self.allowlist().contains(&caller), - "The allowlist is enabled. Only eligible addresses can mint!" - ); - } - - require!( - amount_of_tokens > 0, - "The number of tokens provided can't be less than 1!" - ); - require!(!self.nft_token_id().is_empty(), "Token not issued!"); - - let token = self.nft_token_id().get(); - let roles = self.blockchain().get_esdt_local_roles(&token); - - require!( - roles.has_role(&EsdtLocalRole::NftCreate), - "ESDTNFTCreate role not set!" - ); - require!( - self.paused().is_empty(), - "The minting is paused or haven't started yet!" - ); - - require!( - self.get_current_left_tokens_amount() >= amount_of_tokens, - "All tokens have been minted already or the amount you want to mint is to much. Check limits (totally or per drop). You have to fit in limits with the whole amount." - ); - - let minted_per_address = self.minted_per_address_total(&caller).get(); - let tokens_limit_per_address = self.tokens_limit_per_address_total().get(); - - let tokens_left_to_mint: u32; - - if tokens_limit_per_address < minted_per_address { - tokens_left_to_mint = 0; - } else { - tokens_left_to_mint = tokens_limit_per_address - minted_per_address; - } - - require!( - tokens_left_to_mint > 0 && tokens_left_to_mint >= amount_of_tokens, - "You can't mint such an amount of tokens. Check the limits by one address!" - ); - - // Check if there is a drop set and the limits per address for the drop are set - if self.is_drop_active().get() && !self.last_drop().is_empty() { - let last_drop_id = self.last_drop().get(); - let minted_per_address_per_drop = self - .minted_per_address_per_drop(last_drop_id) - .get(&caller) - .unwrap_or_default(); - let tokens_limit_per_address_per_drop = self.tokens_limit_per_address_per_drop().get(); - - let tokens_left_to_mint_per_drop; - - if tokens_limit_per_address_per_drop < minted_per_address_per_drop { - tokens_left_to_mint_per_drop = 0; - } else { - tokens_left_to_mint_per_drop = - tokens_limit_per_address_per_drop - minted_per_address_per_drop; - } - - require!( - tokens_left_to_mint_per_drop > 0 && tokens_left_to_mint_per_drop >= amount_of_tokens, - "You can't mint such an amount of tokens. Check the limits by one address! You have to fit in limits with the whole amount." - ); - } - - let single_payment_amount = payment_amount.clone_value() / amount_of_tokens; - - let price_tag = self.selling_price().get(); - require!( - single_payment_amount == price_tag, - "Invalid amount as payment" - ); - - for _ in 0..amount_of_tokens { - self.mint_single_nft(single_payment_amount.clone(), OptionalValue::None); - } - } - - // Private single token mint function. It is also used for the giveaway. - fn mint_single_nft( - &self, - payment_amount: BigUint, - giveaway_address: OptionalValue, - ) { - let next_index_to_mint_tuple = self.next_index_to_mint().get(); - - let amount = &BigUint::from(NFT_AMOUNT); - - let token = self.nft_token_id().get(); - let token_name = self.build_token_name_buffer(next_index_to_mint_tuple.1); - - let royalties = self.royalties().get(); - - let attributes = self.build_attributes_buffer(next_index_to_mint_tuple.1); - - let hash_buffer = self.crypto().sha256(&attributes); - - let attributes_hash = hash_buffer.as_managed_buffer(); - - let uris = self.build_uris_vec(next_index_to_mint_tuple.1); - - let nonce = self.send().esdt_nft_create( - &token, - &amount, - &token_name, - &royalties, - &attributes_hash, - &attributes, - &uris, - ); - - let giveaway_address = giveaway_address - .into_option() - .unwrap_or_else(|| ManagedAddress::zero()); - - let caller = self.blockchain().get_caller(); - - let receiver; - - if giveaway_address.is_zero() { - receiver = &caller; - } else { - receiver = &giveaway_address; - } - - self.send() - .direct_esdt(&receiver, &token, nonce, &BigUint::from(NFT_AMOUNT)); - - if payment_amount > 0 { - self.minted_per_address_total(&caller) - .update(|sum| *sum += 1); - - if self.is_drop_active().get() && !self.last_drop().is_empty() { - let last_drop_id = self.last_drop().get(); - let existing_address_value = self - .minted_per_address_per_drop(last_drop_id) - .get(&caller) - .unwrap_or_default(); - if existing_address_value > 0 { - let next_value = existing_address_value + 1; - self.minted_per_address_per_drop(last_drop_id) - .insert(caller, next_value); - } else { - self.minted_per_address_per_drop(last_drop_id) - .insert(caller, 1); - } - } - - let payment_nonce: u64 = 0; - let payment_token = &EgldOrEsdtTokenIdentifier::egld(); - - let owner = self.blockchain().get_owner_address(); - self.send() - .direct(&owner, &payment_token, payment_nonce, &payment_amount); - } - - // Choose next index to mint here - self.handle_next_index_setup(next_index_to_mint_tuple); - } - - #[only_user_account] - #[endpoint(shuffle)] - fn shuffle(&self) { - require!(!self.nft_token_id().is_empty(), "Token not issued!"); - let uid_mapper = self.tokens_left_to_mint(); - require!( - !uid_mapper.is_empty(), - "There is nothing to shuffle. Indexes not populated or there are no tokens to mint left!" - ); - - self.do_shuffle(); - } - - fn do_shuffle(&self) { - let uid = self.tokens_left_to_mint(); - - let uid_len = uid.len(); - let mut rand_source = RandomnessSource::new(); - - let index = rand_source.next_usize_in_range(1, uid_len + 1); - - let choosen_item = uid.get(index); - - self.next_index_to_mint().set((index, choosen_item)); - } - - #[callback] - fn issue_callback( - &self, - #[call_result] result: ManagedAsyncCallResult, - ) { - match result { - ManagedAsyncCallResult::Ok(token_id) => { - let tokens_number = self.amount_of_tokens_total().get(); - self.nft_token_id().set(&token_id.unwrap_esdt()); - self.tokens_left_to_mint() - .set_initial_len(tokens_number.try_into().unwrap()); - self.shuffle(); - } - ManagedAsyncCallResult::Err(_) => { - let caller = self.blockchain().get_owner_address(); - let returned = self.call_value().egld_or_single_esdt(); - if returned.token_identifier.is_egld() && returned.amount > 0 { - self.send() - .direct(&caller, &returned.token_identifier, 0, &returned.amount); - } - } - } - } - - fn handle_next_index_setup(&self, minted_index_tuple: (usize, usize)) { - let is_minted_indexes_total_empty = self.minted_indexes_total().is_empty(); - if is_minted_indexes_total_empty { - self.minted_indexes_total().set(1); - } else { - self.minted_indexes_total().update(|sum| *sum += 1); - } - - let drop_amount = self.amount_of_tokens_per_drop().get(); - if drop_amount > 0 { - let is_minted_indexes_by_drop_empty = self.minted_indexes_by_drop().is_empty(); - if is_minted_indexes_by_drop_empty { - self.minted_indexes_by_drop().set(1); - } else { - self.minted_indexes_by_drop().update(|sum| *sum += 1); - } - } - - let total_tokens_left = self.total_tokens_left(); - - if total_tokens_left > 0 { - let mut uid = self.tokens_left_to_mint(); - let _ = uid.swap_remove(minted_index_tuple.0); - self.do_shuffle(); - } - } - - fn build_uris_vec(&self, index_to_mint: usize) -> ManagedVec { - let is_metadata_in_uris = self.is_metadata_in_uris().get(); - - let mut uris = ManagedVec::new(); - - let image_cid = self.image_base_cid().get(); - let metadata_cid = self.metadata_base_cid().get(); - let uri_slash = ManagedBuffer::new_from_bytes(URI_SLASH); - let metadata_file_extension = ManagedBuffer::new_from_bytes(METADATA_FILE_EXTENSION); - let image_file_extension = self.file_extension().get(); - let file_index = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); - - let mut img_ipfs_gateway_uri = ManagedBuffer::new_from_bytes(IPFS_GATEWAY_HOST); - img_ipfs_gateway_uri.append(&image_cid); - img_ipfs_gateway_uri.append(&uri_slash); - img_ipfs_gateway_uri.append(&file_index); - img_ipfs_gateway_uri.append(&image_file_extension); - - uris.push(img_ipfs_gateway_uri); - - if is_metadata_in_uris { - let mut ipfs_metadata_uri = ManagedBuffer::new_from_bytes(IPFS_GATEWAY_HOST); - ipfs_metadata_uri.append(&metadata_cid); - ipfs_metadata_uri.append(&uri_slash); - ipfs_metadata_uri.append(&file_index); - ipfs_metadata_uri.append(&metadata_file_extension); - - uris.push(ipfs_metadata_uri); - } - - uris - } - - // This can be probably optimized with attributes struct, had problems with decoding on the api side - fn build_attributes_buffer(&self, index_to_mint: usize) -> ManagedBuffer { - let metadata_key_name = ManagedBuffer::new_from_bytes(METADATA_KEY_NAME); - let metadata_index_file = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); - let metadata_file_extension = ManagedBuffer::new_from_bytes(METADATA_FILE_EXTENSION); - let metadata_cid = self.metadata_base_cid().get(); - let separator = ManagedBuffer::new_from_bytes(ATTR_SEPARATOR); - let metadata_slash = ManagedBuffer::new_from_bytes(URI_SLASH); - let tags_key_name = ManagedBuffer::new_from_bytes(TAGS_KEY_NAME); - - let mut attributes = ManagedBuffer::new(); - attributes.append(&tags_key_name); - attributes.append(&self.tags().get()); - attributes.append(&separator); - attributes.append(&metadata_key_name); - attributes.append(&metadata_cid); - attributes.append(&metadata_slash); - attributes.append(&metadata_index_file); - attributes.append(&metadata_file_extension); - - attributes - } - - fn build_token_name_buffer(&self, index_to_mint: usize) -> ManagedBuffer { - let mut full_token_name = ManagedBuffer::new(); - - let token_name_from_storage; - if !self.nft_token_name().is_empty() { - token_name_from_storage = self.nft_token_name().get(); - } else { - token_name_from_storage = self.collection_token_name().get(); - } - - let no_number_in_name = self.no_number_in_nft_name().get(); - - full_token_name.append(&token_name_from_storage); - - if !no_number_in_name { - let token_index = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); - let hash_and_space_sign = ManagedBuffer::new_from_bytes(" #".as_bytes()); - - full_token_name.append(&hash_and_space_sign); - full_token_name.append(&token_index); - } - - full_token_name - } - - fn decimal_to_ascii(&self, mut number: u32) -> ManagedBuffer { - const MAX_NUMBER_CHARACTERS: usize = 10; - const ZERO_ASCII: u8 = b'0'; - - let mut as_ascii = [0u8; MAX_NUMBER_CHARACTERS]; - let mut nr_chars = 0; - - loop { - unsafe { - let reminder: u8 = (number % 10).try_into().unwrap_unchecked(); - number /= 10; - - as_ascii[nr_chars] = ZERO_ASCII + reminder; - nr_chars += 1; - } - - if number == 0 { - break; - } - } - - let slice = &mut as_ascii[..nr_chars]; - slice.reverse(); - - ManagedBuffer::new_from_bytes(slice) - } - - fn get_current_left_tokens_amount(&self) -> u32 { - let drop_amount = self.amount_of_tokens_per_drop().get(); - let tokens_left; - let paused = true; - if drop_amount > 0 { - tokens_left = self.drop_tokens_left(); - } else { - tokens_left = self.total_tokens_left(); - } - - if tokens_left == 0 { - self.paused().set(&paused); - } - - tokens_left - } - - #[view(getDropTokensLeft)] - fn drop_tokens_left(&self) -> u32 { - let minted_tokens = self.minted_indexes_by_drop().get(); - let amount_of_tokens = self.amount_of_tokens_per_drop().get(); - let left_tokens: u32 = amount_of_tokens - minted_tokens as u32; - - left_tokens - } - - #[view(getTotalTokensLeft)] - fn total_tokens_left(&self) -> u32 { - let minted_tokens = self.minted_indexes_total().get(); - let amount_of_tokens = self.amount_of_tokens_total().get(); - let left_tokens: u32 = amount_of_tokens - minted_tokens as u32; - - left_tokens - } - - #[view(getMintedPerAddressPerDrop)] - fn get_minted_per_address_per_drop(&self, address: ManagedAddress) -> u32 { - let minted_per_address_per_drop: u32; - if self.is_drop_active().get() && !self.last_drop().is_empty() { - let last_drop_id = self.last_drop().get(); - minted_per_address_per_drop = self - .minted_per_address_per_drop(last_drop_id) - .get(&address) - .unwrap_or_default(); - } else { - minted_per_address_per_drop = 0; - } - - minted_per_address_per_drop - } - - #[view(getAllowlistAddressCheck)] - fn allowlist_address_check(&self, address: ManagedAddress) -> bool { - self.allowlist().contains(&address) - } - - #[view(getAllowlistSize)] - fn allowlist_size(&self) -> usize { - self.allowlist().len() - } - - #[view(getNftTokenId)] - #[storage_mapper("nftTokenId")] - fn nft_token_id(&self) -> SingleValueMapper; - - #[view(getCollectionTokenName)] - #[storage_mapper("collectionTokenName")] - fn collection_token_name(&self) -> SingleValueMapper; - - #[view(getNftTokenName)] - #[storage_mapper("nftTokenName")] - fn nft_token_name(&self) -> SingleValueMapper; - - #[view(getNftPrice)] - #[storage_mapper("nftPrice")] - fn selling_price(&self) -> SingleValueMapper; - - #[view(getProvenanceHash)] - #[storage_mapper("provenanceHash")] - fn provenance_hash(&self) -> SingleValueMapper; - - #[view(getTokensLimitPerAddressTotal)] - #[storage_mapper("tokensLimitPerAddressTotal")] - fn tokens_limit_per_address_total(&self) -> SingleValueMapper; - - #[view(getMintedPerAddressTotal)] - #[storage_mapper("mintedPerAddressTotal")] - fn minted_per_address_total(&self, address: &ManagedAddress) -> SingleValueMapper; - - #[view(getTokensLimitPerAddressPerDrop)] - #[storage_mapper("tokensLimitPerAddressPerDrop")] - fn tokens_limit_per_address_per_drop(&self) -> SingleValueMapper; - - #[view(isAllowlistEnabled)] - #[storage_mapper("isAllowlistEnabled")] - fn is_allowlist_enabled(&self) -> SingleValueMapper; - - #[view(isDropActive)] - #[storage_mapper("isDropActive")] - fn is_drop_active(&self) -> SingleValueMapper; - - #[view(getTotalSupply)] - #[storage_mapper("amountOfTokensTotal")] - fn amount_of_tokens_total(&self) -> SingleValueMapper; - - #[view(isMintingPaused)] - #[storage_mapper("paused")] - fn paused(&self) -> SingleValueMapper; - - #[view(getTotalSupplyOfCurrentDrop)] - #[storage_mapper("amountOfTokensPerDrop")] - fn amount_of_tokens_per_drop(&self) -> SingleValueMapper; - - #[storage_mapper("lastDrop")] - fn last_drop(&self) -> SingleValueMapper; - - #[storage_mapper("allowlist")] - fn allowlist(&self) -> SetMapper; - - #[storage_mapper("mintedPerAddressPerDrop")] - fn minted_per_address_per_drop(&self, id: u16) -> MapMapper; - - #[storage_mapper("imageBaseCid")] - fn image_base_cid(&self) -> SingleValueMapper; - - #[storage_mapper("metadaBaseCid")] - fn metadata_base_cid(&self) -> SingleValueMapper; - - #[storage_mapper("file_extension")] - fn file_extension(&self) -> SingleValueMapper; - - #[storage_mapper("mintedIndexesTotal")] - fn minted_indexes_total(&self) -> SingleValueMapper; - - #[storage_mapper("mintedIndexesByDrop")] - fn minted_indexes_by_drop(&self) -> SingleValueMapper; - - #[storage_mapper("royalties")] - fn royalties(&self) -> SingleValueMapper; - - #[storage_mapper("tags")] - fn tags(&self) -> SingleValueMapper; - - #[storage_mapper("nextIndexToMint")] - fn next_index_to_mint(&self) -> SingleValueMapper<(usize, usize)>; - - #[storage_mapper("tokensLeftToMint")] - fn tokens_left_to_mint(&self) -> UniqueIdMapper; - - #[storage_mapper("isMetadataInUris")] - fn is_metadata_in_uris(&self) -> SingleValueMapper; - - #[storage_mapper("noNumberInNftName")] - fn no_number_in_nft_name(&self) -> SingleValueMapper; } diff --git a/src/operations.rs b/src/operations.rs new file mode 100644 index 0000000..fbc8e9d --- /dev/null +++ b/src/operations.rs @@ -0,0 +1,408 @@ +const NFT_AMOUNT: u32 = 1; +// This is the most popular gateway, but it doesn't matter the most important is IPFS CID +const IPFS_GATEWAY_HOST: &[u8] = "https://ipfs.io/ipfs/".as_bytes(); +const METADATA_KEY_NAME: &[u8] = "metadata:".as_bytes(); +const METADATA_FILE_EXTENSION: &[u8] = ".json".as_bytes(); +const ATTR_SEPARATOR: &[u8] = ";".as_bytes(); +const URI_SLASH: &[u8] = "/".as_bytes(); +const TAGS_KEY_NAME: &[u8] = "tags:".as_bytes(); + +multiversx_sc::imports!(); +multiversx_sc::derive_imports!(); + +use crate::storage; + +#[multiversx_sc::module] + +pub trait Operations: storage::Storage { + // Main mint function - requires the payment sum for all tokens to mint. + #[only_user_account] + #[payable("EGLD")] + #[endpoint(mint)] + fn mint(&self, amount_of_tokens: u32) { + let payment_amount = self.call_value().egld_value(); + let caller = self.blockchain().get_caller(); + + let is_allowlist_enabled = self.is_allowlist_enabled().get(); + if is_allowlist_enabled { + require!( + self.allowlist().contains(&caller), + "The allowlist is enabled. Only eligible addresses can mint!" + ); + } + + require!( + amount_of_tokens > 0, + "The number of tokens provided can't be less than 1!" + ); + require!(!self.nft_token_id().is_empty(), "Token not issued!"); + + let token = self.nft_token_id().get(); + let roles = self.blockchain().get_esdt_local_roles(&token); + + require!( + roles.has_role(&EsdtLocalRole::NftCreate), + "ESDTNFTCreate role not set!" + ); + require!( + self.paused().is_empty(), + "The minting is paused or haven't started yet!" + ); + + require!( + self.get_current_left_tokens_amount() >= amount_of_tokens, + "All tokens have been minted already or the amount you want to mint is to much. Check limits (totally or per drop). You have to fit in limits with the whole amount." + ); + + let minted_per_address = self.minted_per_address_total(&caller).get(); + let tokens_limit_per_address = self.tokens_limit_per_address_total().get(); + + let tokens_left_to_mint: u32; + + if tokens_limit_per_address < minted_per_address { + tokens_left_to_mint = 0; + } else { + tokens_left_to_mint = tokens_limit_per_address - minted_per_address; + } + + require!( + tokens_left_to_mint > 0 && tokens_left_to_mint >= amount_of_tokens, + "You can't mint such an amount of tokens. Check the limits by one address!" + ); + + // Check if there is a drop set and the limits per address for the drop are set + if self.is_drop_active().get() && !self.last_drop().is_empty() { + let last_drop_id = self.last_drop().get(); + let minted_per_address_per_drop = self + .minted_per_address_per_drop(last_drop_id) + .get(&caller) + .unwrap_or_default(); + let tokens_limit_per_address_per_drop = self.tokens_limit_per_address_per_drop().get(); + + let tokens_left_to_mint_per_drop; + + if tokens_limit_per_address_per_drop < minted_per_address_per_drop { + tokens_left_to_mint_per_drop = 0; + } else { + tokens_left_to_mint_per_drop = + tokens_limit_per_address_per_drop - minted_per_address_per_drop; + } + + require!( + tokens_left_to_mint_per_drop > 0 && tokens_left_to_mint_per_drop >= amount_of_tokens, + "You can't mint such an amount of tokens. Check the limits by one address! You have to fit in limits with the whole amount." + ); + } + + let single_payment_amount = payment_amount.clone_value() / amount_of_tokens; + + let price_tag = self.selling_price().get(); + require!( + single_payment_amount == price_tag, + "Invalid amount as payment" + ); + + for _ in 0..amount_of_tokens { + self.mint_single_nft(single_payment_amount.clone(), OptionalValue::None); + } + } + + // Private single token mint function. It is also used for the giveaway. + fn mint_single_nft( + &self, + payment_amount: BigUint, + giveaway_address: OptionalValue, + ) { + let next_index_to_mint_tuple = self.next_index_to_mint().get(); + + let amount = &BigUint::from(NFT_AMOUNT); + + let token = self.nft_token_id().get(); + let token_name = self.build_token_name_buffer(next_index_to_mint_tuple.1); + + let royalties = self.royalties().get(); + + let attributes = self.build_attributes_buffer(next_index_to_mint_tuple.1); + + let hash_buffer = self.crypto().sha256(&attributes); + + let attributes_hash = hash_buffer.as_managed_buffer(); + + let uris = self.build_uris_vec(next_index_to_mint_tuple.1); + + let nonce = self.send().esdt_nft_create( + &token, + &amount, + &token_name, + &royalties, + &attributes_hash, + &attributes, + &uris, + ); + + let giveaway_address = giveaway_address + .into_option() + .unwrap_or_else(|| ManagedAddress::zero()); + + let caller = self.blockchain().get_caller(); + + let receiver; + + if giveaway_address.is_zero() { + receiver = &caller; + } else { + receiver = &giveaway_address; + } + + self.send() + .direct_esdt(&receiver, &token, nonce, &BigUint::from(NFT_AMOUNT)); + + if payment_amount > 0 { + self.minted_per_address_total(&caller) + .update(|sum| *sum += 1); + + if self.is_drop_active().get() && !self.last_drop().is_empty() { + let last_drop_id = self.last_drop().get(); + let existing_address_value = self + .minted_per_address_per_drop(last_drop_id) + .get(&caller) + .unwrap_or_default(); + if existing_address_value > 0 { + let next_value = existing_address_value + 1; + self.minted_per_address_per_drop(last_drop_id) + .insert(caller, next_value); + } else { + self.minted_per_address_per_drop(last_drop_id) + .insert(caller, 1); + } + } + + let payment_nonce: u64 = 0; + let payment_token = &EgldOrEsdtTokenIdentifier::egld(); + + let owner = self.blockchain().get_owner_address(); + self.send() + .direct(&owner, &payment_token, payment_nonce, &payment_amount); + } + + // Choose next index to mint here + self.handle_next_index_setup(next_index_to_mint_tuple); + } + + #[only_user_account] + #[endpoint(shuffle)] + fn shuffle(&self) { + require!(!self.nft_token_id().is_empty(), "Token not issued!"); + let uid_mapper = self.tokens_left_to_mint(); + require!( + !uid_mapper.is_empty(), + "There is nothing to shuffle. Indexes not populated or there are no tokens to mint left!" + ); + + self.do_shuffle(); + } + + fn do_shuffle(&self) { + let uid = self.tokens_left_to_mint(); + + let uid_len = uid.len(); + let mut rand_source = RandomnessSource::new(); + + let index = rand_source.next_usize_in_range(1, uid_len + 1); + + let choosen_item = uid.get(index); + + self.next_index_to_mint().set((index, choosen_item)); + } + + fn handle_next_index_setup(&self, minted_index_tuple: (usize, usize)) { + let is_minted_indexes_total_empty = self.minted_indexes_total().is_empty(); + if is_minted_indexes_total_empty { + self.minted_indexes_total().set(1); + } else { + self.minted_indexes_total().update(|sum| *sum += 1); + } + + let drop_amount = self.amount_of_tokens_per_drop().get(); + if drop_amount > 0 { + let is_minted_indexes_by_drop_empty = self.minted_indexes_by_drop().is_empty(); + if is_minted_indexes_by_drop_empty { + self.minted_indexes_by_drop().set(1); + } else { + self.minted_indexes_by_drop().update(|sum| *sum += 1); + } + } + + let total_tokens_left = self.total_tokens_left(); + + if total_tokens_left > 0 { + let mut uid = self.tokens_left_to_mint(); + let _ = uid.swap_remove(minted_index_tuple.0); + self.do_shuffle(); + } + } + + fn build_uris_vec(&self, index_to_mint: usize) -> ManagedVec { + let is_metadata_in_uris = self.is_metadata_in_uris().get(); + + let mut uris = ManagedVec::new(); + + let image_cid = self.image_base_cid().get(); + let metadata_cid = self.metadata_base_cid().get(); + let uri_slash = ManagedBuffer::new_from_bytes(URI_SLASH); + let metadata_file_extension = ManagedBuffer::new_from_bytes(METADATA_FILE_EXTENSION); + let image_file_extension = self.file_extension().get(); + let file_index = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); + + let mut img_ipfs_gateway_uri = ManagedBuffer::new_from_bytes(IPFS_GATEWAY_HOST); + img_ipfs_gateway_uri.append(&image_cid); + img_ipfs_gateway_uri.append(&uri_slash); + img_ipfs_gateway_uri.append(&file_index); + img_ipfs_gateway_uri.append(&image_file_extension); + + uris.push(img_ipfs_gateway_uri); + + if is_metadata_in_uris { + let mut ipfs_metadata_uri = ManagedBuffer::new_from_bytes(IPFS_GATEWAY_HOST); + ipfs_metadata_uri.append(&metadata_cid); + ipfs_metadata_uri.append(&uri_slash); + ipfs_metadata_uri.append(&file_index); + ipfs_metadata_uri.append(&metadata_file_extension); + + uris.push(ipfs_metadata_uri); + } + + uris + } + + // This can be probably optimized with attributes struct, had problems with decoding on the api side + fn build_attributes_buffer(&self, index_to_mint: usize) -> ManagedBuffer { + let metadata_key_name = ManagedBuffer::new_from_bytes(METADATA_KEY_NAME); + let metadata_index_file = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); + let metadata_file_extension = ManagedBuffer::new_from_bytes(METADATA_FILE_EXTENSION); + let metadata_cid = self.metadata_base_cid().get(); + let separator = ManagedBuffer::new_from_bytes(ATTR_SEPARATOR); + let metadata_slash = ManagedBuffer::new_from_bytes(URI_SLASH); + let tags_key_name = ManagedBuffer::new_from_bytes(TAGS_KEY_NAME); + + let mut attributes = ManagedBuffer::new(); + attributes.append(&tags_key_name); + attributes.append(&self.tags().get()); + attributes.append(&separator); + attributes.append(&metadata_key_name); + attributes.append(&metadata_cid); + attributes.append(&metadata_slash); + attributes.append(&metadata_index_file); + attributes.append(&metadata_file_extension); + + attributes + } + + fn build_token_name_buffer(&self, index_to_mint: usize) -> ManagedBuffer { + let mut full_token_name = ManagedBuffer::new(); + + let token_name_from_storage = self.nft_token_name().get(); + + let no_number_in_name = self.no_number_in_nft_name().get(); + + full_token_name.append(&token_name_from_storage); + + if !no_number_in_name { + let token_index = self.decimal_to_ascii(index_to_mint.try_into().unwrap()); + let hash_and_space_sign = ManagedBuffer::new_from_bytes(" #".as_bytes()); + + full_token_name.append(&hash_and_space_sign); + full_token_name.append(&token_index); + } + + full_token_name + } + + fn decimal_to_ascii(&self, mut number: u32) -> ManagedBuffer { + const MAX_NUMBER_CHARACTERS: usize = 10; + const ZERO_ASCII: u8 = b'0'; + + let mut as_ascii = [0u8; MAX_NUMBER_CHARACTERS]; + let mut nr_chars = 0; + + loop { + unsafe { + let reminder: u8 = (number % 10).try_into().unwrap_unchecked(); + number /= 10; + + as_ascii[nr_chars] = ZERO_ASCII + reminder; + nr_chars += 1; + } + + if number == 0 { + break; + } + } + + let slice = &mut as_ascii[..nr_chars]; + slice.reverse(); + + ManagedBuffer::new_from_bytes(slice) + } + + fn get_current_left_tokens_amount(&self) -> u32 { + let drop_amount = self.amount_of_tokens_per_drop().get(); + let tokens_left; + let paused = true; + if drop_amount > 0 { + tokens_left = self.drop_tokens_left(); + } else { + tokens_left = self.total_tokens_left(); + } + + if tokens_left == 0 { + self.paused().set(&paused); + } + + tokens_left + } + + #[view(getDropTokensLeft)] + fn drop_tokens_left(&self) -> u32 { + let minted_tokens = self.minted_indexes_by_drop().get(); + let amount_of_tokens = self.amount_of_tokens_per_drop().get(); + let left_tokens: u32 = amount_of_tokens - minted_tokens as u32; + + left_tokens + } + + #[view(getTotalTokensLeft)] + fn total_tokens_left(&self) -> u32 { + let minted_tokens = self.minted_indexes_total().get(); + let amount_of_tokens = self.amount_of_tokens_total().get(); + let left_tokens: u32 = amount_of_tokens - minted_tokens as u32; + + left_tokens + } + + #[view(getMintedPerAddressPerDrop)] + fn get_minted_per_address_per_drop(&self, address: ManagedAddress) -> u32 { + let minted_per_address_per_drop: u32; + if self.is_drop_active().get() && !self.last_drop().is_empty() { + let last_drop_id = self.last_drop().get(); + minted_per_address_per_drop = self + .minted_per_address_per_drop(last_drop_id) + .get(&address) + .unwrap_or_default(); + } else { + minted_per_address_per_drop = 0; + } + + minted_per_address_per_drop + } + + #[view(getAllowlistAddressCheck)] + fn allowlist_address_check(&self, address: ManagedAddress) -> bool { + self.allowlist().contains(&address) + } + + #[view(getAllowlistSize)] + fn allowlist_size(&self) -> usize { + self.allowlist().len() + } +} diff --git a/src/setup.rs b/src/setup.rs new file mode 100644 index 0000000..3252b73 --- /dev/null +++ b/src/setup.rs @@ -0,0 +1,290 @@ +multiversx_sc::imports!(); +multiversx_sc::derive_imports!(); + +use crate::operations; +use crate::storage; + +#[derive(TypeAbi, TopEncode, TopDecode)] +pub enum NFTProperties { + CanFreeze, + CanWipe, + CanPause, + CanTransferCreateRole, + CanChangeOwner, + CanUpgrade, + CanAddSpecialRoles, +} + +#[multiversx_sc::module] +pub trait Setup: storage::Storage + operations::Operations { + // Issue main collection token/handler + #[allow_multiple_var_args] + #[only_owner] + #[payable("EGLD")] + #[endpoint(issueToken)] + fn issue_token( + &self, + collection_token_name: ManagedBuffer, + collection_token_ticker: ManagedBuffer, + is_not_number_in_name: bool, + nft_token_name: ManagedBuffer, + token_properties: OptionalValue>, + ) { + let issue_cost = self.call_value().egld_value(); + require!(self.nft_token_id().is_empty(), "Token already issued!"); + + let mut nfts_name = nft_token_name; + + if nfts_name.is_empty() { + nfts_name = collection_token_name.clone(); + } + + self.no_number_in_nft_name().set(is_not_number_in_name); + self.nft_token_name().set(&nfts_name); + self.collection_token_name().set(&collection_token_name); + + let mut properties = NonFungibleTokenProperties { + can_freeze: false, + can_wipe: false, + can_pause: false, + can_transfer_create_role: false, + can_change_owner: false, + can_upgrade: false, + can_add_special_roles: true, // to proceed it is required anyway, so there is no sense to leave it false + }; + + let properties_option = token_properties.into_option(); + + match properties_option { + Some(value) => { + for token_propery in value.into_iter() { + match token_propery { + NFTProperties::CanFreeze => properties.can_freeze = true, + NFTProperties::CanWipe => properties.can_wipe = true, + NFTProperties::CanPause => properties.can_pause = true, + NFTProperties::CanTransferCreateRole => { + properties.can_transfer_create_role = true + } + NFTProperties::CanChangeOwner => properties.can_change_owner = true, + NFTProperties::CanUpgrade => properties.can_upgrade = true, + NFTProperties::CanAddSpecialRoles => { + properties.can_add_special_roles = true + } + }; + } + } + None => {} + } + + self.send() + .esdt_system_sc_proxy() + .issue_non_fungible( + issue_cost.clone_value(), + &collection_token_name, + &collection_token_ticker, + properties, + ) + .async_call() + .with_callback(self.callbacks().issue_callback()) + .call_and_exit(); + } + + #[only_owner] + #[endpoint(setLocalRoles)] + fn set_local_roles(&self) { + require!(!self.nft_token_id().is_empty(), "Token not issued!"); + + self.send() + .esdt_system_sc_proxy() + .set_special_roles( + &self.blockchain().get_sc_address(), + &self.nft_token_id().get(), + (&[EsdtLocalRole::NftCreate][..]).into_iter().cloned(), + ) + .async_call() + .call_and_exit(); + } + + #[callback] + fn issue_callback( + &self, + #[call_result] result: ManagedAsyncCallResult, + ) { + match result { + ManagedAsyncCallResult::Ok(token_id) => { + let tokens_number = self.amount_of_tokens_total().get(); + self.nft_token_id().set(&token_id.unwrap_esdt()); + self.tokens_left_to_mint() + .set_initial_len(tokens_number.try_into().unwrap()); + self.shuffle(); + } + ManagedAsyncCallResult::Err(_) => { + let caller = self.blockchain().get_owner_address(); + let returned = self.call_value().egld_or_single_esdt(); + if returned.token_identifier.is_egld() && returned.amount > 0 { + self.send() + .direct(&caller, &returned.token_identifier, 0, &returned.amount); + } + } + } + } + + #[only_owner] + #[endpoint(pauseMinting)] + fn pause_minting(&self) { + let paused = true; + self.paused().set(&paused); + } + + #[only_owner] + #[endpoint(startMinting)] + fn start_minting(&self) { + require!(!self.nft_token_id().is_empty(), "Token not issued!"); + + self.paused().clear(); + } + + #[only_owner] + #[endpoint(setDrop)] + fn set_drop( + &self, + amount_of_tokens_per_drop: u32, + tokens_limit_per_address_per_drop: OptionalValue, + ) { + let total_tokens_left = self.total_tokens_left(); + + require!( + amount_of_tokens_per_drop <= total_tokens_left, + "The number of tokens per drop can't be higher than the total amount of tokens left!" + ); + + let tokens_limit = tokens_limit_per_address_per_drop + .into_option() + .unwrap_or_default(); + let tokens_limit_total = self.tokens_limit_per_address_total().get(); + + require!(tokens_limit <= tokens_limit_total, "The tokens limit per address per drop should be smaller or equal to the total limit of tokens per address!"); + + if tokens_limit > 0 { + self.tokens_limit_per_address_per_drop().set(tokens_limit); + } else { + self.tokens_limit_per_address_per_drop() + .set(amount_of_tokens_per_drop); + } + + self.minted_indexes_by_drop().clear(); + self.amount_of_tokens_per_drop() + .set(&amount_of_tokens_per_drop); + + if self.last_drop().is_empty() { + self.last_drop().set(1); + } else { + self.last_drop().update(|sum| *sum += 1); + } + + self.is_drop_active().set(true); + } + + #[only_owner] + #[endpoint(unsetDrop)] + fn unset_drop(&self) { + self.minted_indexes_by_drop().clear(); + self.amount_of_tokens_per_drop().clear(); + self.tokens_limit_per_address_per_drop().clear(); + self.is_drop_active().set(false); + } + + // The owner can change the price, for example, a new price for the next nft drop. + #[only_owner] + #[endpoint(setNewPrice)] + fn set_new_price(&self, price: BigUint) { + self.selling_price().set(&price); + } + + // The owner can change CIDs only before any NFT is minted! + #[only_owner] + #[endpoint(changeBaseCids)] + fn change_base_cids(&self, image_base_cid: ManagedBuffer, metadata_base_cid: ManagedBuffer) { + require!( + self.minted_indexes_total().is_empty(), + "You can't change the CIDs. There are some tokens minted already!" + ); + + self.image_base_cid().set(&image_base_cid); + self.metadata_base_cid().set(&metadata_base_cid); + } + + #[only_owner] + #[endpoint(setNewTokensLimitPerAddress)] + fn set_new_tokens_limit_per_address(&self, limit: u32) { + self.tokens_limit_per_address_total().set(limit); + } + + // As an owner of the smart contract, you can send randomly minted NFTs to chosen addresses. + #[only_owner] + #[endpoint(giveaway)] + fn giveaway(&self, addresses: ManagedVec, amount_of_tokens_per_address: u32) { + require!(!self.nft_token_id().is_empty(), "Token not issued!"); + + let token = self.nft_token_id().get(); + let roles = self.blockchain().get_esdt_local_roles(&token); + + require!( + roles.has_role(&EsdtLocalRole::NftCreate), + "NFTCreate role not set!" + ); + + require!( + self.get_current_left_tokens_amount() >= amount_of_tokens_per_address * addresses.len() as u32, + "All tokens have been minted already or the amount you want to mint is too much. Check limits! (totally or per drop)!" + ); + + for address in addresses.into_iter() { + for _ in 0..amount_of_tokens_per_address { + self.mint_single_nft(BigUint::zero(), OptionalValue::Some(address.clone())); + } + } + } + + // As an owner, claim Smart Contract balance - temporary solution for royalities, the SC has to be payable to be able to get royalties + #[only_owner] + #[endpoint(claimScFunds)] + fn claim_sc_funds(&self) { + self.send().direct_egld( + &self.blockchain().get_caller(), + &self + .blockchain() + .get_sc_balance(&EgldOrEsdtTokenIdentifier::egld(), 0), + ); + } + + #[only_owner] + #[endpoint(enableAllowlist)] + fn enable_allowlist(&self) { + self.is_allowlist_enabled().set(true); + } + + #[only_owner] + #[endpoint(disableAllowlist)] + fn disable_allowlist(&self) { + self.is_allowlist_enabled().set(false); + } + + #[only_owner] + #[endpoint(populateAllowlist)] + fn populate_allowlist(&self, addresses: ManagedVec) { + self.allowlist().extend(&addresses); + } + + #[only_owner] + #[endpoint(clearAllowlist)] + fn clear_allowlist(&self) { + self.allowlist().clear(); + } + + #[only_owner] + #[endpoint(removeAllowlistAddress)] + fn remove_allowlist_address(&self, address: ManagedAddress) { + self.allowlist().remove(&address); + } +} diff --git a/src/storage.rs b/src/storage.rs new file mode 100644 index 0000000..a6d9bbc --- /dev/null +++ b/src/storage.rs @@ -0,0 +1,99 @@ +multiversx_sc::imports!(); +multiversx_sc::derive_imports!(); + +#[multiversx_sc::module] +pub trait Storage { + #[view(getNftTokenId)] + #[storage_mapper("nftTokenId")] + fn nft_token_id(&self) -> SingleValueMapper; + + #[view(getCollectionTokenName)] + #[storage_mapper("collectionTokenName")] + fn collection_token_name(&self) -> SingleValueMapper; + + #[view(getNftTokenName)] + #[storage_mapper("nftTokenName")] + fn nft_token_name(&self) -> SingleValueMapper; + + #[view(getNftPrice)] + #[storage_mapper("nftPrice")] + fn selling_price(&self) -> SingleValueMapper; + + #[view(getProvenanceHash)] + #[storage_mapper("provenanceHash")] + fn provenance_hash(&self) -> SingleValueMapper; + + #[view(getTokensLimitPerAddressTotal)] + #[storage_mapper("tokensLimitPerAddressTotal")] + fn tokens_limit_per_address_total(&self) -> SingleValueMapper; + + #[view(getMintedPerAddressTotal)] + #[storage_mapper("mintedPerAddressTotal")] + fn minted_per_address_total(&self, address: &ManagedAddress) -> SingleValueMapper; + + #[view(getTokensLimitPerAddressPerDrop)] + #[storage_mapper("tokensLimitPerAddressPerDrop")] + fn tokens_limit_per_address_per_drop(&self) -> SingleValueMapper; + + #[view(isAllowlistEnabled)] + #[storage_mapper("isAllowlistEnabled")] + fn is_allowlist_enabled(&self) -> SingleValueMapper; + + #[view(isDropActive)] + #[storage_mapper("isDropActive")] + fn is_drop_active(&self) -> SingleValueMapper; + + #[view(getTotalSupply)] + #[storage_mapper("amountOfTokensTotal")] + fn amount_of_tokens_total(&self) -> SingleValueMapper; + + #[view(isMintingPaused)] + #[storage_mapper("paused")] + fn paused(&self) -> SingleValueMapper; + + #[view(getTotalSupplyOfCurrentDrop)] + #[storage_mapper("amountOfTokensPerDrop")] + fn amount_of_tokens_per_drop(&self) -> SingleValueMapper; + + #[storage_mapper("lastDrop")] + fn last_drop(&self) -> SingleValueMapper; + + #[storage_mapper("allowlist")] + fn allowlist(&self) -> SetMapper; + + #[storage_mapper("mintedPerAddressPerDrop")] + fn minted_per_address_per_drop(&self, id: u16) -> MapMapper; + + #[storage_mapper("imageBaseCid")] + fn image_base_cid(&self) -> SingleValueMapper; + + #[storage_mapper("metadaBaseCid")] + fn metadata_base_cid(&self) -> SingleValueMapper; + + #[storage_mapper("file_extension")] + fn file_extension(&self) -> SingleValueMapper; + + #[storage_mapper("mintedIndexesTotal")] + fn minted_indexes_total(&self) -> SingleValueMapper; + + #[storage_mapper("mintedIndexesByDrop")] + fn minted_indexes_by_drop(&self) -> SingleValueMapper; + + #[storage_mapper("royalties")] + fn royalties(&self) -> SingleValueMapper; + + #[storage_mapper("tags")] + fn tags(&self) -> SingleValueMapper; + + #[storage_mapper("nextIndexToMint")] + fn next_index_to_mint(&self) -> SingleValueMapper<(usize, usize)>; + + #[storage_mapper("tokensLeftToMint")] + fn tokens_left_to_mint(&self) -> UniqueIdMapper; + + #[storage_mapper("isMetadataInUris")] + fn is_metadata_in_uris(&self) -> SingleValueMapper; + + #[storage_mapper("noNumberInNftName")] + fn no_number_in_nft_name(&self) -> SingleValueMapper; +} diff --git a/wasm/Cargo.lock b/wasm/Cargo.lock index a2c2529..28f0d25 100644 --- a/wasm/Cargo.lock +++ b/wasm/Cargo.lock @@ -4,15 +4,22 @@ version = 3 [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", "version_check", + "zerocopy", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "arrayvec" version = "0.7.2" @@ -39,14 +46,14 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "elven-nft-minter" -version = "1.13.0" +version = "1.14.0" dependencies = [ "multiversx-sc", ] [[package]] name = "elven-nft-minter-wasm" -version = "1.13.0" +version = "0.0.0" dependencies = [ "elven-nft-minter", "multiversx-sc-wasm-adapter", @@ -60,11 +67,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "hashbrown" -version = "0.13.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", + "allocator-api2", ] [[package]] @@ -75,15 +83,15 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "multiversx-sc" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22c2d1e82a357b6f397f87d475314628473b8a88882aa407234197f596786aa" +checksum = "f11b51d6a2ab0218585ed58e100c5ac2218de09490fbfc4243b5ecd0ca7f5cbc" dependencies = [ "bitflags", "hashbrown", @@ -95,9 +103,9 @@ dependencies = [ [[package]] name = "multiversx-sc-codec" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c97dc9e9f34f836de6a56386ddbe1b9e87e20916ff86b1ea728c08e1871ac2" +checksum = "327b0ad1c3477cab0d7c84391439ba302238f738ef3c6e1fcd18e247fba84875" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", @@ -105,34 +113,34 @@ dependencies = [ [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ab795364fcf0452a953e33eae7e0c22d1a6374ffeb0724d24a42727e099c6e" +checksum = "f444038e0043b8eda816b26952479c2aca3c4a643580f4337f71fb362a586db5" dependencies = [ "hex", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "multiversx-sc-derive" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d77a125ea6985b2fa5cf1a297cdb9202c5a528eebb22652cc68ab1a9305e11" +checksum = "784f0fc505806102fe6f808b368e12fcb13096dd73c5678f09c5663230724d6f" dependencies = [ "hex", "proc-macro2", "quote", "radix_trie", - "syn", + "syn 1.0.109", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951b0137614c8412554ccd086967c565af38b91b77a66b5d9f433801ff24e501" +checksum = "5afb8b8cc380eabd82dc8f9b02afbab3dce16fc2b5de1dbc601fcfcf261278ba" dependencies = [ "multiversx-sc", ] @@ -163,18 +171,18 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -206,6 +214,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "unicode-ident" version = "1.0.9" @@ -217,3 +236,23 @@ name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "zerocopy" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index 7fa5782..2555108 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -1,7 +1,12 @@ +# Code generated by the multiversx-sc build system. DO NOT EDIT. + +# ########################################## +# ############## AUTO-GENERATED ############# +# ########################################## + [package] name = "elven-nft-minter-wasm" -version = "1.13.0" -authors = ["Julian Ćwirko "] +version = "0.0.0" edition = "2021" publish = false @@ -19,7 +24,7 @@ panic = "abort" path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "0.42.0" +version = "0.45.1" [workspace] members = ["."] diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index 3b63fc1..079a2c6 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -1,4 +1,4 @@ -// Code generated by the multiversx-sc multi-contract system. DO NOT EDIT. +// Code generated by the multiversx-sc build system. DO NOT EDIT. //////////////////////////////////////////////////// ////////////////// AUTO-GENERATED ////////////////// @@ -10,6 +10,7 @@ // Total number of exported functions: 38 #![no_std] +#![allow(internal_features)] #![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); @@ -19,6 +20,19 @@ multiversx_sc_wasm_adapter::endpoints! { elven_nft_minter ( init => init + getNftTokenId => nft_token_id + getCollectionTokenName => collection_token_name + getNftTokenName => nft_token_name + getNftPrice => selling_price + getProvenanceHash => provenance_hash + getTokensLimitPerAddressTotal => tokens_limit_per_address_total + getMintedPerAddressTotal => minted_per_address_total + getTokensLimitPerAddressPerDrop => tokens_limit_per_address_per_drop + isAllowlistEnabled => is_allowlist_enabled + isDropActive => is_drop_active + getTotalSupply => amount_of_tokens_total + isMintingPaused => paused + getTotalSupplyOfCurrentDrop => amount_of_tokens_per_drop issueToken => issue_token setLocalRoles => set_local_roles pauseMinting => pause_minting @@ -42,19 +56,6 @@ multiversx_sc_wasm_adapter::endpoints! { getMintedPerAddressPerDrop => get_minted_per_address_per_drop getAllowlistAddressCheck => allowlist_address_check getAllowlistSize => allowlist_size - getNftTokenId => nft_token_id - getCollectionTokenName => collection_token_name - getNftTokenName => nft_token_name - getNftPrice => selling_price - getProvenanceHash => provenance_hash - getTokensLimitPerAddressTotal => tokens_limit_per_address_total - getMintedPerAddressTotal => minted_per_address_total - getTokensLimitPerAddressPerDrop => tokens_limit_per_address_per_drop - isAllowlistEnabled => is_allowlist_enabled - isDropActive => is_drop_active - getTotalSupply => amount_of_tokens_total - isMintingPaused => paused - getTotalSupplyOfCurrentDrop => amount_of_tokens_per_drop ) }