From 03d708d94fdd47bb0926d57fcdb2c9276831096a Mon Sep 17 00:00:00 2001 From: snsd0805 Date: Sun, 4 Jun 2023 20:34:12 +0800 Subject: [PATCH] feat: Soulbound Token implement with ERC721 --- build/contracts/SoulboundToken.json | 2878 ++++++++++++++++++++------- contracts/SoulboundToken.sol | 6 + 2 files changed, 2137 insertions(+), 747 deletions(-) diff --git a/build/contracts/SoulboundToken.json b/build/contracts/SoulboundToken.json index 80a98bb..3aba3f6 100644 --- a/build/contracts/SoulboundToken.json +++ b/build/contracts/SoulboundToken.json @@ -364,9 +364,9 @@ "constant": true } ], - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"player\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/SoulboundToken.sol\":\"SoulboundToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"@openzeppelin/contracts/utils/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"project:/contracts/SoulboundToken.sol\":{\"keccak256\":\"0xa241b614e23697f2be064e17e19ac03b9902b6a2c448e91be446a601316064f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3f6356ca5cb5f082ea24c32e3868db92f25aa412d6136ea6eaadc88214c7e90f\",\"dweb:/ipfs/QmaGqi4WdtrVKXn63n2nqPoX4sNYv9mFtDv8Ud7miCJ7Lu\"]}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280601181526020017f4372656469742053797374656d205342540000000000000000000000000000008152506040518060400160405280600681526020017f43535f534254000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b614be8806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636a6278421161008c578063a22cb46511610066578063a22cb4651461026f578063b88d4fde1461028b578063c87b56dd146102a7578063e985e9c5146102d7576100ea565b80636a627842146101f157806370a082311461022157806395d89b4114610251576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b6101096004803603810190610104919061197f565b610307565b60405161011691906119c7565b60405180910390f35b6101276103e9565b6040516101349190611a72565b60405180910390f35b61015760048036038101906101529190611aca565b61047b565b6040516101649190611b38565b60405180910390f35b61018760048036038101906101829190611b7f565b6104c1565b005b6101a3600480360381019061019e9190611bbf565b6105d8565b005b6101bf60048036038101906101ba9190611bbf565b610638565b005b6101db60048036038101906101d69190611aca565b610658565b6040516101e89190611b38565b60405180910390f35b61020b60048036038101906102069190611c12565b6106de565b6040516102189190611c4e565b60405180910390f35b61023b60048036038101906102369190611c12565b61070b565b6040516102489190611c4e565b60405180910390f35b6102596107c2565b6040516102669190611a72565b60405180910390f35b61028960048036038101906102849190611c95565b610854565b005b6102a560048036038101906102a09190611e0a565b61086a565b005b6102c160048036038101906102bc9190611aca565b6108cc565b6040516102ce9190611a72565b60405180910390f35b6102f160048036038101906102ec9190611e8d565b61093d565b6040516102fe91906119c7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e1826109d1565b5b9050919050565b6060600080546103f890611efc565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611efc565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610a3b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611f9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610a86565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610a86565b61093d565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090612031565b60405180910390fd5b6105d38383610a8e565b505050565b6105e96105e3610a86565b82610b47565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906120c3565b60405180910390fd5b610633838383610bdc565b505050565b6106538383836040518060200160405280600081525061086a565b505050565b60008061066483610ed5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc9061212f565b60405180910390fd5b80915050919050565b60006106ea6006610f12565b60006106f66006610f28565b90506107028382610f36565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610772906121c1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107d190611efc565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90611efc565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b61086661085f610a86565b8383611153565b5050565b61087b610875610a86565b83610b47565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906120c3565b60405180910390fd5b6108c6848484846112bf565b50505050565b60606108d782610a3b565b60006109136108e58461131b565b6108ee856113e9565b6040516020016108ff9291906123bf565b604051602081830303815290604052611466565b9050806040516020016109269190612466565b604051602081830303815290604052915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a44816115c9565b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a9061212f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b0183610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b5383610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b955750610b94818561093d565b5b80610bd357508373ffffffffffffffffffffffffffffffffffffffff16610bbb8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bfc82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906124fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061258c565b60405180910390fd5b610cce838383600161160a565b8273ffffffffffffffffffffffffffffffffffffffff16610cee82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906124fa565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ed08383836001611610565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906125f8565b60405180910390fd5b610fae816115c9565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590612664565b60405180910390fd5b610ffc60008383600161160a565b611005816115c9565b15611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612664565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114f600083836001611610565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b8906126d0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112b291906119c7565b60405180910390a3505050565b6112ca848484610bdc565b6112d684848484611616565b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612762565b60405180910390fd5b50505050565b60606000600161132a8461179d565b01905060008167ffffffffffffffff81111561134957611348611cdf565b5b6040519080825280601f01601f19166020018201604052801561137b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156113de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816113d2576113d1612782565b5b04945060008503611389575b819350505050919050565b606060006113f68361131b565b9050600060405180610960016040528061093c815260200161427761093c913990506000604051806118c0016040528061189b815260200161299c61189b9139905081838260405160200161144d939291906127b1565b6040516020818303038152906040529350505050919050565b60606000825103611488576040518060200160405280600081525090506115c4565b600060405180606001604052806040815260200161423760409139905060006003600285516114b79190612811565b6114c19190612845565b60046114cd9190612876565b67ffffffffffffffff8111156114e6576114e5611cdf565b5b6040519080825280601f01601f1916602001820160405280156115185781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015611584576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050611529565b50506003865106600181146115a057600281146115b3576115bb565b603d6001830353603d60028303536115bb565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166115eb83610ed5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006116378473ffffffffffffffffffffffffffffffffffffffff166118f0565b15611790578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611660610a86565b8786866040518563ffffffff1660e01b8152600401611682949392919061290d565b6020604051808303816000875af19250505080156116be57506040513d601f19601f820116820180604052508101906116bb919061296e565b60015b611740573d80600081146116ee576040519150601f19603f3d011682016040523d82523d6000602084013e6116f3565b606091505b506000815103611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612762565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611795565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106117fb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816117f1576117f0612782565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611838576d04ee2d6d415b85acef8100000000838161182e5761182d612782565b5b0492506020810190505b662386f26fc10000831061186757662386f26fc10000838161185d5761185c612782565b5b0492506010810190505b6305f5e1008310611890576305f5e100838161188657611885612782565b5b0492506008810190505b61271083106118b55761271083816118ab576118aa612782565b5b0492506004810190505b606483106118d857606483816118ce576118cd612782565b5b0492506002810190505b600a83106118e7576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61195c81611927565b811461196757600080fd5b50565b60008135905061197981611953565b92915050565b6000602082840312156119955761199461191d565b5b60006119a38482850161196a565b91505092915050565b60008115159050919050565b6119c1816119ac565b82525050565b60006020820190506119dc60008301846119b8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a1c578082015181840152602081019050611a01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a44826119e2565b611a4e81856119ed565b9350611a5e8185602086016119fe565b611a6781611a28565b840191505092915050565b60006020820190508181036000830152611a8c8184611a39565b905092915050565b6000819050919050565b611aa781611a94565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b600060208284031215611ae057611adf61191d565b5b6000611aee84828501611ab5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b2282611af7565b9050919050565b611b3281611b17565b82525050565b6000602082019050611b4d6000830184611b29565b92915050565b611b5c81611b17565b8114611b6757600080fd5b50565b600081359050611b7981611b53565b92915050565b60008060408385031215611b9657611b9561191d565b5b6000611ba485828601611b6a565b9250506020611bb585828601611ab5565b9150509250929050565b600080600060608486031215611bd857611bd761191d565b5b6000611be686828701611b6a565b9350506020611bf786828701611b6a565b9250506040611c0886828701611ab5565b9150509250925092565b600060208284031215611c2857611c2761191d565b5b6000611c3684828501611b6a565b91505092915050565b611c4881611a94565b82525050565b6000602082019050611c636000830184611c3f565b92915050565b611c72816119ac565b8114611c7d57600080fd5b50565b600081359050611c8f81611c69565b92915050565b60008060408385031215611cac57611cab61191d565b5b6000611cba85828601611b6a565b9250506020611ccb85828601611c80565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d1782611a28565b810181811067ffffffffffffffff82111715611d3657611d35611cdf565b5b80604052505050565b6000611d49611913565b9050611d558282611d0e565b919050565b600067ffffffffffffffff821115611d7557611d74611cdf565b5b611d7e82611a28565b9050602081019050919050565b82818337600083830152505050565b6000611dad611da884611d5a565b611d3f565b905082815260208101848484011115611dc957611dc8611cda565b5b611dd4848285611d8b565b509392505050565b600082601f830112611df157611df0611cd5565b5b8135611e01848260208601611d9a565b91505092915050565b60008060008060808587031215611e2457611e2361191d565b5b6000611e3287828801611b6a565b9450506020611e4387828801611b6a565b9350506040611e5487828801611ab5565b925050606085013567ffffffffffffffff811115611e7557611e74611922565b5b611e8187828801611ddc565b91505092959194509250565b60008060408385031215611ea457611ea361191d565b5b6000611eb285828601611b6a565b9250506020611ec385828601611b6a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1457607f821691505b602082108103611f2757611f26611ecd565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f896021836119ed565b9150611f9482611f2d565b604082019050919050565b60006020820190508181036000830152611fb881611f7c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061201b603d836119ed565b915061202682611fbf565b604082019050919050565b6000602082019050818103600083015261204a8161200e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006120ad602d836119ed565b91506120b882612051565b604082019050919050565b600060208201905081810360008301526120dc816120a0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006121196018836119ed565b9150612124826120e3565b602082019050919050565b600060208201905081810360008301526121488161210c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006121ab6029836119ed565b91506121b68261214f565b604082019050919050565b600060208201905081810360008301526121da8161219e565b9050919050565b600081905092915050565b7f7b226e616d65223a20224372656469742053797374656d20536f756c626f756e60008201527f6420546f6b656e20284353534254292023000000000000000000000000000000602082015250565b60006122486031836121e1565b9150612253826121ec565b603182019050919050565b6000612269826119e2565b61227381856121e1565b93506122838185602086016119fe565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006122c56002836121e1565b91506122d08261228f565b600282019050919050565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b6000612311600f836121e1565b915061231c826122db565b600f82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061235d6001836121e1565b915061236882612327565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006123a96001836121e1565b91506123b482612373565b600182019050919050565b60006123ca8261223b565b91506123d6828561225e565b91506123e1826122b8565b91506123ec82612304565b91506123f8828461225e565b915061240382612350565b915061240e8261239c565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612450601d836121e1565b915061245b8261241a565b601d82019050919050565b600061247182612443565b915061247d828461225e565b915081905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006124e46025836119ed565b91506124ef82612488565b604082019050919050565b60006020820190508181036000830152612513816124d7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125766024836119ed565b91506125818261251a565b604082019050919050565b600060208201905081810360008301526125a581612569565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006125e26020836119ed565b91506125ed826125ac565b602082019050919050565b60006020820190508181036000830152612611816125d5565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061264e601c836119ed565b915061265982612618565b602082019050919050565b6000602082019050818103600083015261267d81612641565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006126ba6019836119ed565b91506126c582612684565b602082019050919050565b600060208201905081810360008301526126e9816126ad565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061274c6032836119ed565b9150612757826126f0565b604082019050919050565b6000602082019050818103600083015261277b8161273f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127bd828661225e565b91506127c9828561225e565b91506127d5828461225e565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061281c82611a94565b915061282783611a94565b925082820190508082111561283f5761283e6127e2565b5b92915050565b600061285082611a94565b915061285b83611a94565b92508261286b5761286a612782565b5b828204905092915050565b600061288182611a94565b915061288c83611a94565b925082820261289a81611a94565b915082820484148315176128b1576128b06127e2565b5b5092915050565b600081519050919050565b600082825260208201905092915050565b60006128df826128b8565b6128e981856128c3565b93506128f98185602086016119fe565b61290281611a28565b840191505092915050565b60006080820190506129226000830187611b29565b61292f6020830186611b29565b61293c6040830185611c3f565b818103606083015261294e81846128d4565b905095945050505050565b60008151905061296881611953565b92915050565b6000602082840312156129845761298361191d565b5b600061299284828501612959565b9150509291505056fe5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23a26469706673582212201ef5a39cd0121d9ca444fd72d760490f8c28829503c970acda76395950ca5de864736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636a6278421161008c578063a22cb46511610066578063a22cb4651461026f578063b88d4fde1461028b578063c87b56dd146102a7578063e985e9c5146102d7576100ea565b80636a627842146101f157806370a082311461022157806395d89b4114610251576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b6101096004803603810190610104919061197f565b610307565b60405161011691906119c7565b60405180910390f35b6101276103e9565b6040516101349190611a72565b60405180910390f35b61015760048036038101906101529190611aca565b61047b565b6040516101649190611b38565b60405180910390f35b61018760048036038101906101829190611b7f565b6104c1565b005b6101a3600480360381019061019e9190611bbf565b6105d8565b005b6101bf60048036038101906101ba9190611bbf565b610638565b005b6101db60048036038101906101d69190611aca565b610658565b6040516101e89190611b38565b60405180910390f35b61020b60048036038101906102069190611c12565b6106de565b6040516102189190611c4e565b60405180910390f35b61023b60048036038101906102369190611c12565b61070b565b6040516102489190611c4e565b60405180910390f35b6102596107c2565b6040516102669190611a72565b60405180910390f35b61028960048036038101906102849190611c95565b610854565b005b6102a560048036038101906102a09190611e0a565b61086a565b005b6102c160048036038101906102bc9190611aca565b6108cc565b6040516102ce9190611a72565b60405180910390f35b6102f160048036038101906102ec9190611e8d565b61093d565b6040516102fe91906119c7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e1826109d1565b5b9050919050565b6060600080546103f890611efc565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611efc565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610a3b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611f9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610a86565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610a86565b61093d565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090612031565b60405180910390fd5b6105d38383610a8e565b505050565b6105e96105e3610a86565b82610b47565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906120c3565b60405180910390fd5b610633838383610bdc565b505050565b6106538383836040518060200160405280600081525061086a565b505050565b60008061066483610ed5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc9061212f565b60405180910390fd5b80915050919050565b60006106ea6006610f12565b60006106f66006610f28565b90506107028382610f36565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610772906121c1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107d190611efc565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90611efc565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b61086661085f610a86565b8383611153565b5050565b61087b610875610a86565b83610b47565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906120c3565b60405180910390fd5b6108c6848484846112bf565b50505050565b60606108d782610a3b565b60006109136108e58461131b565b6108ee856113e9565b6040516020016108ff9291906123bf565b604051602081830303815290604052611466565b9050806040516020016109269190612466565b604051602081830303815290604052915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a44816115c9565b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a9061212f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b0183610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b5383610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b955750610b94818561093d565b5b80610bd357508373ffffffffffffffffffffffffffffffffffffffff16610bbb8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bfc82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906124fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061258c565b60405180910390fd5b610cce838383600161160a565b8273ffffffffffffffffffffffffffffffffffffffff16610cee82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906124fa565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ed08383836001611610565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906125f8565b60405180910390fd5b610fae816115c9565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590612664565b60405180910390fd5b610ffc60008383600161160a565b611005816115c9565b15611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612664565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114f600083836001611610565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b8906126d0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112b291906119c7565b60405180910390a3505050565b6112ca848484610bdc565b6112d684848484611616565b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612762565b60405180910390fd5b50505050565b60606000600161132a8461179d565b01905060008167ffffffffffffffff81111561134957611348611cdf565b5b6040519080825280601f01601f19166020018201604052801561137b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156113de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816113d2576113d1612782565b5b04945060008503611389575b819350505050919050565b606060006113f68361131b565b9050600060405180610960016040528061093c815260200161427761093c913990506000604051806118c0016040528061189b815260200161299c61189b9139905081838260405160200161144d939291906127b1565b6040516020818303038152906040529350505050919050565b60606000825103611488576040518060200160405280600081525090506115c4565b600060405180606001604052806040815260200161423760409139905060006003600285516114b79190612811565b6114c19190612845565b60046114cd9190612876565b67ffffffffffffffff8111156114e6576114e5611cdf565b5b6040519080825280601f01601f1916602001820160405280156115185781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015611584576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050611529565b50506003865106600181146115a057600281146115b3576115bb565b603d6001830353603d60028303536115bb565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166115eb83610ed5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006116378473ffffffffffffffffffffffffffffffffffffffff166118f0565b15611790578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611660610a86565b8786866040518563ffffffff1660e01b8152600401611682949392919061290d565b6020604051808303816000875af19250505080156116be57506040513d601f19601f820116820180604052508101906116bb919061296e565b60015b611740573d80600081146116ee576040519150601f19603f3d011682016040523d82523d6000602084013e6116f3565b606091505b506000815103611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612762565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611795565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106117fb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816117f1576117f0612782565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611838576d04ee2d6d415b85acef8100000000838161182e5761182d612782565b5b0492506020810190505b662386f26fc10000831061186757662386f26fc10000838161185d5761185c612782565b5b0492506010810190505b6305f5e1008310611890576305f5e100838161188657611885612782565b5b0492506008810190505b61271083106118b55761271083816118ab576118aa612782565b5b0492506004810190505b606483106118d857606483816118ce576118cd612782565b5b0492506002810190505b600a83106118e7576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61195c81611927565b811461196757600080fd5b50565b60008135905061197981611953565b92915050565b6000602082840312156119955761199461191d565b5b60006119a38482850161196a565b91505092915050565b60008115159050919050565b6119c1816119ac565b82525050565b60006020820190506119dc60008301846119b8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a1c578082015181840152602081019050611a01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611a44826119e2565b611a4e81856119ed565b9350611a5e8185602086016119fe565b611a6781611a28565b840191505092915050565b60006020820190508181036000830152611a8c8184611a39565b905092915050565b6000819050919050565b611aa781611a94565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b600060208284031215611ae057611adf61191d565b5b6000611aee84828501611ab5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b2282611af7565b9050919050565b611b3281611b17565b82525050565b6000602082019050611b4d6000830184611b29565b92915050565b611b5c81611b17565b8114611b6757600080fd5b50565b600081359050611b7981611b53565b92915050565b60008060408385031215611b9657611b9561191d565b5b6000611ba485828601611b6a565b9250506020611bb585828601611ab5565b9150509250929050565b600080600060608486031215611bd857611bd761191d565b5b6000611be686828701611b6a565b9350506020611bf786828701611b6a565b9250506040611c0886828701611ab5565b9150509250925092565b600060208284031215611c2857611c2761191d565b5b6000611c3684828501611b6a565b91505092915050565b611c4881611a94565b82525050565b6000602082019050611c636000830184611c3f565b92915050565b611c72816119ac565b8114611c7d57600080fd5b50565b600081359050611c8f81611c69565b92915050565b60008060408385031215611cac57611cab61191d565b5b6000611cba85828601611b6a565b9250506020611ccb85828601611c80565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d1782611a28565b810181811067ffffffffffffffff82111715611d3657611d35611cdf565b5b80604052505050565b6000611d49611913565b9050611d558282611d0e565b919050565b600067ffffffffffffffff821115611d7557611d74611cdf565b5b611d7e82611a28565b9050602081019050919050565b82818337600083830152505050565b6000611dad611da884611d5a565b611d3f565b905082815260208101848484011115611dc957611dc8611cda565b5b611dd4848285611d8b565b509392505050565b600082601f830112611df157611df0611cd5565b5b8135611e01848260208601611d9a565b91505092915050565b60008060008060808587031215611e2457611e2361191d565b5b6000611e3287828801611b6a565b9450506020611e4387828801611b6a565b9350506040611e5487828801611ab5565b925050606085013567ffffffffffffffff811115611e7557611e74611922565b5b611e8187828801611ddc565b91505092959194509250565b60008060408385031215611ea457611ea361191d565b5b6000611eb285828601611b6a565b9250506020611ec385828601611b6a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1457607f821691505b602082108103611f2757611f26611ecd565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f896021836119ed565b9150611f9482611f2d565b604082019050919050565b60006020820190508181036000830152611fb881611f7c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061201b603d836119ed565b915061202682611fbf565b604082019050919050565b6000602082019050818103600083015261204a8161200e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006120ad602d836119ed565b91506120b882612051565b604082019050919050565b600060208201905081810360008301526120dc816120a0565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006121196018836119ed565b9150612124826120e3565b602082019050919050565b600060208201905081810360008301526121488161210c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006121ab6029836119ed565b91506121b68261214f565b604082019050919050565b600060208201905081810360008301526121da8161219e565b9050919050565b600081905092915050565b7f7b226e616d65223a20224372656469742053797374656d20536f756c626f756e60008201527f6420546f6b656e20284353534254292023000000000000000000000000000000602082015250565b60006122486031836121e1565b9150612253826121ec565b603182019050919050565b6000612269826119e2565b61227381856121e1565b93506122838185602086016119fe565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006122c56002836121e1565b91506122d08261228f565b600282019050919050565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b6000612311600f836121e1565b915061231c826122db565b600f82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061235d6001836121e1565b915061236882612327565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006123a96001836121e1565b91506123b482612373565b600182019050919050565b60006123ca8261223b565b91506123d6828561225e565b91506123e1826122b8565b91506123ec82612304565b91506123f8828461225e565b915061240382612350565b915061240e8261239c565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612450601d836121e1565b915061245b8261241a565b601d82019050919050565b600061247182612443565b915061247d828461225e565b915081905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006124e46025836119ed565b91506124ef82612488565b604082019050919050565b60006020820190508181036000830152612513816124d7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125766024836119ed565b91506125818261251a565b604082019050919050565b600060208201905081810360008301526125a581612569565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006125e26020836119ed565b91506125ed826125ac565b602082019050919050565b60006020820190508181036000830152612611816125d5565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061264e601c836119ed565b915061265982612618565b602082019050919050565b6000602082019050818103600083015261267d81612641565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006126ba6019836119ed565b91506126c582612684565b602082019050919050565b600060208201905081810360008301526126e9816126ad565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061274c6032836119ed565b9150612757826126f0565b604082019050919050565b6000602082019050818103600083015261277b8161273f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127bd828661225e565b91506127c9828561225e565b91506127d5828461225e565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061281c82611a94565b915061282783611a94565b925082820190508082111561283f5761283e6127e2565b5b92915050565b600061285082611a94565b915061285b83611a94565b92508261286b5761286a612782565b5b828204905092915050565b600061288182611a94565b915061288c83611a94565b925082820261289a81611a94565b915082820484148315176128b1576128b06127e2565b5b5092915050565b600081519050919050565b600082825260208201905092915050565b60006128df826128b8565b6128e981856128c3565b93506128f98185602086016119fe565b61290281611a28565b840191505092915050565b60006080820190506129226000830187611b29565b61292f6020830186611b29565b61293c6040830185611c3f565b818103606083015261294e81846128d4565b905095945050505050565b60008151905061296881611953565b92915050565b6000602082840312156129845761298361191d565b5b600061299284828501612959565b9150509291505056fe5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23a26469706673582212201ef5a39cd0121d9ca444fd72d760490f8c28829503c970acda76395950ca5de864736f6c63430008130033", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"player\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/SoulboundToken.sol\":\"SoulboundToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"@openzeppelin/contracts/utils/Base64.sol\":{\"keccak256\":\"0x5f3461639fe20794cfb4db4a6d8477388a15b2e70a018043084b7c4bedfa8136\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77e5309e2cc4cdc3395214edb0ff43ff5a5f7373f5a425383e540f6fab530f96\",\"dweb:/ipfs/QmTV8DZ9knJDa3b5NPBFQqjvTzodyZVjRUg5mx5A99JPLJ\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"project:/contracts/SoulboundToken.sol\":{\"keccak256\":\"0x26816cb75a4968b100a3f2a207fca38cedb2b00cea0170884f511e0758caf912\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1669dfdce0bff1fdf1668c103a55284ab514310b2e053c41f61c08de3326a9b1\",\"dweb:/ipfs/QmRbcpswGzBHY8ZWvQDHgSTkCHB1XsBC2h9TqcjDikLTsJ\"]}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280601181526020017f4372656469742053797374656d205342540000000000000000000000000000008152506040518060400160405280600681526020017f43535f534254000000000000000000000000000000000000000000000000000081525081600090816200008f919062000324565b508060019081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b614de9806200041b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636a6278421161008c578063a22cb46511610066578063a22cb4651461026f578063b88d4fde1461028b578063c87b56dd146102a7578063e985e9c5146102d7576100ea565b80636a627842146101f157806370a082311461022157806395d89b4114610251576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611a82565b610307565b6040516101169190611aca565b60405180910390f35b6101276103e9565b6040516101349190611b75565b60405180910390f35b61015760048036038101906101529190611bcd565b61047b565b6040516101649190611c3b565b60405180910390f35b61018760048036038101906101829190611c82565b6104c1565b005b6101a3600480360381019061019e9190611cc2565b6105d8565b005b6101bf60048036038101906101ba9190611cc2565b610638565b005b6101db60048036038101906101d69190611bcd565b610658565b6040516101e89190611c3b565b60405180910390f35b61020b60048036038101906102069190611d15565b6106de565b6040516102189190611d51565b60405180910390f35b61023b60048036038101906102369190611d15565b61070b565b6040516102489190611d51565b60405180910390f35b6102596107c2565b6040516102669190611b75565b60405180910390f35b61028960048036038101906102849190611d98565b610854565b005b6102a560048036038101906102a09190611f0d565b61086a565b005b6102c160048036038101906102bc9190611bcd565b6108cc565b6040516102ce9190611b75565b60405180910390f35b6102f160048036038101906102ec9190611f90565b61093d565b6040516102fe9190611aca565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e1826109d1565b5b9050919050565b6060600080546103f890611fff565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611fff565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610a3b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610533906120a2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610a86565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610a86565b61093d565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090612134565b60405180910390fd5b6105d38383610a8e565b505050565b6105e96105e3610a86565b82610b47565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906121c6565b60405180910390fd5b610633838383610bdc565b505050565b6106538383836040518060200160405280600081525061086a565b505050565b60008061066483610ed5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90612232565b60405180910390fd5b80915050919050565b60006106ea6006610f12565b60006106f66006610f28565b90506107028382610f36565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610772906122c4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107d190611fff565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90611fff565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b61086661085f610a86565b8383611153565b5050565b61087b610875610a86565b83610b47565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906121c6565b60405180910390fd5b6108c6848484846112bf565b50505050565b60606108d782610a3b565b60006109136108e58461131b565b6108ee856113e9565b6040516020016108ff9291906124c2565b604051602081830303815290604052611466565b9050806040516020016109269190612569565b604051602081830303815290604052915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a44816115c9565b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612232565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b0183610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b5383610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b955750610b94818561093d565b5b80610bd357508373ffffffffffffffffffffffffffffffffffffffff16610bbb8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bfc82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906125fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061268f565b60405180910390fd5b610cce838383600161160a565b8273ffffffffffffffffffffffffffffffffffffffff16610cee82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906125fd565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ed0838383600161170d565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906126fb565b60405180910390fd5b610fae816115c9565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590612767565b60405180910390fd5b610ffc60008383600161160a565b611005816115c9565b15611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612767565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114f60008383600161170d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b8906127d3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112b29190611aca565b60405180910390a3505050565b6112ca848484610bdc565b6112d684848484611713565b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612865565b60405180910390fd5b50505050565b60606000600161132a8461189a565b01905060008167ffffffffffffffff81111561134957611348611de2565b5b6040519080825280601f01601f19166020018201604052801561137b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156113de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816113d2576113d1612885565b5b04945060008503611389575b819350505050919050565b606060006113f68361131b565b9050600060405180610960016040528061093c815260200161447861093c913990506000604051806118c0016040528061189b8152602001612b9d61189b9139905081838260405160200161144d939291906128b4565b6040516020818303038152906040529350505050919050565b60606000825103611488576040518060200160405280600081525090506115c4565b600060405180606001604052806040815260200161443860409139905060006003600285516114b79190612914565b6114c19190612948565b60046114cd9190612979565b67ffffffffffffffff8111156114e6576114e5611de2565b5b6040519080825280601f01601f1916602001820160405280156115185781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015611584576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050611529565b50506003865106600181146115a057600281146115b3576115bb565b603d6001830353603d60028303536115bb565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166115eb83610ed5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116715750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790612a07565b60405180910390fd5b60006116bb8461070b565b146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290612a99565b60405180910390fd5b611707848484846119ed565b50505050565b50505050565b60006117348473ffffffffffffffffffffffffffffffffffffffff166119f3565b1561188d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261175d610a86565b8786866040518563ffffffff1660e01b815260040161177f9493929190612b0e565b6020604051808303816000875af19250505080156117bb57506040513d601f19601f820116820180604052508101906117b89190612b6f565b60015b61183d573d80600081146117eb576040519150601f19603f3d011682016040523d82523d6000602084013e6117f0565b606091505b506000815103611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90612865565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611892565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106118f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816118ee576118ed612885565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611935576d04ee2d6d415b85acef8100000000838161192b5761192a612885565b5b0492506020810190505b662386f26fc10000831061196457662386f26fc10000838161195a57611959612885565b5b0492506010810190505b6305f5e100831061198d576305f5e100838161198357611982612885565b5b0492506008810190505b61271083106119b25761271083816119a8576119a7612885565b5b0492506004810190505b606483106119d557606483816119cb576119ca612885565b5b0492506002810190505b600a83106119e4576001810190505b80915050919050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a5f81611a2a565b8114611a6a57600080fd5b50565b600081359050611a7c81611a56565b92915050565b600060208284031215611a9857611a97611a20565b5b6000611aa684828501611a6d565b91505092915050565b60008115159050919050565b611ac481611aaf565b82525050565b6000602082019050611adf6000830184611abb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b1f578082015181840152602081019050611b04565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b4782611ae5565b611b518185611af0565b9350611b61818560208601611b01565b611b6a81611b2b565b840191505092915050565b60006020820190508181036000830152611b8f8184611b3c565b905092915050565b6000819050919050565b611baa81611b97565b8114611bb557600080fd5b50565b600081359050611bc781611ba1565b92915050565b600060208284031215611be357611be2611a20565b5b6000611bf184828501611bb8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c2582611bfa565b9050919050565b611c3581611c1a565b82525050565b6000602082019050611c506000830184611c2c565b92915050565b611c5f81611c1a565b8114611c6a57600080fd5b50565b600081359050611c7c81611c56565b92915050565b60008060408385031215611c9957611c98611a20565b5b6000611ca785828601611c6d565b9250506020611cb885828601611bb8565b9150509250929050565b600080600060608486031215611cdb57611cda611a20565b5b6000611ce986828701611c6d565b9350506020611cfa86828701611c6d565b9250506040611d0b86828701611bb8565b9150509250925092565b600060208284031215611d2b57611d2a611a20565b5b6000611d3984828501611c6d565b91505092915050565b611d4b81611b97565b82525050565b6000602082019050611d666000830184611d42565b92915050565b611d7581611aaf565b8114611d8057600080fd5b50565b600081359050611d9281611d6c565b92915050565b60008060408385031215611daf57611dae611a20565b5b6000611dbd85828601611c6d565b9250506020611dce85828601611d83565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e1a82611b2b565b810181811067ffffffffffffffff82111715611e3957611e38611de2565b5b80604052505050565b6000611e4c611a16565b9050611e588282611e11565b919050565b600067ffffffffffffffff821115611e7857611e77611de2565b5b611e8182611b2b565b9050602081019050919050565b82818337600083830152505050565b6000611eb0611eab84611e5d565b611e42565b905082815260208101848484011115611ecc57611ecb611ddd565b5b611ed7848285611e8e565b509392505050565b600082601f830112611ef457611ef3611dd8565b5b8135611f04848260208601611e9d565b91505092915050565b60008060008060808587031215611f2757611f26611a20565b5b6000611f3587828801611c6d565b9450506020611f4687828801611c6d565b9350506040611f5787828801611bb8565b925050606085013567ffffffffffffffff811115611f7857611f77611a25565b5b611f8487828801611edf565b91505092959194509250565b60008060408385031215611fa757611fa6611a20565b5b6000611fb585828601611c6d565b9250506020611fc685828601611c6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061201757607f821691505b60208210810361202a57612029611fd0565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061208c602183611af0565b915061209782612030565b604082019050919050565b600060208201905081810360008301526120bb8161207f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061211e603d83611af0565b9150612129826120c2565b604082019050919050565b6000602082019050818103600083015261214d81612111565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006121b0602d83611af0565b91506121bb82612154565b604082019050919050565b600060208201905081810360008301526121df816121a3565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061221c601883611af0565b9150612227826121e6565b602082019050919050565b6000602082019050818103600083015261224b8161220f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006122ae602983611af0565b91506122b982612252565b604082019050919050565b600060208201905081810360008301526122dd816122a1565b9050919050565b600081905092915050565b7f7b226e616d65223a20224372656469742053797374656d20536f756c626f756e60008201527f6420546f6b656e20284353534254292023000000000000000000000000000000602082015250565b600061234b6031836122e4565b9150612356826122ef565b603182019050919050565b600061236c82611ae5565b61237681856122e4565b9350612386818560208601611b01565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006123c86002836122e4565b91506123d382612392565b600282019050919050565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b6000612414600f836122e4565b915061241f826123de565b600f82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b60006124606001836122e4565b915061246b8261242a565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006124ac6001836122e4565b91506124b782612476565b600182019050919050565b60006124cd8261233e565b91506124d98285612361565b91506124e4826123bb565b91506124ef82612407565b91506124fb8284612361565b915061250682612453565b91506125118261249f565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612553601d836122e4565b915061255e8261251d565b601d82019050919050565b600061257482612546565b91506125808284612361565b915081905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006125e7602583611af0565b91506125f28261258b565b604082019050919050565b60006020820190508181036000830152612616816125da565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612679602483611af0565b91506126848261261d565b604082019050919050565b600060208201905081810360008301526126a88161266c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006126e5602083611af0565b91506126f0826126af565b602082019050919050565b60006020820190508181036000830152612714816126d8565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612751601c83611af0565b915061275c8261271b565b602082019050919050565b6000602082019050818103600083015261278081612744565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006127bd601983611af0565b91506127c882612787565b602082019050919050565b600060208201905081810360008301526127ec816127b0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061284f603283611af0565b915061285a826127f3565b604082019050919050565b6000602082019050818103600083015261287e81612842565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006128c08286612361565b91506128cc8285612361565b91506128d88284612361565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061291f82611b97565b915061292a83611b97565b9250828201905080821115612942576129416128e5565b5b92915050565b600061295382611b97565b915061295e83611b97565b92508261296e5761296d612885565b5b828204905092915050565b600061298482611b97565b915061298f83611b97565b925082820261299d81611b97565b915082820484148315176129b4576129b36128e5565b5b5092915050565b7f534f554c424f554e443a204e6f6e2d5472616e7366657261626c652e00000000600082015250565b60006129f1601c83611af0565b91506129fc826129bb565b602082019050919050565b60006020820190508181036000830152612a20816129e4565b9050919050565b7f534f554c424f554e443a2045766572796f6e652073686f756c64206f6e6c792060008201527f686176652031205342542e000000000000000000000000000000000000000000602082015250565b6000612a83602b83611af0565b9150612a8e82612a27565b604082019050919050565b60006020820190508181036000830152612ab281612a76565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ae082612ab9565b612aea8185612ac4565b9350612afa818560208601611b01565b612b0381611b2b565b840191505092915050565b6000608082019050612b236000830187611c2c565b612b306020830186611c2c565b612b3d6040830185611d42565b8181036060830152612b4f8184612ad5565b905095945050505050565b600081519050612b6981611a56565b92915050565b600060208284031215612b8557612b84611a20565b5b6000612b9384828501612b5a565b9150509291505056fe5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23a2646970667358221220df96b4c98d5a6ddc854dc77f2c0bb9a4040def571f5f16ce67e7f11ffc90c1ca64736f6c63430008130033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636a6278421161008c578063a22cb46511610066578063a22cb4651461026f578063b88d4fde1461028b578063c87b56dd146102a7578063e985e9c5146102d7576100ea565b80636a627842146101f157806370a082311461022157806395d89b4114610251576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611a82565b610307565b6040516101169190611aca565b60405180910390f35b6101276103e9565b6040516101349190611b75565b60405180910390f35b61015760048036038101906101529190611bcd565b61047b565b6040516101649190611c3b565b60405180910390f35b61018760048036038101906101829190611c82565b6104c1565b005b6101a3600480360381019061019e9190611cc2565b6105d8565b005b6101bf60048036038101906101ba9190611cc2565b610638565b005b6101db60048036038101906101d69190611bcd565b610658565b6040516101e89190611c3b565b60405180910390f35b61020b60048036038101906102069190611d15565b6106de565b6040516102189190611d51565b60405180910390f35b61023b60048036038101906102369190611d15565b61070b565b6040516102489190611d51565b60405180910390f35b6102596107c2565b6040516102669190611b75565b60405180910390f35b61028960048036038101906102849190611d98565b610854565b005b6102a560048036038101906102a09190611f0d565b61086a565b005b6102c160048036038101906102bc9190611bcd565b6108cc565b6040516102ce9190611b75565b60405180910390f35b6102f160048036038101906102ec9190611f90565b61093d565b6040516102fe9190611aca565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e1826109d1565b5b9050919050565b6060600080546103f890611fff565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611fff565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610a3b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610658565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610533906120a2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055b610a86565b73ffffffffffffffffffffffffffffffffffffffff16148061058a575061058981610584610a86565b61093d565b5b6105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090612134565b60405180910390fd5b6105d38383610a8e565b505050565b6105e96105e3610a86565b82610b47565b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906121c6565b60405180910390fd5b610633838383610bdc565b505050565b6106538383836040518060200160405280600081525061086a565b505050565b60008061066483610ed5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90612232565b60405180910390fd5b80915050919050565b60006106ea6006610f12565b60006106f66006610f28565b90506107028382610f36565b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610772906122c4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107d190611fff565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90611fff565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b61086661085f610a86565b8383611153565b5050565b61087b610875610a86565b83610b47565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b1906121c6565b60405180910390fd5b6108c6848484846112bf565b50505050565b60606108d782610a3b565b60006109136108e58461131b565b6108ee856113e9565b6040516020016108ff9291906124c2565b604051602081830303815290604052611466565b9050806040516020016109269190612569565b604051602081830303815290604052915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610a44816115c9565b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612232565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b0183610658565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610b5383610658565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b955750610b94818561093d565b5b80610bd357508373ffffffffffffffffffffffffffffffffffffffff16610bbb8461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610bfc82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906125fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb89061268f565b60405180910390fd5b610cce838383600161160a565b8273ffffffffffffffffffffffffffffffffffffffff16610cee82610658565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906125fd565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ed0838383600161170d565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906126fb565b60405180910390fd5b610fae816115c9565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590612767565b60405180910390fd5b610ffc60008383600161160a565b611005816115c9565b15611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612767565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461114f60008383600161170d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b8906127d3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112b29190611aca565b60405180910390a3505050565b6112ca848484610bdc565b6112d684848484611713565b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612865565b60405180910390fd5b50505050565b60606000600161132a8461189a565b01905060008167ffffffffffffffff81111561134957611348611de2565b5b6040519080825280601f01601f19166020018201604052801561137b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156113de578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816113d2576113d1612885565b5b04945060008503611389575b819350505050919050565b606060006113f68361131b565b9050600060405180610960016040528061093c815260200161447861093c913990506000604051806118c0016040528061189b8152602001612b9d61189b9139905081838260405160200161144d939291906128b4565b6040516020818303038152906040529350505050919050565b60606000825103611488576040518060200160405280600081525090506115c4565b600060405180606001604052806040815260200161443860409139905060006003600285516114b79190612914565b6114c19190612948565b60046114cd9190612979565b67ffffffffffffffff8111156114e6576114e5611de2565b5b6040519080825280601f01601f1916602001820160405280156115185781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015611584576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050611529565b50506003865106600181146115a057600281146115b3576115bb565b603d6001830353603d60028303536115bb565b603d60018303535b50505080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166115eb83610ed5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116715750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a790612a07565b60405180910390fd5b60006116bb8461070b565b146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290612a99565b60405180910390fd5b611707848484846119ed565b50505050565b50505050565b60006117348473ffffffffffffffffffffffffffffffffffffffff166119f3565b1561188d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261175d610a86565b8786866040518563ffffffff1660e01b815260040161177f9493929190612b0e565b6020604051808303816000875af19250505080156117bb57506040513d601f19601f820116820180604052508101906117b89190612b6f565b60015b61183d573d80600081146117eb576040519150601f19603f3d011682016040523d82523d6000602084013e6117f0565b606091505b506000815103611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90612865565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611892565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106118f8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816118ee576118ed612885565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611935576d04ee2d6d415b85acef8100000000838161192b5761192a612885565b5b0492506020810190505b662386f26fc10000831061196457662386f26fc10000838161195a57611959612885565b5b0492506010810190505b6305f5e100831061198d576305f5e100838161198357611982612885565b5b0492506008810190505b61271083106119b25761271083816119a8576119a7612885565b5b0492506004810190505b606483106119d557606483816119cb576119ca612885565b5b0492506002810190505b600a83106119e4576001810190505b80915050919050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a5f81611a2a565b8114611a6a57600080fd5b50565b600081359050611a7c81611a56565b92915050565b600060208284031215611a9857611a97611a20565b5b6000611aa684828501611a6d565b91505092915050565b60008115159050919050565b611ac481611aaf565b82525050565b6000602082019050611adf6000830184611abb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b1f578082015181840152602081019050611b04565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b4782611ae5565b611b518185611af0565b9350611b61818560208601611b01565b611b6a81611b2b565b840191505092915050565b60006020820190508181036000830152611b8f8184611b3c565b905092915050565b6000819050919050565b611baa81611b97565b8114611bb557600080fd5b50565b600081359050611bc781611ba1565b92915050565b600060208284031215611be357611be2611a20565b5b6000611bf184828501611bb8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c2582611bfa565b9050919050565b611c3581611c1a565b82525050565b6000602082019050611c506000830184611c2c565b92915050565b611c5f81611c1a565b8114611c6a57600080fd5b50565b600081359050611c7c81611c56565b92915050565b60008060408385031215611c9957611c98611a20565b5b6000611ca785828601611c6d565b9250506020611cb885828601611bb8565b9150509250929050565b600080600060608486031215611cdb57611cda611a20565b5b6000611ce986828701611c6d565b9350506020611cfa86828701611c6d565b9250506040611d0b86828701611bb8565b9150509250925092565b600060208284031215611d2b57611d2a611a20565b5b6000611d3984828501611c6d565b91505092915050565b611d4b81611b97565b82525050565b6000602082019050611d666000830184611d42565b92915050565b611d7581611aaf565b8114611d8057600080fd5b50565b600081359050611d9281611d6c565b92915050565b60008060408385031215611daf57611dae611a20565b5b6000611dbd85828601611c6d565b9250506020611dce85828601611d83565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e1a82611b2b565b810181811067ffffffffffffffff82111715611e3957611e38611de2565b5b80604052505050565b6000611e4c611a16565b9050611e588282611e11565b919050565b600067ffffffffffffffff821115611e7857611e77611de2565b5b611e8182611b2b565b9050602081019050919050565b82818337600083830152505050565b6000611eb0611eab84611e5d565b611e42565b905082815260208101848484011115611ecc57611ecb611ddd565b5b611ed7848285611e8e565b509392505050565b600082601f830112611ef457611ef3611dd8565b5b8135611f04848260208601611e9d565b91505092915050565b60008060008060808587031215611f2757611f26611a20565b5b6000611f3587828801611c6d565b9450506020611f4687828801611c6d565b9350506040611f5787828801611bb8565b925050606085013567ffffffffffffffff811115611f7857611f77611a25565b5b611f8487828801611edf565b91505092959194509250565b60008060408385031215611fa757611fa6611a20565b5b6000611fb585828601611c6d565b9250506020611fc685828601611c6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061201757607f821691505b60208210810361202a57612029611fd0565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061208c602183611af0565b915061209782612030565b604082019050919050565b600060208201905081810360008301526120bb8161207f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061211e603d83611af0565b9150612129826120c2565b604082019050919050565b6000602082019050818103600083015261214d81612111565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006121b0602d83611af0565b91506121bb82612154565b604082019050919050565b600060208201905081810360008301526121df816121a3565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061221c601883611af0565b9150612227826121e6565b602082019050919050565b6000602082019050818103600083015261224b8161220f565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006122ae602983611af0565b91506122b982612252565b604082019050919050565b600060208201905081810360008301526122dd816122a1565b9050919050565b600081905092915050565b7f7b226e616d65223a20224372656469742053797374656d20536f756c626f756e60008201527f6420546f6b656e20284353534254292023000000000000000000000000000000602082015250565b600061234b6031836122e4565b9150612356826122ef565b603182019050919050565b600061236c82611ae5565b61237681856122e4565b9350612386818560208601611b01565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006123c86002836122e4565b91506123d382612392565b600282019050919050565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b6000612414600f836122e4565b915061241f826123de565b600f82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b60006124606001836122e4565b915061246b8261242a565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006124ac6001836122e4565b91506124b782612476565b600182019050919050565b60006124cd8261233e565b91506124d98285612361565b91506124e4826123bb565b91506124ef82612407565b91506124fb8284612361565b915061250682612453565b91506125118261249f565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612553601d836122e4565b915061255e8261251d565b601d82019050919050565b600061257482612546565b91506125808284612361565b915081905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006125e7602583611af0565b91506125f28261258b565b604082019050919050565b60006020820190508181036000830152612616816125da565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612679602483611af0565b91506126848261261d565b604082019050919050565b600060208201905081810360008301526126a88161266c565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006126e5602083611af0565b91506126f0826126af565b602082019050919050565b60006020820190508181036000830152612714816126d8565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612751601c83611af0565b915061275c8261271b565b602082019050919050565b6000602082019050818103600083015261278081612744565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006127bd601983611af0565b91506127c882612787565b602082019050919050565b600060208201905081810360008301526127ec816127b0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061284f603283611af0565b915061285a826127f3565b604082019050919050565b6000602082019050818103600083015261287e81612842565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006128c08286612361565b91506128cc8285612361565b91506128d88284612361565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061291f82611b97565b915061292a83611b97565b9250828201905080821115612942576129416128e5565b5b92915050565b600061295382611b97565b915061295e83611b97565b92508261296e5761296d612885565b5b828204905092915050565b600061298482611b97565b915061298f83611b97565b925082820261299d81611b97565b915082820484148315176129b4576129b36128e5565b5b5092915050565b7f534f554c424f554e443a204e6f6e2d5472616e7366657261626c652e00000000600082015250565b60006129f1601c83611af0565b91506129fc826129bb565b602082019050919050565b60006020820190508181036000830152612a20816129e4565b9050919050565b7f534f554c424f554e443a2045766572796f6e652073686f756c64206f6e6c792060008201527f686176652031205342542e000000000000000000000000000000000000000000602082015250565b6000612a83602b83611af0565b9150612a8e82612a27565b604082019050919050565b60006020820190508181036000830152612ab281612a76565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612ae082612ab9565b612aea8185612ac4565b9350612afa818560208601611b01565b612b0381611b2b565b840191505092915050565b6000608082019050612b236000830187611c2c565b612b306020830186611c2c565b612b3d6040830185611d42565b8181036060830152612b4f8184612ad5565b905095945050505050565b600081519050612b6981611a56565b92915050565b600060208284031215612b8557612b84611a20565b5b6000612b9384828501612b5a565b9150509291505056fe5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23a2646970667358221220df96b4c98d5a6ddc854dc77f2c0bb9a4040def571f5f16ce67e7f11ffc90c1ca64736f6c63430008130033", "immutableReferences": {}, "generatedSources": [ { @@ -3333,7 +3333,7 @@ { "ast": { "nodeType": "YulBlock", - "src": "0:31566:14", + "src": "0:33472:14", "statements": [ { "body": { @@ -15807,32 +15807,732 @@ { "body": { "nodeType": "YulBlock", - "src": "29946:32:14", + "src": "29994:64:14", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "30012:6:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30020:1:14", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30008:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30008:14:14" + }, + { + "hexValue": "534f554c424f554e443a204e6f6e2d5472616e7366657261626c652e", + "kind": "string", + "nodeType": "YulLiteral", + "src": "30024:30:14", + "type": "", + "value": "SOULBOUND: Non-Transferable." + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30001:6:14" + }, + "nodeType": "YulFunctionCall", + "src": "30001:54:14" + }, + "nodeType": "YulExpressionStatement", + "src": "30001:54:14" + } + ] + }, + "name": "store_literal_in_memory_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "29986:6:14", + "type": "" + } + ], + "src": "29888:170:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30206:204:14", "statements": [ { "nodeType": "YulAssignment", - "src": "29953:22:14", + "src": "30212:74:14", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "30278:3:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30283:2:14", + "type": "", + "value": "28" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "30219:58:14" + }, + "nodeType": "YulFunctionCall", + "src": "30219:67:14" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "30212:3:14" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "30380:3:14" + } + ], + "functionName": { + "name": "store_literal_in_memory_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa", + "nodeType": "YulIdentifier", + "src": "30291:88:14" + }, + "nodeType": "YulFunctionCall", + "src": "30291:93:14" + }, + "nodeType": "YulExpressionStatement", + "src": "30291:93:14" + }, + { + "nodeType": "YulAssignment", + "src": "30389:19:14", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "30400:3:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30405:2:14", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30396:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30396:12:14" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "30389:3:14" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "30194:3:14", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "30202:3:14", + "type": "" + } + ], + "src": "30060:350:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30583:232:14", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "30589:26:14", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30601:9:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30612:2:14", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30597:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30597:18:14" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "30589:4:14" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30632:9:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30643:1:14", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30628:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30628:17:14" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "30651:4:14" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30657:9:14" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "30647:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30647:20:14" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30621:6:14" + }, + "nodeType": "YulFunctionCall", + "src": "30621:47:14" + }, + "nodeType": "YulExpressionStatement", + "src": "30621:47:14" + }, + { + "nodeType": "YulAssignment", + "src": "30673:139:14", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "30807:4:14" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "30681:124:14" + }, + "nodeType": "YulFunctionCall", + "src": "30681:131:14" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "30673:4:14" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "30563:9:14", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "30578:4:14", + "type": "" + } + ], + "src": "30412:403:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30923:112:14", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "30941:6:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30949:1:14", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30937:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "30937:14:14" + }, + { + "hexValue": "534f554c424f554e443a2045766572796f6e652073686f756c64206f6e6c7920", + "kind": "string", + "nodeType": "YulLiteral", + "src": "30953:34:14", + "type": "", + "value": "SOULBOUND: Everyone should only " + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30930:6:14" + }, + "nodeType": "YulFunctionCall", + "src": "30930:58:14" + }, + "nodeType": "YulExpressionStatement", + "src": "30930:58:14" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31005:6:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31013:2:14", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31001:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "31001:15:14" + }, + { + "hexValue": "686176652031205342542e", + "kind": "string", + "nodeType": "YulLiteral", + "src": "31018:13:14", + "type": "", + "value": "have 1 SBT." + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30994:6:14" + }, + "nodeType": "YulFunctionCall", + "src": "30994:38:14" + }, + "nodeType": "YulExpressionStatement", + "src": "30994:38:14" + } + ] + }, + "name": "store_literal_in_memory_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "30915:6:14", + "type": "" + } + ], + "src": "30817:218:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31183:204:14", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "31189:74:14", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "31255:3:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31260:2:14", + "type": "", + "value": "43" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "31196:58:14" + }, + "nodeType": "YulFunctionCall", + "src": "31196:67:14" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "31189:3:14" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "31357:3:14" + } + ], + "functionName": { + "name": "store_literal_in_memory_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b", + "nodeType": "YulIdentifier", + "src": "31268:88:14" + }, + "nodeType": "YulFunctionCall", + "src": "31268:93:14" + }, + "nodeType": "YulExpressionStatement", + "src": "31268:93:14" + }, + { + "nodeType": "YulAssignment", + "src": "31366:19:14", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "31377:3:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31382:2:14", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31373:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "31373:12:14" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "31366:3:14" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "31171:3:14", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "31179:3:14", + "type": "" + } + ], + "src": "31037:350:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31560:232:14", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "31566:26:14", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31578:9:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31589:2:14", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31574:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "31574:18:14" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "31566:4:14" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31609:9:14" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31620:1:14", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31605:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "31605:17:14" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "31628:4:14" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31634:9:14" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "31624:3:14" + }, + "nodeType": "YulFunctionCall", + "src": "31624:20:14" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31598:6:14" + }, + "nodeType": "YulFunctionCall", + "src": "31598:47:14" + }, + "nodeType": "YulExpressionStatement", + "src": "31598:47:14" + }, + { + "nodeType": "YulAssignment", + "src": "31650:139:14", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "31784:4:14" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "31658:124:14" + }, + "nodeType": "YulFunctionCall", + "src": "31658:131:14" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "31650:4:14" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "31540:9:14", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "31555:4:14", + "type": "" + } + ], + "src": "31389:403:14" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31852:32:14", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "31859:22:14", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "29969:5:14" + "src": "31875:5:14" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "29963:5:14" + "src": "31869:5:14" }, "nodeType": "YulFunctionCall", - "src": "29963:12:14" + "src": "31869:12:14" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "29953:6:14" + "src": "31859:6:14" } ] } @@ -15844,7 +16544,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "29929:5:14", + "src": "31835:5:14", "type": "" } ], @@ -15852,16 +16552,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "29939:6:14", + "src": "31845:6:14", "type": "" } ], - "src": "29888:90:14" + "src": "31794:90:14" }, { "body": { "nodeType": "YulBlock", - "src": "30075:61:14", + "src": "31981:61:14", "statements": [ { "expression": { @@ -15869,39 +16569,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "30088:3:14" + "src": "31994:3:14" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "30093:6:14" + "src": "31999:6:14" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "30081:6:14" + "src": "31987:6:14" }, "nodeType": "YulFunctionCall", - "src": "30081:19:14" + "src": "31987:19:14" }, "nodeType": "YulExpressionStatement", - "src": "30081:19:14" + "src": "31987:19:14" }, { "nodeType": "YulAssignment", - "src": "30105:29:14", + "src": "32011:29:14", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "30124:3:14" + "src": "32030:3:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30129:4:14", + "src": "32035:4:14", "type": "", "value": "0x20" } @@ -15909,16 +16609,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30120:3:14" + "src": "32026:3:14" }, "nodeType": "YulFunctionCall", - "src": "30120:14:14" + "src": "32026:14:14" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "30105:11:14" + "src": "32011:11:14" } ] } @@ -15930,13 +16630,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "30047:3:14", + "src": "31953:3:14", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "30052:6:14", + "src": "31958:6:14", "type": "" } ], @@ -15944,74 +16644,74 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "30063:11:14", + "src": "31969:11:14", "type": "" } ], - "src": "29980:156:14" + "src": "31886:156:14" }, { "body": { "nodeType": "YulBlock", - "src": "30228:263:14", + "src": "32134:263:14", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "30234:52:14", + "src": "32140:52:14", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "30280:5:14" + "src": "32186:5:14" } ], "functionName": { "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "30248:31:14" + "src": "32154:31:14" }, "nodeType": "YulFunctionCall", - "src": "30248:38:14" + "src": "32154:38:14" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "30238:6:14", + "src": "32144:6:14", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "30291:77:14", + "src": "32197:77:14", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "30356:3:14" + "src": "32262:3:14" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "30361:6:14" + "src": "32267:6:14" } ], "functionName": { "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "30298:57:14" + "src": "32204:57:14" }, "nodeType": "YulFunctionCall", - "src": "30298:70:14" + "src": "32204:70:14" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "30291:3:14" + "src": "32197:3:14" } ] }, @@ -16023,12 +16723,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "30412:5:14" + "src": "32318:5:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30419:4:14", + "src": "32325:4:14", "type": "", "value": "0x20" } @@ -16036,73 +16736,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30408:3:14" + "src": "32314:3:14" }, "nodeType": "YulFunctionCall", - "src": "30408:16:14" + "src": "32314:16:14" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "30426:3:14" + "src": "32332:3:14" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "30431:6:14" + "src": "32337:6:14" } ], "functionName": { "name": "copy_memory_to_memory_with_cleanup", "nodeType": "YulIdentifier", - "src": "30373:34:14" + "src": "32279:34:14" }, "nodeType": "YulFunctionCall", - "src": "30373:65:14" + "src": "32279:65:14" }, "nodeType": "YulExpressionStatement", - "src": "30373:65:14" + "src": "32279:65:14" }, { "nodeType": "YulAssignment", - "src": "30443:46:14", + "src": "32349:46:14", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "30454:3:14" + "src": "32360:3:14" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "30481:6:14" + "src": "32387:6:14" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "30459:21:14" + "src": "32365:21:14" }, "nodeType": "YulFunctionCall", - "src": "30459:29:14" + "src": "32365:29:14" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30450:3:14" + "src": "32356:3:14" }, "nodeType": "YulFunctionCall", - "src": "30450:39:14" + "src": "32356:39:14" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "30443:3:14" + "src": "32349:3:14" } ] } @@ -16114,13 +16814,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "30209:5:14", + "src": "32115:5:14", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "30216:3:14", + "src": "32122:3:14", "type": "" } ], @@ -16128,31 +16828,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "30224:3:14", + "src": "32130:3:14", "type": "" } ], - "src": "30138:353:14" + "src": "32044:353:14" }, { "body": { "nodeType": "YulBlock", - "src": "30693:412:14", + "src": "32599:412:14", "statements": [ { "nodeType": "YulAssignment", - "src": "30699:27:14", + "src": "32605:27:14", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30711:9:14" + "src": "32617:9:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30722:3:14", + "src": "32628:3:14", "type": "", "value": "128" } @@ -16160,16 +16860,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30707:3:14" + "src": "32613:3:14" }, "nodeType": "YulFunctionCall", - "src": "30707:19:14" + "src": "32613:19:14" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30699:4:14" + "src": "32605:4:14" } ] }, @@ -16179,19 +16879,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "30776:6:14" + "src": "32682:6:14" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30789:9:14" + "src": "32695:9:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30800:1:14", + "src": "32706:1:14", "type": "", "value": "0" } @@ -16199,22 +16899,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30785:3:14" + "src": "32691:3:14" }, "nodeType": "YulFunctionCall", - "src": "30785:17:14" + "src": "32691:17:14" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "30732:43:14" + "src": "32638:43:14" }, "nodeType": "YulFunctionCall", - "src": "30732:71:14" + "src": "32638:71:14" }, "nodeType": "YulExpressionStatement", - "src": "30732:71:14" + "src": "32638:71:14" }, { "expression": { @@ -16222,19 +16922,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "30853:6:14" + "src": "32759:6:14" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30866:9:14" + "src": "32772:9:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30877:2:14", + "src": "32783:2:14", "type": "", "value": "32" } @@ -16242,22 +16942,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30862:3:14" + "src": "32768:3:14" }, "nodeType": "YulFunctionCall", - "src": "30862:18:14" + "src": "32768:18:14" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "30809:43:14" + "src": "32715:43:14" }, "nodeType": "YulFunctionCall", - "src": "30809:72:14" + "src": "32715:72:14" }, "nodeType": "YulExpressionStatement", - "src": "30809:72:14" + "src": "32715:72:14" }, { "expression": { @@ -16265,19 +16965,19 @@ { "name": "value2", "nodeType": "YulIdentifier", - "src": "30931:6:14" + "src": "32837:6:14" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30944:9:14" + "src": "32850:9:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30955:2:14", + "src": "32861:2:14", "type": "", "value": "64" } @@ -16285,22 +16985,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30940:3:14" + "src": "32846:3:14" }, "nodeType": "YulFunctionCall", - "src": "30940:18:14" + "src": "32846:18:14" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "30887:43:14" + "src": "32793:43:14" }, "nodeType": "YulFunctionCall", - "src": "30887:72:14" + "src": "32793:72:14" }, "nodeType": "YulExpressionStatement", - "src": "30887:72:14" + "src": "32793:72:14" }, { "expression": { @@ -16310,12 +17010,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30976:9:14" + "src": "32882:9:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30987:2:14", + "src": "32893:2:14", "type": "", "value": "96" } @@ -16323,73 +17023,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30972:3:14" + "src": "32878:3:14" }, "nodeType": "YulFunctionCall", - "src": "30972:18:14" + "src": "32878:18:14" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30996:4:14" + "src": "32902:4:14" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31002:9:14" + "src": "32908:9:14" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "30992:3:14" + "src": "32898:3:14" }, "nodeType": "YulFunctionCall", - "src": "30992:20:14" + "src": "32898:20:14" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "30965:6:14" + "src": "32871:6:14" }, "nodeType": "YulFunctionCall", - "src": "30965:48:14" + "src": "32871:48:14" }, "nodeType": "YulExpressionStatement", - "src": "30965:48:14" + "src": "32871:48:14" }, { "nodeType": "YulAssignment", - "src": "31018:84:14", + "src": "32924:84:14", "value": { "arguments": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "31088:6:14" + "src": "32994:6:14" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "31097:4:14" + "src": "33003:4:14" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "31026:61:14" + "src": "32932:61:14" }, "nodeType": "YulFunctionCall", - "src": "31026:76:14" + "src": "32932:76:14" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "31018:4:14" + "src": "32924:4:14" } ] } @@ -16401,31 +17101,31 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "30641:9:14", + "src": "32547:9:14", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "30653:6:14", + "src": "32559:6:14", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "30661:6:14", + "src": "32567:6:14", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "30669:6:14", + "src": "32575:6:14", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "30677:6:14", + "src": "32583:6:14", "type": "" } ], @@ -16433,41 +17133,41 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "30688:4:14", + "src": "32594:4:14", "type": "" } ], - "src": "30493:612:14" + "src": "32399:612:14" }, { "body": { "nodeType": "YulBlock", - "src": "31169:67:14", + "src": "33075:67:14", "statements": [ { "nodeType": "YulAssignment", - "src": "31175:22:14", + "src": "33081:22:14", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "31190:6:14" + "src": "33096:6:14" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "31184:5:14" + "src": "33090:5:14" }, "nodeType": "YulFunctionCall", - "src": "31184:13:14" + "src": "33090:13:14" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "31175:5:14" + "src": "33081:5:14" } ] }, @@ -16477,19 +17177,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "31228:5:14" + "src": "33134:5:14" } ], "functionName": { "name": "validator_revert_t_bytes4", "nodeType": "YulIdentifier", - "src": "31202:25:14" + "src": "33108:25:14" }, "nodeType": "YulFunctionCall", - "src": "31202:32:14" + "src": "33108:32:14" }, "nodeType": "YulExpressionStatement", - "src": "31202:32:14" + "src": "33108:32:14" } ] }, @@ -16499,13 +17199,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "31147:6:14", + "src": "33053:6:14", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "31155:3:14", + "src": "33061:3:14", "type": "" } ], @@ -16513,21 +17213,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "31163:5:14", + "src": "33069:5:14", "type": "" } ], - "src": "31107:129:14" + "src": "33013:129:14" }, { "body": { "nodeType": "YulBlock", - "src": "31314:249:14", + "src": "33220:249:14", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "31356:83:14", + "src": "33262:83:14", "statements": [ { "expression": { @@ -16535,13 +17235,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "31358:77:14" + "src": "33264:77:14" }, "nodeType": "YulFunctionCall", - "src": "31358:79:14" + "src": "33264:79:14" }, "nodeType": "YulExpressionStatement", - "src": "31358:79:14" + "src": "33264:79:14" } ] }, @@ -16552,26 +17252,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "31331:7:14" + "src": "33237:7:14" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31340:9:14" + "src": "33246:9:14" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "31327:3:14" + "src": "33233:3:14" }, "nodeType": "YulFunctionCall", - "src": "31327:23:14" + "src": "33233:23:14" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31352:2:14", + "src": "33258:2:14", "type": "", "value": "32" } @@ -16579,25 +17279,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "31323:3:14" + "src": "33229:3:14" }, "nodeType": "YulFunctionCall", - "src": "31323:32:14" + "src": "33229:32:14" }, "nodeType": "YulIf", - "src": "31320:119:14" + "src": "33226:119:14" }, { "nodeType": "YulBlock", - "src": "31445:115:14", + "src": "33351:115:14", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "31456:15:14", + "src": "33362:15:14", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "31470:1:14", + "src": "33376:1:14", "type": "", "value": "0" }, @@ -16605,14 +17305,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "31460:6:14", + "src": "33366:6:14", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "31481:73:14", + "src": "33387:73:14", "value": { "arguments": [ { @@ -16620,41 +17320,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31526:9:14" + "src": "33432:9:14" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "31537:6:14" + "src": "33443:6:14" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31522:3:14" + "src": "33428:3:14" }, "nodeType": "YulFunctionCall", - "src": "31522:22:14" + "src": "33428:22:14" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "31546:7:14" + "src": "33452:7:14" } ], "functionName": { "name": "abi_decode_t_bytes4_fromMemory", "nodeType": "YulIdentifier", - "src": "31491:30:14" + "src": "33397:30:14" }, "nodeType": "YulFunctionCall", - "src": "31491:63:14" + "src": "33397:63:14" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "31481:6:14" + "src": "33387:6:14" } ] } @@ -16668,13 +17368,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "31284:9:14", + "src": "33190:9:14", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "31295:7:14", + "src": "33201:7:14", "type": "" } ], @@ -16682,23 +17382,23 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "31307:6:14", + "src": "33213:6:14", "type": "" } ], - "src": "31238:325:14" + "src": "33144:325:14" } ] }, - "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory_with_cleanup(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n calldatacopy(dst, src, length)\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory_with_cleanup(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approval to current owne\")\n\n mstore(add(memPtr, 32), \"r\")\n\n }\n\n function abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve caller is not to\")\n\n mstore(add(memPtr, 32), \"ken owner or approved for all\")\n\n }\n\n function abi_encode_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 61)\n store_literal_in_memory_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: caller is not token owne\")\n\n mstore(add(memPtr, 32), \"r or approved\")\n\n }\n\n function abi_encode_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n store_literal_in_memory_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: invalid token ID\")\n\n }\n\n function abi_encode_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 24)\n store_literal_in_memory_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: address zero is not a va\")\n\n mstore(add(memPtr, 32), \"lid owner\")\n\n }\n\n function abi_encode_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function store_literal_in_memory_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317(memPtr) {\n\n mstore(add(memPtr, 0), 0x7b226e616d65223a20224372656469742053797374656d20536f756c626f756e)\n\n mstore(add(memPtr, 32), \"d Token (CSSBT) #\")\n\n }\n\n function abi_encode_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 49)\n store_literal_in_memory_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317(pos)\n end := add(pos, 49)\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function store_literal_in_memory_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb(memPtr) {\n\n mstore(add(memPtr, 0), 0x222c000000000000000000000000000000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 2)\n store_literal_in_memory_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb(pos)\n end := add(pos, 2)\n }\n\n function store_literal_in_memory_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8(memPtr) {\n\n mstore(add(memPtr, 0), 0x22696d6167655f64617461223a20220000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 15)\n store_literal_in_memory_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8(pos)\n end := add(pos, 15)\n }\n\n function store_literal_in_memory_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0(memPtr) {\n\n mstore(add(memPtr, 0), 0x2200000000000000000000000000000000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 1)\n store_literal_in_memory_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0(pos)\n end := add(pos, 1)\n }\n\n function store_literal_in_memory_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff(memPtr) {\n\n mstore(add(memPtr, 0), \"}\")\n\n}\n\nfunction abi_encode_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 1)\n store_literal_in_memory_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff(pos)\n end := add(pos, 1)\n}\n\nfunction abi_encode_tuple_packed_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_t_string_memory_ptr_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n pos := abi_encode_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n pos := abi_encode_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n end := pos\n}\n\nfunction store_literal_in_memory_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa(memPtr) {\n\n mstore(add(memPtr, 0), \"data:application/json;base64,\")\n\n}\n\nfunction abi_encode_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 29)\n store_literal_in_memory_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa(pos)\n end := add(pos, 29)\n}\n\nfunction abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n}\n\nfunction store_literal_in_memory_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer from incorrect \")\n\n mstore(add(memPtr, 32), \"owner\")\n\n}\n\nfunction abi_encode_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n store_literal_in_memory_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to the zero add\")\n\n mstore(add(memPtr, 32), \"ress\")\n\n}\n\nfunction abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: mint to the zero address\")\n\n}\n\nfunction abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: token already minted\")\n\n}\n\nfunction abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve to caller\")\n\n}\n\nfunction abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to non ERC721Re\")\n\n mstore(add(memPtr, 32), \"ceiver implementer\")\n\n}\n\nfunction abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 50)\n store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n}\n\nfunction abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value2, value1, value0) -> end {\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value2, pos)\n\n end := pos\n}\n\nfunction panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n}\n\nfunction checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n}\n\nfunction checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n}\n\nfunction checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n}\n\nfunction array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n}\n\nfunction array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n}\n\nfunction abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n}\n\nfunction abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n}\n\nfunction abi_decode_t_bytes4_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n}\n\nfunction abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4_fromMemory(add(headStart, offset), dataEnd)\n }\n\n}\n\n}\n", + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory_with_cleanup(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n calldatacopy(dst, src, length)\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory_with_cleanup(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x22() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n\n function extract_byte_array_length(data) -> length {\n length := div(data, 2)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) {\n length := and(length, 0x7f)\n }\n\n if eq(outOfPlaceEncoding, lt(length, 32)) {\n panic_error_0x22()\n }\n }\n\n function store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approval to current owne\")\n\n mstore(add(memPtr, 32), \"r\")\n\n }\n\n function abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 33)\n store_literal_in_memory_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve caller is not to\")\n\n mstore(add(memPtr, 32), \"ken owner or approved for all\")\n\n }\n\n function abi_encode_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 61)\n store_literal_in_memory_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_c6e14a63ffb144eeef7cce6988e5dce07c60a7e0a7b1ef25dbe18c61483e0a83_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: caller is not token owne\")\n\n mstore(add(memPtr, 32), \"r or approved\")\n\n }\n\n function abi_encode_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 45)\n store_literal_in_memory_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_12a8e5623d251e191fe4a291d9a59bcc01a4db7a1f5c20fc8de44358c18308af_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: invalid token ID\")\n\n }\n\n function abi_encode_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 24)\n store_literal_in_memory_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b08d2b0fec7cc108ab049809a8beb42779d969a49299d0c317c907d9db22974f_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: address zero is not a va\")\n\n mstore(add(memPtr, 32), \"lid owner\")\n\n }\n\n function abi_encode_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 41)\n store_literal_in_memory_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_6d05c90094f31cfeb8f0eb86f0a513af3f7f8992991fbde41b08aa7960677159_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function store_literal_in_memory_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317(memPtr) {\n\n mstore(add(memPtr, 0), 0x7b226e616d65223a20224372656469742053797374656d20536f756c626f756e)\n\n mstore(add(memPtr, 32), \"d Token (CSSBT) #\")\n\n }\n\n function abi_encode_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 49)\n store_literal_in_memory_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317(pos)\n end := add(pos, 49)\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function store_literal_in_memory_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb(memPtr) {\n\n mstore(add(memPtr, 0), 0x222c000000000000000000000000000000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 2)\n store_literal_in_memory_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb(pos)\n end := add(pos, 2)\n }\n\n function store_literal_in_memory_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8(memPtr) {\n\n mstore(add(memPtr, 0), 0x22696d6167655f64617461223a20220000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 15)\n store_literal_in_memory_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8(pos)\n end := add(pos, 15)\n }\n\n function store_literal_in_memory_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0(memPtr) {\n\n mstore(add(memPtr, 0), 0x2200000000000000000000000000000000000000000000000000000000000000)\n\n }\n\n function abi_encode_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 1)\n store_literal_in_memory_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0(pos)\n end := add(pos, 1)\n }\n\n function store_literal_in_memory_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff(memPtr) {\n\n mstore(add(memPtr, 0), \"}\")\n\n}\n\nfunction abi_encode_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 1)\n store_literal_in_memory_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff(pos)\n end := add(pos, 1)\n}\n\nfunction abi_encode_tuple_packed_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_t_string_memory_ptr_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_t_string_memory_ptr_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value1, value0) -> end {\n\n pos := abi_encode_t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n pos := abi_encode_t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n end := pos\n}\n\nfunction store_literal_in_memory_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa(memPtr) {\n\n mstore(add(memPtr, 0), \"data:application/json;base64,\")\n\n}\n\nfunction abi_encode_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_to_t_string_memory_ptr_nonPadded_inplace_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack(pos, 29)\n store_literal_in_memory_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa(pos)\n end := add(pos, 29)\n}\n\nfunction abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_to_t_string_memory_ptr_nonPadded_inplace_fromStack( pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n}\n\nfunction store_literal_in_memory_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer from incorrect \")\n\n mstore(add(memPtr, 32), \"owner\")\n\n}\n\nfunction abi_encode_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 37)\n store_literal_in_memory_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_277f8ee9d5b4fc3c4149386f24de0fc1bbc63a8210e2197bfd1c0376a2ac5f48_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to the zero add\")\n\n mstore(add(memPtr, 32), \"ress\")\n\n}\n\nfunction abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n store_literal_in_memory_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: mint to the zero address\")\n\n}\n\nfunction abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: token already minted\")\n\n}\n\nfunction abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n store_literal_in_memory_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: approve to caller\")\n\n}\n\nfunction abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 25)\n store_literal_in_memory_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(memPtr) {\n\n mstore(add(memPtr, 0), \"ERC721: transfer to non ERC721Re\")\n\n mstore(add(memPtr, 32), \"ceiver implementer\")\n\n}\n\nfunction abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 50)\n store_literal_in_memory_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n}\n\nfunction abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value2, value1, value0) -> end {\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value1, pos)\n\n pos := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack(value2, pos)\n\n end := pos\n}\n\nfunction panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n}\n\nfunction checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n sum := add(x, y)\n\n if gt(x, sum) { panic_error_0x11() }\n\n}\n\nfunction checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n}\n\nfunction checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n let product_raw := mul(x, y)\n product := cleanup_t_uint256(product_raw)\n\n // overflow, if x != 0 and y != product/x\n if iszero(\n or(\n iszero(x),\n eq(y, div(product, x))\n )\n ) { panic_error_0x11() }\n\n}\n\nfunction store_literal_in_memory_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa(memPtr) {\n\n mstore(add(memPtr, 0), \"SOULBOUND: Non-Transferable.\")\n\n}\n\nfunction abi_encode_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 28)\n store_literal_in_memory_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa(pos)\n end := add(pos, 32)\n}\n\nfunction abi_encode_tuple_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction store_literal_in_memory_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b(memPtr) {\n\n mstore(add(memPtr, 0), \"SOULBOUND: Everyone should only \")\n\n mstore(add(memPtr, 32), \"have 1 SBT.\")\n\n}\n\nfunction abi_encode_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 43)\n store_literal_in_memory_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b(pos)\n end := add(pos, 64)\n}\n\nfunction abi_encode_tuple_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b_to_t_string_memory_ptr_fromStack( tail)\n\n}\n\nfunction array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n}\n\nfunction array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n}\n\nfunction abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n}\n\nfunction abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n}\n\nfunction abi_decode_t_bytes4_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n}\n\nfunction abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4_fromMemory(add(headStart, offset), dataEnd)\n }\n\n}\n\n}\n", "id": 14, "language": "Yul", "name": "#utility.yul" } ], - "sourceMap": "310:10015:13:-:0;;;432:54;;;;;;;;;;1390:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:5;1456;:13;;;;;;:::i;:::-;;1489:7;1479;:17;;;;;;:::i;:::-;;1390:113;;310:10015:13;;7:99:14;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;310:10015:13:-;;;;;;;", - "deployedSourceMap": "310:10015:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:300:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2471:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3468:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4612:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4974:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2190:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;492:203:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1929:204:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2633:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4169:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5189:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;701:706:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4388:162:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1570:300;1672:4;1722:25;1707:40;;;:11;:40;;;;:104;;;;1778:33;1763:48;;;:11;:48;;;;1707:104;:156;;;;1827:36;1851:11;1827:23;:36::i;:::-;1707:156;1688:175;;1570:300;;;:::o;2471:98::-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;4071:15;:24;4087:7;4071:24;;;;;;;;;;;;;;;;;;;;;4064:31;;3935:167;;;:::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;3605:11;;:2;:11;;;3597:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3702:5;3686:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3711:37;3728:5;3735:12;:10;:12::i;:::-;3711:16;:37::i;:::-;3686:62;3665:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3538:336;3468:406;;:::o;4612:296::-;4771:41;4790:12;:10;:12::i;:::-;4804:7;4771:18;:41::i;:::-;4763:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;:::-;4612:296;;;:::o;4974:149::-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;:::-;4974:149;;;:::o;2190:219::-;2262:7;2281:13;2297:17;2306:7;2297:8;:17::i;:::-;2281:33;;2349:1;2332:19;;:5;:19;;;2324:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2397:5;2390:12;;;2190:219;;;:::o;492:203:13:-;538:7;557:21;:9;:19;:21::i;:::-;588:17;608:19;:9;:17;:19::i;:::-;588:39;;637:24;643:6;651:9;637:5;:24::i;:::-;679:9;672:16;;;492:203;;;:::o;1929:204:0:-;2001:7;2045:1;2028:19;;:5;:19;;;2020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2110:9;:16;2120:5;2110:16;;;;;;;;;;;;;;;;2103:23;;1929:204;;;:::o;2633:102::-;2689:13;2721:7;2714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2633:102;:::o;4169:153::-;4263:52;4282:12;:10;:12::i;:::-;4296:8;4306;4263:18;:52::i;:::-;4169:153;;:::o;5189:276::-;5319:41;5338:12;:10;:12::i;:::-;5352:7;5319:18;:41::i;:::-;5311:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;701:706:13:-;774:13;799:23;814:7;799:14;:23::i;:::-;833:18;854:466;1051:25;1068:7;1051:16;:25::i;:::-;1175:20;1187:7;1175:11;:20::i;:::-;932:343;;;;;;;;;:::i;:::-;;;;;;;;;;;;;854:13;:466::i;:::-;833:487;;1394:4;1344:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;1330:70;;;701:706;;;:::o;4388:162:0:-;4485:4;4508:18;:25;4527:5;4508:25;;;;;;;;;;;;;;;:35;4534:8;4508:35;;;;;;;;;;;;;;;;;;;;;;;;;4501:42;;4388:162;;;;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;13240:133:0:-;13321:16;13329:7;13321;:16::i;:::-;13313:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;13240:133;:::o;640:96:6:-;693:7;719:10;712:17;;640:96;:::o;12572:171:0:-;12673:2;12646:15;:24;12662:7;12646:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12728:7;12724:2;12690:46;;12699:23;12714:7;12699:14;:23::i;:::-;12690:46;;;;;;;;;;;;12572:171;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;7570:16;;:7;:16;;;:52;;;;7590:32;7607:5;7614:7;7590:16;:32::i;:::-;7570:52;:87;;;;7650:7;7626:31;;:20;7638:7;7626:11;:20::i;:::-;:31;;;7570:87;7562:96;;;7404:261;;;;:::o;11257:1203::-;11381:4;11354:31;;:23;11369:7;11354:14;:23::i;:::-;:31;;;11346:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11459:1;11445:16;;:2;:16;;;11437:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11513:42;11534:4;11540:2;11544:7;11553:1;11513:20;:42::i;:::-;11682:4;11655:31;;:23;11670:7;11655:14;:23::i;:::-;:31;;;11647:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11797:15;:24;11813:7;11797:24;;;;;;;;;;;;11790:31;;;;;;;;;;;12284:1;12265:9;:15;12275:4;12265:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;12316:1;12299:9;:13;12309:2;12299:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;12356:2;12337:7;:16;12345:7;12337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12393:7;12389:2;12374:27;;12383:4;12374:27;;;;;;;;;;;;12412:41;12432:4;12438:2;12442:7;12451:1;12412:19;:41::i;:::-;11257:1203;;;:::o;6702:115::-;6768:7;6794;:16;6802:7;6794:16;;;;;;;;;;;;;;;;;;;;;6787:23;;6702:115;;;:::o;945:123:7:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;827:112::-;892:7;918;:14;;;911:21;;827:112;;;:::o;8925:920:0:-;9018:1;9004:16;;:2;:16;;;8996:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9076:16;9084:7;9076;:16::i;:::-;9075:17;9067:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9136:48;9165:1;9169:2;9173:7;9182:1;9136:20;:48::i;:::-;9280:16;9288:7;9280;:16::i;:::-;9279:17;9271:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9688:1;9671:9;:13;9681:2;9671:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;9729:2;9710:7;:16;9718:7;9710:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9772:7;9768:2;9747:33;;9764:1;9747:33;;;;;;;;;;;;9791:47;9819:1;9823:2;9827:7;9836:1;9791:19;:47::i;:::-;8925:920;;:::o;12879:277::-;12999:8;12990:17;;:5;:17;;;12982:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13085:8;13047:18;:25;13066:5;13047:25;;;;;;;;;;;;;;;:35;13073:8;13047:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13130:8;13108:41;;13123:5;13108:41;;;13140:8;13108:41;;;;;;:::i;:::-;;;;;;;;12879:277;;;:::o;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6326:267;;;;:::o;447:696:8:-;503:13;552:14;589:1;569:17;580:5;569:10;:17::i;:::-;:21;552:38;;604:20;638:6;627:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;604:41;;659:11;785:6;781:2;777:15;769:6;765:28;758:35;;820:280;827:4;820:280;;;851:5;;;;;;;;990:8;985:2;978:5;974:14;969:30;964:3;956:44;1044:2;1035:11;;;;;;:::i;:::-;;;;;1077:1;1068:5;:10;820:280;1064:21;820:280;1120:6;1113:13;;;;;447:696;;;:::o;1413:8909:13:-;1466:13;1490:21;1514;1531:3;1514:16;:21::i;:::-;1490:45;;1545:15;:2384;;;;;;;;;;;;;;;;;;;3939:15;:6320;;;;;;;;;;;;;;;;;;;10300:1;10303:7;10312:1;10283:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10269:46;;;;;1413:8909;;;:::o;505:3026:5:-;563:13;810:1;795:4;:11;:16;791:31;;813:9;;;;;;;;;;;;;;;;791:31;872:19;894:6;;;;;;;;;;;;;;;;;872:28;;1303:20;1362:1;1357;1343:4;:11;:15;;;;:::i;:::-;1342:21;;;;:::i;:::-;1337:1;:27;;;;:::i;:::-;1326:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1303:62;;1540:1;1533:5;1529:13;1641:2;1633:6;1629:15;1748:4;1799;1793:11;1787:4;1783:22;1711:1403;1832:6;1823:7;1820:19;1711:1403;;;1934:1;1925:7;1921:15;1910:26;;1972:7;1966:14;2615:4;2607:5;2603:2;2599:14;2595:25;2585:8;2581:40;2575:47;2564:9;2556:67;2668:1;2657:9;2653:17;2640:30;;2758:4;2750:5;2746:2;2742:14;2738:25;2728:8;2724:40;2718:47;2707:9;2699:67;2811:1;2800:9;2796:17;2783:30;;2900:4;2892:5;2889:1;2885:13;2881:24;2871:8;2867:39;2861:46;2850:9;2842:66;2953:1;2942:9;2938:17;2925:30;;3034:4;3027:5;3023:16;3013:8;3009:31;3003:38;2992:9;2984:58;3087:1;3076:9;3072:17;3059:30;;1857:1257;1711:1403;;;1715:104;;3272:1;3265:4;3259:11;3255:19;3292:1;3287:120;;;;3425:1;3420:71;;;;3248:243;;3287:120;3339:4;3335:1;3324:9;3320:17;3312:32;3388:4;3384:1;3373:9;3369:17;3361:32;3287:120;;3420:71;3472:4;3468:1;3457:9;3453:17;3445:32;3248:243;;1428:2073;;3518:6;3511:13;;;;505:3026;;;;:::o;7120:126:0:-;7185:4;7237:1;7208:31;;:17;7217:7;7208:8;:17::i;:::-;:31;;;;7201:38;;7120:126;;;:::o;15472:116::-;;;;;:::o;16294:115::-;;;;;:::o;13925:831::-;14074:4;14094:15;:2;:13;;;:15::i;:::-;14090:660;;;14145:2;14129:36;;;14166:12;:10;:12::i;:::-;14180:4;14186:7;14195:4;14129:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14384:1;14367:6;:13;:18;14363:321;;14409:60;;;;;;;;;;:::i;:::-;;;;;;;;14363:321;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;14260:41;;;14250:51;;;:6;:51;;;;14243:58;;;;;14090:660;14735:4;14728:11;;13925:831;;;;;;;:::o;10139:916:11:-;10192:7;10211:14;10228:1;10211:18;;10276:8;10267:5;:17;10263:103;;10313:8;10304:17;;;;;;:::i;:::-;;;;;10349:2;10339:12;;;;10263:103;10392:8;10383:5;:17;10379:103;;10429:8;10420:17;;;;;;:::i;:::-;;;;;10465:2;10455:12;;;;10379:103;10508:8;10499:5;:17;10495:103;;10545:8;10536:17;;;;;;:::i;:::-;;;;;10581:2;10571:12;;;;10495:103;10624:7;10615:5;:16;10611:100;;10660:7;10651:16;;;;;;:::i;:::-;;;;;10695:1;10685:11;;;;10611:100;10737:7;10728:5;:16;10724:100;;10773:7;10764:16;;;;;;:::i;:::-;;;;;10808:1;10798:11;;;;10724:100;10850:7;10841:5;:16;10837:100;;10886:7;10877:16;;;;;;:::i;:::-;;;;;10921:1;10911:11;;;;10837:100;10963:7;10954:5;:16;10950:66;;11000:1;10990:11;;;;10950:66;11042:6;11035:13;;;10139:916;;;:::o;1412:320:4:-;1472:4;1724:1;1702:7;:19;;;:23;1695:30;;1412:320;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:329::-;5574:6;5623:2;5611:9;5602:7;5598:23;5594:32;5591:119;;;5629:79;;:::i;:::-;5591:119;5749:1;5774:53;5819:7;5810:6;5799:9;5795:22;5774:53;:::i;:::-;5764:63;;5720:117;5515:329;;;;:::o;5850:118::-;5937:24;5955:5;5937:24;:::i;:::-;5932:3;5925:37;5850:118;;:::o;5974:222::-;6067:4;6105:2;6094:9;6090:18;6082:26;;6118:71;6186:1;6175:9;6171:17;6162:6;6118:71;:::i;:::-;5974:222;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:468::-;6528:6;6536;6585:2;6573:9;6564:7;6560:23;6556:32;6553:119;;;6591:79;;:::i;:::-;6553:119;6711:1;6736:53;6781:7;6772:6;6761:9;6757:22;6736:53;:::i;:::-;6726:63;;6682:117;6838:2;6864:50;6906:7;6897:6;6886:9;6882:22;6864:50;:::i;:::-;6854:60;;6809:115;6463:468;;;;;:::o;6937:117::-;7046:1;7043;7036:12;7060:117;7169:1;7166;7159:12;7183:180;7231:77;7228:1;7221:88;7328:4;7325:1;7318:15;7352:4;7349:1;7342:15;7369:281;7452:27;7474:4;7452:27;:::i;:::-;7444:6;7440:40;7582:6;7570:10;7567:22;7546:18;7534:10;7531:34;7528:62;7525:88;;;7593:18;;:::i;:::-;7525:88;7633:10;7629:2;7622:22;7412:238;7369:281;;:::o;7656:129::-;7690:6;7717:20;;:::i;:::-;7707:30;;7746:33;7774:4;7766:6;7746:33;:::i;:::-;7656:129;;;:::o;7791:307::-;7852:4;7942:18;7934:6;7931:30;7928:56;;;7964:18;;:::i;:::-;7928:56;8002:29;8024:6;8002:29;:::i;:::-;7994:37;;8086:4;8080;8076:15;8068:23;;7791:307;;;:::o;8104:146::-;8201:6;8196:3;8191;8178:30;8242:1;8233:6;8228:3;8224:16;8217:27;8104:146;;;:::o;8256:423::-;8333:5;8358:65;8374:48;8415:6;8374:48;:::i;:::-;8358:65;:::i;:::-;8349:74;;8446:6;8439:5;8432:21;8484:4;8477:5;8473:16;8522:3;8513:6;8508:3;8504:16;8501:25;8498:112;;;8529:79;;:::i;:::-;8498:112;8619:54;8666:6;8661:3;8656;8619:54;:::i;:::-;8339:340;8256:423;;;;;:::o;8698:338::-;8753:5;8802:3;8795:4;8787:6;8783:17;8779:27;8769:122;;8810:79;;:::i;:::-;8769:122;8927:6;8914:20;8952:78;9026:3;9018:6;9011:4;9003:6;8999:17;8952:78;:::i;:::-;8943:87;;8759:277;8698:338;;;;:::o;9042:943::-;9137:6;9145;9153;9161;9210:3;9198:9;9189:7;9185:23;9181:33;9178:120;;;9217:79;;:::i;:::-;9178:120;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:53;9535:7;9526:6;9515:9;9511:22;9490:53;:::i;:::-;9480:63;;9435:118;9592:2;9618:53;9663:7;9654:6;9643:9;9639:22;9618:53;:::i;:::-;9608:63;;9563:118;9748:2;9737:9;9733:18;9720:32;9779:18;9771:6;9768:30;9765:117;;;9801:79;;:::i;:::-;9765:117;9906:62;9960:7;9951:6;9940:9;9936:22;9906:62;:::i;:::-;9896:72;;9691:287;9042:943;;;;;;;:::o;9991:474::-;10059:6;10067;10116:2;10104:9;10095:7;10091:23;10087:32;10084:119;;;10122:79;;:::i;:::-;10084:119;10242:1;10267:53;10312:7;10303:6;10292:9;10288:22;10267:53;:::i;:::-;10257:63;;10213:117;10369:2;10395:53;10440:7;10431:6;10420:9;10416:22;10395:53;:::i;:::-;10385:63;;10340:118;9991:474;;;;;:::o;10471:180::-;10519:77;10516:1;10509:88;10616:4;10613:1;10606:15;10640:4;10637:1;10630:15;10657:320;10701:6;10738:1;10732:4;10728:12;10718:22;;10785:1;10779:4;10775:12;10806:18;10796:81;;10862:4;10854:6;10850:17;10840:27;;10796:81;10924:2;10916:6;10913:14;10893:18;10890:38;10887:84;;10943:18;;:::i;:::-;10887:84;10708:269;10657:320;;;:::o;10983:220::-;11123:34;11119:1;11111:6;11107:14;11100:58;11192:3;11187:2;11179:6;11175:15;11168:28;10983:220;:::o;11209:366::-;11351:3;11372:67;11436:2;11431:3;11372:67;:::i;:::-;11365:74;;11448:93;11537:3;11448:93;:::i;:::-;11566:2;11561:3;11557:12;11550:19;;11209:366;;;:::o;11581:419::-;11747:4;11785:2;11774:9;11770:18;11762:26;;11834:9;11828:4;11824:20;11820:1;11809:9;11805:17;11798:47;11862:131;11988:4;11862:131;:::i;:::-;11854:139;;11581:419;;;:::o;12006:248::-;12146:34;12142:1;12134:6;12130:14;12123:58;12215:31;12210:2;12202:6;12198:15;12191:56;12006:248;:::o;12260:366::-;12402:3;12423:67;12487:2;12482:3;12423:67;:::i;:::-;12416:74;;12499:93;12588:3;12499:93;:::i;:::-;12617:2;12612:3;12608:12;12601:19;;12260:366;;;:::o;12632:419::-;12798:4;12836:2;12825:9;12821:18;12813:26;;12885:9;12879:4;12875:20;12871:1;12860:9;12856:17;12849:47;12913:131;13039:4;12913:131;:::i;:::-;12905:139;;12632:419;;;:::o;13057:232::-;13197:34;13193:1;13185:6;13181:14;13174:58;13266:15;13261:2;13253:6;13249:15;13242:40;13057:232;:::o;13295:366::-;13437:3;13458:67;13522:2;13517:3;13458:67;:::i;:::-;13451:74;;13534:93;13623:3;13534:93;:::i;:::-;13652:2;13647:3;13643:12;13636:19;;13295:366;;;:::o;13667:419::-;13833:4;13871:2;13860:9;13856:18;13848:26;;13920:9;13914:4;13910:20;13906:1;13895:9;13891:17;13884:47;13948:131;14074:4;13948:131;:::i;:::-;13940:139;;13667:419;;;:::o;14092:174::-;14232:26;14228:1;14220:6;14216:14;14209:50;14092:174;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:228::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:11;15273:2;15265:6;15261:15;15254:36;15069:228;:::o;15303:366::-;15445:3;15466:67;15530:2;15525:3;15466:67;:::i;:::-;15459:74;;15542:93;15631:3;15542:93;:::i;:::-;15660:2;15655:3;15651:12;15644:19;;15303:366;;;:::o;15675:419::-;15841:4;15879:2;15868:9;15864:18;15856:26;;15928:9;15922:4;15918:20;15914:1;15903:9;15899:17;15892:47;15956:131;16082:4;15956:131;:::i;:::-;15948:139;;15675:419;;;:::o;16100:148::-;16202:11;16239:3;16224:18;;16100:148;;;;:::o;16254:268::-;16394:66;16390:1;16382:6;16378:14;16371:90;16495:19;16490:2;16482:6;16478:15;16471:44;16254:268;:::o;16528:402::-;16688:3;16709:85;16791:2;16786:3;16709:85;:::i;:::-;16702:92;;16803:93;16892:3;16803:93;:::i;:::-;16921:2;16916:3;16912:12;16905:19;;16528:402;;;:::o;16936:390::-;17042:3;17070:39;17103:5;17070:39;:::i;:::-;17125:89;17207:6;17202:3;17125:89;:::i;:::-;17118:96;;17223:65;17281:6;17276:3;17269:4;17262:5;17258:16;17223:65;:::i;:::-;17313:6;17308:3;17304:16;17297:23;;17046:280;16936:390;;;;:::o;17332:214::-;17472:66;17468:1;17460:6;17456:14;17449:90;17332:214;:::o;17552:400::-;17712:3;17733:84;17815:1;17810:3;17733:84;:::i;:::-;17726:91;;17826:93;17915:3;17826:93;:::i;:::-;17944:1;17939:3;17935:11;17928:18;;17552:400;;;:::o;17958:214::-;18098:66;18094:1;18086:6;18082:14;18075:90;17958:214;:::o;18178:402::-;18338:3;18359:85;18441:2;18436:3;18359:85;:::i;:::-;18352:92;;18453:93;18542:3;18453:93;:::i;:::-;18571:2;18566:3;18562:12;18555:19;;18178:402;;;:::o;18586:214::-;18726:66;18722:1;18714:6;18710:14;18703:90;18586:214;:::o;18806:400::-;18966:3;18987:84;19069:1;19064:3;18987:84;:::i;:::-;18980:91;;19080:93;19169:3;19080:93;:::i;:::-;19198:1;19193:3;19189:11;19182:18;;18806:400;;;:::o;19212:143::-;19348:3;19344:1;19336:6;19332:14;19325:27;19212:143;:::o;19357:384::-;19517:3;19534:84;19616:1;19611:3;19534:84;:::i;:::-;19527:91;;19623:93;19712:3;19623:93;:::i;:::-;19737:1;19732:3;19728:11;19721:18;;19357:384;;;:::o;19743:1729::-;20428:3;20446:148;20590:3;20446:148;:::i;:::-;20439:155;;20607:95;20698:3;20689:6;20607:95;:::i;:::-;20600:102;;20715:148;20859:3;20715:148;:::i;:::-;20708:155;;20876:148;21020:3;20876:148;:::i;:::-;20869:155;;21037:95;21128:3;21119:6;21037:95;:::i;:::-;21030:102;;21145:148;21289:3;21145:148;:::i;:::-;21138:155;;21306:148;21450:3;21306:148;:::i;:::-;21299:155;;21467:3;21460:10;;19743:1729;;;;;:::o;21474:171::-;21610:31;21606:1;21598:6;21594:14;21587:55;21474:171;:::o;21647:386::-;21807:3;21824:85;21906:2;21901:3;21824:85;:::i;:::-;21817:92;;21914:93;22003:3;21914:93;:::i;:::-;22028:2;22023:3;22019:12;22012:19;;21647:386;;;:::o;22035:525::-;22268:3;22286:148;22430:3;22286:148;:::i;:::-;22279:155;;22447:95;22538:3;22529:6;22447:95;:::i;:::-;22440:102;;22555:3;22548:10;;22035:525;;;;:::o;22562:212::-;22698:34;22694:1;22686:6;22682:14;22675:58;22763:7;22758:2;22750:6;22746:15;22739:32;22562:212;:::o;22776:350::-;22918:3;22935:67;22999:2;22994:3;22935:67;:::i;:::-;22928:74;;23007:93;23096:3;23007:93;:::i;:::-;23121:2;23116:3;23112:12;23105:19;;22776:350;;;:::o;23128:403::-;23294:4;23328:2;23317:9;23313:18;23305:26;;23373:9;23367:4;23363:20;23359:1;23348:9;23344:17;23337:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23128:403;;;:::o;23533:211::-;23669:34;23665:1;23657:6;23653:14;23646:58;23734:6;23729:2;23721:6;23717:15;23710:31;23533:211;:::o;23746:350::-;23888:3;23905:67;23969:2;23964:3;23905:67;:::i;:::-;23898:74;;23977:93;24066:3;23977:93;:::i;:::-;24091:2;24086:3;24082:12;24075:19;;23746:350;;;:::o;24098:403::-;24264:4;24298:2;24287:9;24283:18;24275:26;;24343:9;24337:4;24333:20;24329:1;24318:9;24314:17;24307:47;24367:131;24493:4;24367:131;:::i;:::-;24359:139;;24098:403;;;:::o;24503:174::-;24639:34;24635:1;24627:6;24623:14;24616:58;24503:174;:::o;24679:350::-;24821:3;24838:67;24902:2;24897:3;24838:67;:::i;:::-;24831:74;;24910:93;24999:3;24910:93;:::i;:::-;25024:2;25019:3;25015:12;25008:19;;24679:350;;;:::o;25031:403::-;25197:4;25231:2;25220:9;25216:18;25208:26;;25276:9;25270:4;25266:20;25262:1;25251:9;25247:17;25240:47;25300:131;25426:4;25300:131;:::i;:::-;25292:139;;25031:403;;;:::o;25436:170::-;25572:30;25568:1;25560:6;25556:14;25549:54;25436:170;:::o;25608:350::-;25750:3;25767:67;25831:2;25826:3;25767:67;:::i;:::-;25760:74;;25839:93;25928:3;25839:93;:::i;:::-;25953:2;25948:3;25944:12;25937:19;;25608:350;;;:::o;25960:403::-;26126:4;26160:2;26149:9;26145:18;26137:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26229:131;26355:4;26229:131;:::i;:::-;26221:139;;25960:403;;;:::o;26365:167::-;26501:27;26497:1;26489:6;26485:14;26478:51;26365:167;:::o;26534:350::-;26676:3;26693:67;26757:2;26752:3;26693:67;:::i;:::-;26686:74;;26765:93;26854:3;26765:93;:::i;:::-;26879:2;26874:3;26870:12;26863:19;;26534:350;;;:::o;26886:403::-;27052:4;27086:2;27075:9;27071:18;27063:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;26886:403;;;:::o;27291:225::-;27427:34;27423:1;27415:6;27411:14;27404:58;27492:20;27487:2;27479:6;27475:15;27468:45;27291:225;:::o;27518:350::-;27660:3;27677:67;27741:2;27736:3;27677:67;:::i;:::-;27670:74;;27749:93;27838:3;27749:93;:::i;:::-;27863:2;27858:3;27854:12;27847:19;;27518:350;;;:::o;27870:403::-;28036:4;28070:2;28059:9;28055:18;28047:26;;28115:9;28109:4;28105:20;28101:1;28090:9;28086:17;28079:47;28139:131;28265:4;28139:131;:::i;:::-;28131:139;;27870:403;;;:::o;28275:164::-;28319:77;28316:1;28309:88;28412:4;28409:1;28402:15;28432:4;28429:1;28422:15;28441:575;28669:3;28687:95;28778:3;28769:6;28687:95;:::i;:::-;28680:102;;28795:95;28886:3;28877:6;28795:95;:::i;:::-;28788:102;;28903:95;28994:3;28985:6;28903:95;:::i;:::-;28896:102;;29011:3;29004:10;;28441:575;;;;;;:::o;29018:164::-;29062:77;29059:1;29052:88;29155:4;29152:1;29145:15;29175:4;29172:1;29165:15;29184:171;29224:3;29239:20;29257:1;29239:20;:::i;:::-;29234:25;;29269:20;29287:1;29269:20;:::i;:::-;29264:25;;29308:1;29305;29301:9;29294:16;;29325:3;29322:1;29319:10;29316:36;;;29332:18;;:::i;:::-;29316:36;29184:171;;;;:::o;29357:165::-;29397:1;29410:20;29428:1;29410:20;:::i;:::-;29405:25;;29440:20;29458:1;29440:20;:::i;:::-;29435:25;;29475:1;29465:35;;29480:18;;:::i;:::-;29465:35;29518:1;29515;29511:9;29506:14;;29357:165;;;;:::o;29524:362::-;29564:7;29583:20;29601:1;29583:20;:::i;:::-;29578:25;;29613:20;29631:1;29613:20;:::i;:::-;29608:25;;29664:1;29661;29657:9;29682:30;29700:11;29682:30;:::i;:::-;29671:41;;29841:1;29832:7;29828:15;29825:1;29822:22;29806:1;29799:9;29783:71;29764:119;;29863:18;;:::i;:::-;29764:119;29572:314;29524:362;;;;:::o;29888:90::-;29939:6;29969:5;29963:12;29953:22;;29888:90;;;:::o;29980:156::-;30063:11;30093:6;30088:3;30081:19;30129:4;30124:3;30120:14;30105:29;;29980:156;;;;:::o;30138:353::-;30224:3;30248:38;30280:5;30248:38;:::i;:::-;30298:70;30361:6;30356:3;30298:70;:::i;:::-;30291:77;;30373:65;30431:6;30426:3;30419:4;30412:5;30408:16;30373:65;:::i;:::-;30459:29;30481:6;30459:29;:::i;:::-;30454:3;30450:39;30443:46;;30228:263;30138:353;;;;:::o;30493:612::-;30688:4;30722:3;30711:9;30707:19;30699:27;;30732:71;30800:1;30789:9;30785:17;30776:6;30732:71;:::i;:::-;30809:72;30877:2;30866:9;30862:18;30853:6;30809:72;:::i;:::-;30887;30955:2;30944:9;30940:18;30931:6;30887:72;:::i;:::-;31002:9;30996:4;30992:20;30987:2;30976:9;30972:18;30965:48;31026:76;31097:4;31088:6;31026:76;:::i;:::-;31018:84;;30493:612;;;;;;;:::o;31107:129::-;31163:5;31190:6;31184:13;31175:22;;31202:32;31228:5;31202:32;:::i;:::-;31107:129;;;;:::o;31238:325::-;31307:6;31352:2;31340:9;31331:7;31327:23;31323:32;31320:119;;;31358:79;;:::i;:::-;31320:119;31470:1;31491:63;31546:7;31537:6;31526:9;31522:22;31491:63;:::i;:::-;31481:73;;31445:115;31238:325;;;;:::o", - "source": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\nimport \"@openzeppelin/contracts/utils/Base64.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\n// import \"./OnChainSVG.sol\";\n\ncontract SoulboundToken is ERC721 {\n using Counters for Counters.Counter;\n Counters.Counter private _tokenIds;\n\n constructor() ERC721(\"Credit System SBT\", \"CS_SBT\") {}\n\n function mint(address player) public returns (uint256) {\n _tokenIds.increment();\n uint256 newItemId = _tokenIds.current();\n _mint(player, newItemId);\n\n return newItemId;\n }\n\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n _requireMinted(tokenId);\n\n string memory json = Base64.encode(\n bytes(\n string(\n abi.encodePacked(\n '{\"name\": \"Credit System Soulbound Token (CSSBT) #',\n Strings.toString(tokenId),\n '\",',\n '\"image_data\": \"',\n getSvgImage(tokenId),\n '\"',\n \"}\"\n )\n ) \n )\n );\n return string(abi.encodePacked(\"data:application/json;base64,\", json));\n }\n\n function getSvgImage(uint uid) private pure returns (string memory){\n string memory uid_str = Strings.toString(uid);\n string memory a = \"Credit System Soulbound Token (CSSBT)#\";\n string memory b = \"\";\n return string(abi.encodePacked(a, uid_str, b));\n }\n\n}", + "sourceMap": "310:10393:13:-:0;;;432:54;;;;;;;;;;1390:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:5;1456;:13;;;;;;:::i;:::-;;1489:7;1479;:17;;;;;;:::i;:::-;;1390:113;;310:10393:13;;7:99:14;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;310:10393:13:-;;;;;;;", + "deployedSourceMap": "310:10393:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:300:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2471:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3468:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4612:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4974:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2190:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;492:203:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1929:204:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2633:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4169:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5189:276;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1079:706:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4388:162:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1570:300;1672:4;1722:25;1707:40;;;:11;:40;;;;:104;;;;1778:33;1763:48;;;:11;:48;;;;1707:104;:156;;;;1827:36;1851:11;1827:23;:36::i;:::-;1707:156;1688:175;;1570:300;;;:::o;2471:98::-;2525:13;2557:5;2550:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;4071:15;:24;4087:7;4071:24;;;;;;;;;;;;;;;;;;;;;4064:31;;3935:167;;;:::o;3468:406::-;3548:13;3564:23;3579:7;3564:14;:23::i;:::-;3548:39;;3611:5;3605:11;;:2;:11;;;3597:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3702:5;3686:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3711:37;3728:5;3735:12;:10;:12::i;:::-;3711:16;:37::i;:::-;3686:62;3665:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3538:336;3468:406;;:::o;4612:296::-;4771:41;4790:12;:10;:12::i;:::-;4804:7;4771:18;:41::i;:::-;4763:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;4873:28;4883:4;4889:2;4893:7;4873:9;:28::i;:::-;4612:296;;;:::o;4974:149::-;5077:39;5094:4;5100:2;5104:7;5077:39;;;;;;;;;;;;:16;:39::i;:::-;4974:149;;;:::o;2190:219::-;2262:7;2281:13;2297:17;2306:7;2297:8;:17::i;:::-;2281:33;;2349:1;2332:19;;:5;:19;;;2324:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2397:5;2390:12;;;2190:219;;;:::o;492:203:13:-;538:7;557:21;:9;:19;:21::i;:::-;588:17;608:19;:9;:17;:19::i;:::-;588:39;;637:24;643:6;651:9;637:5;:24::i;:::-;679:9;672:16;;;492:203;;;:::o;1929:204:0:-;2001:7;2045:1;2028:19;;:5;:19;;;2020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2110:9;:16;2120:5;2110:16;;;;;;;;;;;;;;;;2103:23;;1929:204;;;:::o;2633:102::-;2689:13;2721:7;2714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2633:102;:::o;4169:153::-;4263:52;4282:12;:10;:12::i;:::-;4296:8;4306;4263:18;:52::i;:::-;4169:153;;:::o;5189:276::-;5319:41;5338:12;:10;:12::i;:::-;5352:7;5319:18;:41::i;:::-;5311:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;5420:38;5434:4;5440:2;5444:7;5453:4;5420:13;:38::i;:::-;5189:276;;;;:::o;1079:706:13:-;1152:13;1177:23;1192:7;1177:14;:23::i;:::-;1211:18;1232:466;1429:25;1446:7;1429:16;:25::i;:::-;1553:20;1565:7;1553:11;:20::i;:::-;1310:343;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1232:13;:466::i;:::-;1211:487;;1772:4;1722:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;1708:70;;;1079:706;;;:::o;4388:162:0:-;4485:4;4508:18;:25;4527:5;4508:25;;;;;;;;;;;;;;;:35;4534:8;4508:35;;;;;;;;;;;;;;;;;;;;;;;;;4501:42;;4388:162;;;;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;13240:133:0:-;13321:16;13329:7;13321;:16::i;:::-;13313:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;13240:133;:::o;640:96:6:-;693:7;719:10;712:17;;640:96;:::o;12572:171:0:-;12673:2;12646:15;:24;12662:7;12646:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12728:7;12724:2;12690:46;;12699:23;12714:7;12699:14;:23::i;:::-;12690:46;;;;;;;;;;;;12572:171;;:::o;7404:261::-;7497:4;7513:13;7529:23;7544:7;7529:14;:23::i;:::-;7513:39;;7581:5;7570:16;;:7;:16;;;:52;;;;7590:32;7607:5;7614:7;7590:16;:32::i;:::-;7570:52;:87;;;;7650:7;7626:31;;:20;7638:7;7626:11;:20::i;:::-;:31;;;7570:87;7562:96;;;7404:261;;;;:::o;11257:1203::-;11381:4;11354:31;;:23;11369:7;11354:14;:23::i;:::-;:31;;;11346:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11459:1;11445:16;;:2;:16;;;11437:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11513:42;11534:4;11540:2;11544:7;11553:1;11513:20;:42::i;:::-;11682:4;11655:31;;:23;11670:7;11655:14;:23::i;:::-;:31;;;11647:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11797:15;:24;11813:7;11797:24;;;;;;;;;;;;11790:31;;;;;;;;;;;12284:1;12265:9;:15;12275:4;12265:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;12316:1;12299:9;:13;12309:2;12299:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;12356:2;12337:7;:16;12345:7;12337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12393:7;12389:2;12374:27;;12383:4;12374:27;;;;;;;;;;;;12412:41;12432:4;12438:2;12442:7;12451:1;12412:19;:41::i;:::-;11257:1203;;;:::o;6702:115::-;6768:7;6794;:16;6802:7;6794:16;;;;;;;;;;;;;;;;;;;;;6787:23;;6702:115;;;:::o;945:123:7:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;827:112::-;892:7;918;:14;;;911:21;;827:112;;;:::o;8925:920:0:-;9018:1;9004:16;;:2;:16;;;8996:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9076:16;9084:7;9076;:16::i;:::-;9075:17;9067:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9136:48;9165:1;9169:2;9173:7;9182:1;9136:20;:48::i;:::-;9280:16;9288:7;9280;:16::i;:::-;9279:17;9271:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9688:1;9671:9;:13;9681:2;9671:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;9729:2;9710:7;:16;9718:7;9710:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9772:7;9768:2;9747:33;;9764:1;9747:33;;;;;;;;;;;;9791:47;9819:1;9823:2;9827:7;9836:1;9791:19;:47::i;:::-;8925:920;;:::o;12879:277::-;12999:8;12990:17;;:5;:17;;;12982:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13085:8;13047:18;:25;13066:5;13047:25;;;;;;;;;;;;;;;:35;13073:8;13047:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13130:8;13108:41;;13123:5;13108:41;;;13140:8;13108:41;;;;;;:::i;:::-;;;;;;;;12879:277;;;:::o;6326:267::-;6438:28;6448:4;6454:2;6458:7;6438:9;:28::i;:::-;6484:47;6507:4;6513:2;6517:7;6526:4;6484:22;:47::i;:::-;6476:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6326:267;;;;:::o;447:696:8:-;503:13;552:14;589:1;569:17;580:5;569:10;:17::i;:::-;:21;552:38;;604:20;638:6;627:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;604:41;;659:11;785:6;781:2;777:15;769:6;765:28;758:35;;820:280;827:4;820:280;;;851:5;;;;;;;;990:8;985:2;978:5;974:14;969:30;964:3;956:44;1044:2;1035:11;;;;;;:::i;:::-;;;;;1077:1;1068:5;:10;820:280;1064:21;820:280;1120:6;1113:13;;;;;447:696;;;:::o;1791:8909:13:-;1844:13;1868:21;1892;1909:3;1892:16;:21::i;:::-;1868:45;;1923:15;:2384;;;;;;;;;;;;;;;;;;;4317:15;:6320;;;;;;;;;;;;;;;;;;;10678:1;10681:7;10690:1;10661:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10647:46;;;;;1791:8909;;;:::o;505:3026:5:-;563:13;810:1;795:4;:11;:16;791:31;;813:9;;;;;;;;;;;;;;;;791:31;872:19;894:6;;;;;;;;;;;;;;;;;872:28;;1303:20;1362:1;1357;1343:4;:11;:15;;;;:::i;:::-;1342:21;;;;:::i;:::-;1337:1;:27;;;;:::i;:::-;1326:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1303:62;;1540:1;1533:5;1529:13;1641:2;1633:6;1629:15;1748:4;1799;1793:11;1787:4;1783:22;1711:1403;1832:6;1823:7;1820:19;1711:1403;;;1934:1;1925:7;1921:15;1910:26;;1972:7;1966:14;2615:4;2607:5;2603:2;2599:14;2595:25;2585:8;2581:40;2575:47;2564:9;2556:67;2668:1;2657:9;2653:17;2640:30;;2758:4;2750:5;2746:2;2742:14;2738:25;2728:8;2724:40;2718:47;2707:9;2699:67;2811:1;2800:9;2796:17;2783:30;;2900:4;2892:5;2889:1;2885:13;2881:24;2871:8;2867:39;2861:46;2850:9;2842:66;2953:1;2942:9;2938:17;2925:30;;3034:4;3027:5;3023:16;3013:8;3009:31;3003:38;2992:9;2984:58;3087:1;3076:9;3072:17;3059:30;;1857:1257;1711:1403;;;1715:104;;3272:1;3265:4;3259:11;3255:19;3292:1;3287:120;;;;3425:1;3420:71;;;;3248:243;;3287:120;3339:4;3335:1;3324:9;3320:17;3312:32;3388:4;3384:1;3373:9;3369:17;3361:32;3287:120;;3420:71;3472:4;3468:1;3457:9;3453:17;3445:32;3248:243;;1428:2073;;3518:6;3511:13;;;;505:3026;;;;:::o;7120:126:0:-;7185:4;7237:1;7208:31;;:17;7217:7;7208:8;:17::i;:::-;:31;;;;7201:38;;7120:126;;;:::o;701:372:13:-;858:1;842:18;;:4;:18;;;:38;;;;878:1;864:16;;:2;:16;;;842:38;834:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;946:1;931:13;941:2;931:9;:13::i;:::-;:16;923:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;1005:61;1032:4;1038:2;1042:12;1056:9;1005:26;:61::i;:::-;701:372;;;;:::o;16294:115:0:-;;;;;:::o;13925:831::-;14074:4;14094:15;:2;:13;;;:15::i;:::-;14090:660;;;14145:2;14129:36;;;14166:12;:10;:12::i;:::-;14180:4;14186:7;14195:4;14129:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14125:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14384:1;14367:6;:13;:18;14363:321;;14409:60;;;;;;;;;;:::i;:::-;;;;;;;;14363:321;14636:6;14630:13;14621:6;14617:2;14613:15;14606:38;14125:573;14260:41;;;14250:51;;;:6;:51;;;;14243:58;;;;;14090:660;14735:4;14728:11;;13925:831;;;;;;;:::o;10139:916:11:-;10192:7;10211:14;10228:1;10211:18;;10276:8;10267:5;:17;10263:103;;10313:8;10304:17;;;;;;:::i;:::-;;;;;10349:2;10339:12;;;;10263:103;10392:8;10383:5;:17;10379:103;;10429:8;10420:17;;;;;;:::i;:::-;;;;;10465:2;10455:12;;;;10379:103;10508:8;10499:5;:17;10495:103;;10545:8;10536:17;;;;;;:::i;:::-;;;;;10581:2;10571:12;;;;10495:103;10624:7;10615:5;:16;10611:100;;10660:7;10651:16;;;;;;:::i;:::-;;;;;10695:1;10685:11;;;;10611:100;10737:7;10728:5;:16;10724:100;;10773:7;10764:16;;;;;;:::i;:::-;;;;;10808:1;10798:11;;;;10724:100;10850:7;10841:5;:16;10837:100;;10886:7;10877:16;;;;;;:::i;:::-;;;;;10921:1;10911:11;;;;10837:100;10963:7;10954:5;:16;10950:66;;11000:1;10990:11;;;;10950:66;11042:6;11035:13;;;10139:916;;;:::o;15472:116:0:-;;;;;:::o;1412:320:4:-;1472:4;1724:1;1702:7;:19;;;:23;1695:30;;1412:320;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:329::-;5574:6;5623:2;5611:9;5602:7;5598:23;5594:32;5591:119;;;5629:79;;:::i;:::-;5591:119;5749:1;5774:53;5819:7;5810:6;5799:9;5795:22;5774:53;:::i;:::-;5764:63;;5720:117;5515:329;;;;:::o;5850:118::-;5937:24;5955:5;5937:24;:::i;:::-;5932:3;5925:37;5850:118;;:::o;5974:222::-;6067:4;6105:2;6094:9;6090:18;6082:26;;6118:71;6186:1;6175:9;6171:17;6162:6;6118:71;:::i;:::-;5974:222;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:468::-;6528:6;6536;6585:2;6573:9;6564:7;6560:23;6556:32;6553:119;;;6591:79;;:::i;:::-;6553:119;6711:1;6736:53;6781:7;6772:6;6761:9;6757:22;6736:53;:::i;:::-;6726:63;;6682:117;6838:2;6864:50;6906:7;6897:6;6886:9;6882:22;6864:50;:::i;:::-;6854:60;;6809:115;6463:468;;;;;:::o;6937:117::-;7046:1;7043;7036:12;7060:117;7169:1;7166;7159:12;7183:180;7231:77;7228:1;7221:88;7328:4;7325:1;7318:15;7352:4;7349:1;7342:15;7369:281;7452:27;7474:4;7452:27;:::i;:::-;7444:6;7440:40;7582:6;7570:10;7567:22;7546:18;7534:10;7531:34;7528:62;7525:88;;;7593:18;;:::i;:::-;7525:88;7633:10;7629:2;7622:22;7412:238;7369:281;;:::o;7656:129::-;7690:6;7717:20;;:::i;:::-;7707:30;;7746:33;7774:4;7766:6;7746:33;:::i;:::-;7656:129;;;:::o;7791:307::-;7852:4;7942:18;7934:6;7931:30;7928:56;;;7964:18;;:::i;:::-;7928:56;8002:29;8024:6;8002:29;:::i;:::-;7994:37;;8086:4;8080;8076:15;8068:23;;7791:307;;;:::o;8104:146::-;8201:6;8196:3;8191;8178:30;8242:1;8233:6;8228:3;8224:16;8217:27;8104:146;;;:::o;8256:423::-;8333:5;8358:65;8374:48;8415:6;8374:48;:::i;:::-;8358:65;:::i;:::-;8349:74;;8446:6;8439:5;8432:21;8484:4;8477:5;8473:16;8522:3;8513:6;8508:3;8504:16;8501:25;8498:112;;;8529:79;;:::i;:::-;8498:112;8619:54;8666:6;8661:3;8656;8619:54;:::i;:::-;8339:340;8256:423;;;;;:::o;8698:338::-;8753:5;8802:3;8795:4;8787:6;8783:17;8779:27;8769:122;;8810:79;;:::i;:::-;8769:122;8927:6;8914:20;8952:78;9026:3;9018:6;9011:4;9003:6;8999:17;8952:78;:::i;:::-;8943:87;;8759:277;8698:338;;;;:::o;9042:943::-;9137:6;9145;9153;9161;9210:3;9198:9;9189:7;9185:23;9181:33;9178:120;;;9217:79;;:::i;:::-;9178:120;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:53;9535:7;9526:6;9515:9;9511:22;9490:53;:::i;:::-;9480:63;;9435:118;9592:2;9618:53;9663:7;9654:6;9643:9;9639:22;9618:53;:::i;:::-;9608:63;;9563:118;9748:2;9737:9;9733:18;9720:32;9779:18;9771:6;9768:30;9765:117;;;9801:79;;:::i;:::-;9765:117;9906:62;9960:7;9951:6;9940:9;9936:22;9906:62;:::i;:::-;9896:72;;9691:287;9042:943;;;;;;;:::o;9991:474::-;10059:6;10067;10116:2;10104:9;10095:7;10091:23;10087:32;10084:119;;;10122:79;;:::i;:::-;10084:119;10242:1;10267:53;10312:7;10303:6;10292:9;10288:22;10267:53;:::i;:::-;10257:63;;10213:117;10369:2;10395:53;10440:7;10431:6;10420:9;10416:22;10395:53;:::i;:::-;10385:63;;10340:118;9991:474;;;;;:::o;10471:180::-;10519:77;10516:1;10509:88;10616:4;10613:1;10606:15;10640:4;10637:1;10630:15;10657:320;10701:6;10738:1;10732:4;10728:12;10718:22;;10785:1;10779:4;10775:12;10806:18;10796:81;;10862:4;10854:6;10850:17;10840:27;;10796:81;10924:2;10916:6;10913:14;10893:18;10890:38;10887:84;;10943:18;;:::i;:::-;10887:84;10708:269;10657:320;;;:::o;10983:220::-;11123:34;11119:1;11111:6;11107:14;11100:58;11192:3;11187:2;11179:6;11175:15;11168:28;10983:220;:::o;11209:366::-;11351:3;11372:67;11436:2;11431:3;11372:67;:::i;:::-;11365:74;;11448:93;11537:3;11448:93;:::i;:::-;11566:2;11561:3;11557:12;11550:19;;11209:366;;;:::o;11581:419::-;11747:4;11785:2;11774:9;11770:18;11762:26;;11834:9;11828:4;11824:20;11820:1;11809:9;11805:17;11798:47;11862:131;11988:4;11862:131;:::i;:::-;11854:139;;11581:419;;;:::o;12006:248::-;12146:34;12142:1;12134:6;12130:14;12123:58;12215:31;12210:2;12202:6;12198:15;12191:56;12006:248;:::o;12260:366::-;12402:3;12423:67;12487:2;12482:3;12423:67;:::i;:::-;12416:74;;12499:93;12588:3;12499:93;:::i;:::-;12617:2;12612:3;12608:12;12601:19;;12260:366;;;:::o;12632:419::-;12798:4;12836:2;12825:9;12821:18;12813:26;;12885:9;12879:4;12875:20;12871:1;12860:9;12856:17;12849:47;12913:131;13039:4;12913:131;:::i;:::-;12905:139;;12632:419;;;:::o;13057:232::-;13197:34;13193:1;13185:6;13181:14;13174:58;13266:15;13261:2;13253:6;13249:15;13242:40;13057:232;:::o;13295:366::-;13437:3;13458:67;13522:2;13517:3;13458:67;:::i;:::-;13451:74;;13534:93;13623:3;13534:93;:::i;:::-;13652:2;13647:3;13643:12;13636:19;;13295:366;;;:::o;13667:419::-;13833:4;13871:2;13860:9;13856:18;13848:26;;13920:9;13914:4;13910:20;13906:1;13895:9;13891:17;13884:47;13948:131;14074:4;13948:131;:::i;:::-;13940:139;;13667:419;;;:::o;14092:174::-;14232:26;14228:1;14220:6;14216:14;14209:50;14092:174;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:228::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:11;15273:2;15265:6;15261:15;15254:36;15069:228;:::o;15303:366::-;15445:3;15466:67;15530:2;15525:3;15466:67;:::i;:::-;15459:74;;15542:93;15631:3;15542:93;:::i;:::-;15660:2;15655:3;15651:12;15644:19;;15303:366;;;:::o;15675:419::-;15841:4;15879:2;15868:9;15864:18;15856:26;;15928:9;15922:4;15918:20;15914:1;15903:9;15899:17;15892:47;15956:131;16082:4;15956:131;:::i;:::-;15948:139;;15675:419;;;:::o;16100:148::-;16202:11;16239:3;16224:18;;16100:148;;;;:::o;16254:268::-;16394:66;16390:1;16382:6;16378:14;16371:90;16495:19;16490:2;16482:6;16478:15;16471:44;16254:268;:::o;16528:402::-;16688:3;16709:85;16791:2;16786:3;16709:85;:::i;:::-;16702:92;;16803:93;16892:3;16803:93;:::i;:::-;16921:2;16916:3;16912:12;16905:19;;16528:402;;;:::o;16936:390::-;17042:3;17070:39;17103:5;17070:39;:::i;:::-;17125:89;17207:6;17202:3;17125:89;:::i;:::-;17118:96;;17223:65;17281:6;17276:3;17269:4;17262:5;17258:16;17223:65;:::i;:::-;17313:6;17308:3;17304:16;17297:23;;17046:280;16936:390;;;;:::o;17332:214::-;17472:66;17468:1;17460:6;17456:14;17449:90;17332:214;:::o;17552:400::-;17712:3;17733:84;17815:1;17810:3;17733:84;:::i;:::-;17726:91;;17826:93;17915:3;17826:93;:::i;:::-;17944:1;17939:3;17935:11;17928:18;;17552:400;;;:::o;17958:214::-;18098:66;18094:1;18086:6;18082:14;18075:90;17958:214;:::o;18178:402::-;18338:3;18359:85;18441:2;18436:3;18359:85;:::i;:::-;18352:92;;18453:93;18542:3;18453:93;:::i;:::-;18571:2;18566:3;18562:12;18555:19;;18178:402;;;:::o;18586:214::-;18726:66;18722:1;18714:6;18710:14;18703:90;18586:214;:::o;18806:400::-;18966:3;18987:84;19069:1;19064:3;18987:84;:::i;:::-;18980:91;;19080:93;19169:3;19080:93;:::i;:::-;19198:1;19193:3;19189:11;19182:18;;18806:400;;;:::o;19212:143::-;19348:3;19344:1;19336:6;19332:14;19325:27;19212:143;:::o;19357:384::-;19517:3;19534:84;19616:1;19611:3;19534:84;:::i;:::-;19527:91;;19623:93;19712:3;19623:93;:::i;:::-;19737:1;19732:3;19728:11;19721:18;;19357:384;;;:::o;19743:1729::-;20428:3;20446:148;20590:3;20446:148;:::i;:::-;20439:155;;20607:95;20698:3;20689:6;20607:95;:::i;:::-;20600:102;;20715:148;20859:3;20715:148;:::i;:::-;20708:155;;20876:148;21020:3;20876:148;:::i;:::-;20869:155;;21037:95;21128:3;21119:6;21037:95;:::i;:::-;21030:102;;21145:148;21289:3;21145:148;:::i;:::-;21138:155;;21306:148;21450:3;21306:148;:::i;:::-;21299:155;;21467:3;21460:10;;19743:1729;;;;;:::o;21474:171::-;21610:31;21606:1;21598:6;21594:14;21587:55;21474:171;:::o;21647:386::-;21807:3;21824:85;21906:2;21901:3;21824:85;:::i;:::-;21817:92;;21914:93;22003:3;21914:93;:::i;:::-;22028:2;22023:3;22019:12;22012:19;;21647:386;;;:::o;22035:525::-;22268:3;22286:148;22430:3;22286:148;:::i;:::-;22279:155;;22447:95;22538:3;22529:6;22447:95;:::i;:::-;22440:102;;22555:3;22548:10;;22035:525;;;;:::o;22562:212::-;22698:34;22694:1;22686:6;22682:14;22675:58;22763:7;22758:2;22750:6;22746:15;22739:32;22562:212;:::o;22776:350::-;22918:3;22935:67;22999:2;22994:3;22935:67;:::i;:::-;22928:74;;23007:93;23096:3;23007:93;:::i;:::-;23121:2;23116:3;23112:12;23105:19;;22776:350;;;:::o;23128:403::-;23294:4;23328:2;23317:9;23313:18;23305:26;;23373:9;23367:4;23363:20;23359:1;23348:9;23344:17;23337:47;23397:131;23523:4;23397:131;:::i;:::-;23389:139;;23128:403;;;:::o;23533:211::-;23669:34;23665:1;23657:6;23653:14;23646:58;23734:6;23729:2;23721:6;23717:15;23710:31;23533:211;:::o;23746:350::-;23888:3;23905:67;23969:2;23964:3;23905:67;:::i;:::-;23898:74;;23977:93;24066:3;23977:93;:::i;:::-;24091:2;24086:3;24082:12;24075:19;;23746:350;;;:::o;24098:403::-;24264:4;24298:2;24287:9;24283:18;24275:26;;24343:9;24337:4;24333:20;24329:1;24318:9;24314:17;24307:47;24367:131;24493:4;24367:131;:::i;:::-;24359:139;;24098:403;;;:::o;24503:174::-;24639:34;24635:1;24627:6;24623:14;24616:58;24503:174;:::o;24679:350::-;24821:3;24838:67;24902:2;24897:3;24838:67;:::i;:::-;24831:74;;24910:93;24999:3;24910:93;:::i;:::-;25024:2;25019:3;25015:12;25008:19;;24679:350;;;:::o;25031:403::-;25197:4;25231:2;25220:9;25216:18;25208:26;;25276:9;25270:4;25266:20;25262:1;25251:9;25247:17;25240:47;25300:131;25426:4;25300:131;:::i;:::-;25292:139;;25031:403;;;:::o;25436:170::-;25572:30;25568:1;25560:6;25556:14;25549:54;25436:170;:::o;25608:350::-;25750:3;25767:67;25831:2;25826:3;25767:67;:::i;:::-;25760:74;;25839:93;25928:3;25839:93;:::i;:::-;25953:2;25948:3;25944:12;25937:19;;25608:350;;;:::o;25960:403::-;26126:4;26160:2;26149:9;26145:18;26137:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26229:131;26355:4;26229:131;:::i;:::-;26221:139;;25960:403;;;:::o;26365:167::-;26501:27;26497:1;26489:6;26485:14;26478:51;26365:167;:::o;26534:350::-;26676:3;26693:67;26757:2;26752:3;26693:67;:::i;:::-;26686:74;;26765:93;26854:3;26765:93;:::i;:::-;26879:2;26874:3;26870:12;26863:19;;26534:350;;;:::o;26886:403::-;27052:4;27086:2;27075:9;27071:18;27063:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;26886:403;;;:::o;27291:225::-;27427:34;27423:1;27415:6;27411:14;27404:58;27492:20;27487:2;27479:6;27475:15;27468:45;27291:225;:::o;27518:350::-;27660:3;27677:67;27741:2;27736:3;27677:67;:::i;:::-;27670:74;;27749:93;27838:3;27749:93;:::i;:::-;27863:2;27858:3;27854:12;27847:19;;27518:350;;;:::o;27870:403::-;28036:4;28070:2;28059:9;28055:18;28047:26;;28115:9;28109:4;28105:20;28101:1;28090:9;28086:17;28079:47;28139:131;28265:4;28139:131;:::i;:::-;28131:139;;27870:403;;;:::o;28275:164::-;28319:77;28316:1;28309:88;28412:4;28409:1;28402:15;28432:4;28429:1;28422:15;28441:575;28669:3;28687:95;28778:3;28769:6;28687:95;:::i;:::-;28680:102;;28795:95;28886:3;28877:6;28795:95;:::i;:::-;28788:102;;28903:95;28994:3;28985:6;28903:95;:::i;:::-;28896:102;;29011:3;29004:10;;28441:575;;;;;;:::o;29018:164::-;29062:77;29059:1;29052:88;29155:4;29152:1;29145:15;29175:4;29172:1;29165:15;29184:171;29224:3;29239:20;29257:1;29239:20;:::i;:::-;29234:25;;29269:20;29287:1;29269:20;:::i;:::-;29264:25;;29308:1;29305;29301:9;29294:16;;29325:3;29322:1;29319:10;29316:36;;;29332:18;;:::i;:::-;29316:36;29184:171;;;;:::o;29357:165::-;29397:1;29410:20;29428:1;29410:20;:::i;:::-;29405:25;;29440:20;29458:1;29440:20;:::i;:::-;29435:25;;29475:1;29465:35;;29480:18;;:::i;:::-;29465:35;29518:1;29515;29511:9;29506:14;;29357:165;;;;:::o;29524:362::-;29564:7;29583:20;29601:1;29583:20;:::i;:::-;29578:25;;29613:20;29631:1;29613:20;:::i;:::-;29608:25;;29664:1;29661;29657:9;29682:30;29700:11;29682:30;:::i;:::-;29671:41;;29841:1;29832:7;29828:15;29825:1;29822:22;29806:1;29799:9;29783:71;29764:119;;29863:18;;:::i;:::-;29764:119;29572:314;29524:362;;;;:::o;29888:170::-;30024:30;30020:1;30012:6;30008:14;30001:54;29888:170;:::o;30060:350::-;30202:3;30219:67;30283:2;30278:3;30219:67;:::i;:::-;30212:74;;30291:93;30380:3;30291:93;:::i;:::-;30405:2;30400:3;30396:12;30389:19;;30060:350;;;:::o;30412:403::-;30578:4;30612:2;30601:9;30597:18;30589:26;;30657:9;30651:4;30647:20;30643:1;30632:9;30628:17;30621:47;30681:131;30807:4;30681:131;:::i;:::-;30673:139;;30412:403;;;:::o;30817:218::-;30953:34;30949:1;30941:6;30937:14;30930:58;31018:13;31013:2;31005:6;31001:15;30994:38;30817:218;:::o;31037:350::-;31179:3;31196:67;31260:2;31255:3;31196:67;:::i;:::-;31189:74;;31268:93;31357:3;31268:93;:::i;:::-;31382:2;31377:3;31373:12;31366:19;;31037:350;;;:::o;31389:403::-;31555:4;31589:2;31578:9;31574:18;31566:26;;31634:9;31628:4;31624:20;31620:1;31609:9;31605:17;31598:47;31658:131;31784:4;31658:131;:::i;:::-;31650:139;;31389:403;;;:::o;31794:90::-;31845:6;31875:5;31869:12;31859:22;;31794:90;;;:::o;31886:156::-;31969:11;31999:6;31994:3;31987:19;32035:4;32030:3;32026:14;32011:29;;31886:156;;;;:::o;32044:353::-;32130:3;32154:38;32186:5;32154:38;:::i;:::-;32204:70;32267:6;32262:3;32204:70;:::i;:::-;32197:77;;32279:65;32337:6;32332:3;32325:4;32318:5;32314:16;32279:65;:::i;:::-;32365:29;32387:6;32365:29;:::i;:::-;32360:3;32356:39;32349:46;;32134:263;32044:353;;;;:::o;32399:612::-;32594:4;32628:3;32617:9;32613:19;32605:27;;32638:71;32706:1;32695:9;32691:17;32682:6;32638:71;:::i;:::-;32715:72;32783:2;32772:9;32768:18;32759:6;32715:72;:::i;:::-;32793;32861:2;32850:9;32846:18;32837:6;32793:72;:::i;:::-;32908:9;32902:4;32898:20;32893:2;32882:9;32878:18;32871:48;32932:76;33003:4;32994:6;32932:76;:::i;:::-;32924:84;;32399:612;;;;;;;:::o;33013:129::-;33069:5;33096:6;33090:13;33081:22;;33108:32;33134:5;33108:32;:::i;:::-;33013:129;;;;:::o;33144:325::-;33213:6;33258:2;33246:9;33237:7;33233:23;33229:32;33226:119;;;33264:79;;:::i;:::-;33226:119;33376:1;33397:63;33452:7;33443:6;33432:9;33428:22;33397:63;:::i;:::-;33387:73;;33351:115;33144:325;;;;:::o", + "source": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\nimport \"@openzeppelin/contracts/utils/Base64.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\n// import \"./OnChainSVG.sol\";\n\ncontract SoulboundToken is ERC721 {\n using Counters for Counters.Counter;\n Counters.Counter private _tokenIds;\n\n constructor() ERC721(\"Credit System SBT\", \"CS_SBT\") {}\n\n function mint(address player) public returns (uint256) {\n _tokenIds.increment();\n uint256 newItemId = _tokenIds.current();\n _mint(player, newItemId);\n\n return newItemId;\n }\n\n function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual override {\n require(from == address(0) || to == address(0), \"SOULBOUND: Non-Transferable.\");\n require(balanceOf(to)==0, \"SOULBOUND: Everyone should only have 1 SBT.\");\n super._beforeTokenTransfer(from, to, firstTokenId, batchSize);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n _requireMinted(tokenId);\n\n string memory json = Base64.encode(\n bytes(\n string(\n abi.encodePacked(\n '{\"name\": \"Credit System Soulbound Token (CSSBT) #',\n Strings.toString(tokenId),\n '\",',\n '\"image_data\": \"',\n getSvgImage(tokenId),\n '\"',\n \"}\"\n )\n ) \n )\n );\n return string(abi.encodePacked(\"data:application/json;base64,\", json));\n }\n\n function getSvgImage(uint uid) private pure returns (string memory){\n string memory uid_str = Strings.toString(uid);\n string memory a = \"Credit System Soulbound Token (CSSBT)#\";\n string memory b = \"\";\n return string(abi.encodePacked(a, uid_str, b));\n }\n\n}", "sourcePath": "/home/snsd0805/code/1112_blockchain/Final/contracts/SoulboundToken.sol", "ast": { "absolutePath": "project:/contracts/SoulboundToken.sol", @@ -16740,13 +17440,13 @@ 2796 ], "SoulboundToken": [ - 2928 + 2976 ], "Strings": [ 1789 ] }, - "id": 2929, + "id": 2977, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ @@ -16770,7 +17470,7 @@ "id": 2799, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 2929, + "scope": 2977, "sourceUnit": 927, "src": "65:57:13", "symbolAliases": [], @@ -16782,7 +17482,7 @@ "id": 2800, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 2929, + "scope": 2977, "sourceUnit": 1561, "src": "123:52:13", "symbolAliases": [], @@ -16794,7 +17494,7 @@ "id": 2801, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 2929, + "scope": 2977, "sourceUnit": 1465, "src": "176:50:13", "symbolAliases": [], @@ -16806,7 +17506,7 @@ "id": 2802, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 2929, + "scope": 2977, "sourceUnit": 1790, "src": "227:51:13", "symbolAliases": [], @@ -16835,9 +17535,9 @@ "contractDependencies": [], "contractKind": "contract", "fullyImplemented": true, - "id": 2928, + "id": 2976, "linearizedBaseContracts": [ - 2928, + 2976, 926, 1087, 1042, @@ -16893,7 +17593,7 @@ "name": "_tokenIds", "nameLocation": "416:9:13", "nodeType": "VariableDeclaration", - "scope": 2928, + "scope": 2976, "src": "391:34:13", "stateVariable": true, "storageLocation": "default", @@ -17001,7 +17701,7 @@ "parameters": [], "src": "484:0:13" }, - "scope": 2928, + "scope": 2976, "src": "432:54:13", "stateMutability": "nonpayable", "virtual": false, @@ -17316,7 +18016,7 @@ ], "src": "537:9:13" }, - "scope": 2928, + "scope": 2976, "src": "492:203:13", "stateMutability": "nonpayable", "virtual": false, @@ -17324,23 +18024,707 @@ }, { "baseFunctions": [ - 204 + 897 ], "body": { - "id": 2893, + "id": 2892, "nodeType": "Block", - "src": "789:618:13", + "src": "824:249:13", "statements": [ { "expression": { "arguments": [ { - "id": 2854, - "name": "tokenId", + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2858, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2847, + "src": "842:4:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 2861, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "858:1:13", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2860, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "850:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2859, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "850:7:13", + "typeDescriptions": {} + } + }, + "id": 2862, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "850:10:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "842:18:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2864, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2849, + "src": "864:2:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 2867, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "878:1:13", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2866, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "870:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2865, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "870:7:13", + "typeDescriptions": {} + } + }, + "id": 2868, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "870:10:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "864:16:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "842:38:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "534f554c424f554e443a204e6f6e2d5472616e7366657261626c652e", + "id": 2871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "882:30:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa", + "typeString": "literal_string \"SOULBOUND: Non-Transferable.\"" + }, + "value": "SOULBOUND: Non-Transferable." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_891ac5ad6a7de0ea1b7252ceceef6e231b46e733ad0efda59c820aca4509d2fa", + "typeString": "literal_string \"SOULBOUND: Non-Transferable.\"" + } + ], + "id": 2857, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "834:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "834:79:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2873, + "nodeType": "ExpressionStatement", + "src": "834:79:13" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 2876, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2849, + "src": "941:2:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2875, + "name": "balanceOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 117, + "src": "931:9:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view returns (uint256)" + } + }, + "id": 2877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "931:13:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 2878, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "946:1:13", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "931:16:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "534f554c424f554e443a2045766572796f6e652073686f756c64206f6e6c7920686176652031205342542e", + "id": 2880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "949:45:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b", + "typeString": "literal_string \"SOULBOUND: Everyone should only have 1 SBT.\"" + }, + "value": "SOULBOUND: Everyone should only have 1 SBT." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_456385bd6a1ce1de794d03111ec331b306278dead8f2857a8e5bf080b9c7b33b", + "typeString": "literal_string \"SOULBOUND: Everyone should only have 1 SBT.\"" + } + ], + "id": 2874, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "923:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "923:72:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2882, + "nodeType": "ExpressionStatement", + "src": "923:72:13" + }, + { + "expression": { + "arguments": [ + { + "id": 2886, + "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2847, - "src": "814:7:13", + "src": "1032:4:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2887, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2849, + "src": "1038:2:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2888, + "name": "firstTokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2851, + "src": "1042:12:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2889, + "name": "batchSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2853, + "src": "1056:9:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2883, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967271, + "src": "1005:5:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_super$_SoulboundToken_$2976_$", + "typeString": "type(contract super SoulboundToken)" + } + }, + "id": 2885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1011:20:13", + "memberName": "_beforeTokenTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 897, + "src": "1005:26:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256,uint256)" + } + }, + "id": 2890, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1005:61:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2891, + "nodeType": "ExpressionStatement", + "src": "1005:61:13" + } + ] + }, + "id": 2893, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeTokenTransfer", + "nameLocation": "710:20:13", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2855, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "815:8:13" + }, + "parameters": { + "id": 2854, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2847, + "mutability": "mutable", + "name": "from", + "nameLocation": "739:4:13", + "nodeType": "VariableDeclaration", + "scope": 2893, + "src": "731:12:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2846, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "731:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2849, + "mutability": "mutable", + "name": "to", + "nameLocation": "753:2:13", + "nodeType": "VariableDeclaration", + "scope": 2893, + "src": "745:10:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2848, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "745:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2851, + "mutability": "mutable", + "name": "firstTokenId", + "nameLocation": "765:12:13", + "nodeType": "VariableDeclaration", + "scope": 2893, + "src": "757:20:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2850, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "757:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2853, + "mutability": "mutable", + "name": "batchSize", + "nameLocation": "787:9:13", + "nodeType": "VariableDeclaration", + "scope": 2893, + "src": "779:17:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2852, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "779:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "730:67:13" + }, + "returnParameters": { + "id": 2856, + "nodeType": "ParameterList", + "parameters": [], + "src": "824:0:13" + }, + "scope": 2976, + "src": "701:372:13", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 204 + ], + "body": { + "id": 2941, + "nodeType": "Block", + "src": "1167:618:13", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2902, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2895, + "src": "1192:7:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17354,18 +18738,18 @@ "typeString": "uint256" } ], - "id": 2853, + "id": 2901, "name": "_requireMinted", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 822, - "src": "799:14:13", + "src": "1177:14:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$", "typeString": "function (uint256) view" } }, - "id": 2855, + "id": 2903, "isConstant": false, "isLValue": false, "isPure": false, @@ -17374,31 +18758,31 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "799:23:13", + "src": "1177:23:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 2856, + "id": 2904, "nodeType": "ExpressionStatement", - "src": "799:23:13" + "src": "1177:23:13" }, { "assignments": [ - 2858 + 2906 ], "declarations": [ { "constant": false, - "id": 2858, + "id": 2906, "mutability": "mutable", "name": "json", - "nameLocation": "847:4:13", + "nameLocation": "1225:4:13", "nodeType": "VariableDeclaration", - "scope": 2893, - "src": "833:18:13", + "scope": 2941, + "src": "1211:18:13", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17406,10 +18790,10 @@ "typeString": "string" }, "typeName": { - "id": 2857, + "id": 2905, "name": "string", "nodeType": "ElementaryTypeName", - "src": "833:6:13", + "src": "1211:6:13", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" @@ -17418,7 +18802,7 @@ "visibility": "internal" } ], - "id": 2883, + "id": 2931, "initialValue": { "arguments": [ { @@ -17429,14 +18813,14 @@ "arguments": [ { "hexValue": "7b226e616d65223a20224372656469742053797374656d20536f756c626f756e6420546f6b656e20284353534254292023", - "id": 2867, + "id": 2915, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "974:51:13", + "src": "1352:51:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_265c76b99a02c4ebdf5ce3cd247fdc7aa43f4e168c910aa37748d85e1c8b9317", "typeString": "literal_string \"{\"name\": \"Credit System Soulbound Token (CSSBT) #\"" @@ -17446,12 +18830,12 @@ { "arguments": [ { - "id": 2870, + "id": 2918, "name": "tokenId", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2847, - "src": "1068:7:13", + "referencedDeclaration": 2895, + "src": "1446:7:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17466,33 +18850,33 @@ } ], "expression": { - "id": 2868, + "id": 2916, "name": "Strings", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1789, - "src": "1051:7:13", + "src": "1429:7:13", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Strings_$1789_$", "typeString": "type(library Strings)" } }, - "id": 2869, + "id": 2917, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "1059:8:13", + "memberLocation": "1437:8:13", "memberName": "toString", "nodeType": "MemberAccess", "referencedDeclaration": 1619, - "src": "1051:16:13", + "src": "1429:16:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", "typeString": "function (uint256) pure returns (string memory)" } }, - "id": 2871, + "id": 2919, "isConstant": false, "isLValue": false, "isPure": false, @@ -17501,7 +18885,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1051:25:13", + "src": "1429:25:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", @@ -17510,14 +18894,14 @@ }, { "hexValue": "222c", - "id": 2872, + "id": 2920, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1102:4:13", + "src": "1480:4:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_24823e6fed9f46f380d33960e511caeb002037c5a4e9735154809fa36b166ffb", "typeString": "literal_string \"\",\"" @@ -17526,14 +18910,14 @@ }, { "hexValue": "22696d6167655f64617461223a2022", - "id": 2873, + "id": 2921, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1132:17:13", + "src": "1510:17:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_37d584b4b089ff2f7ba00eec4972cf4a81a429bd95bade137ee46b46b3c549f8", "typeString": "literal_string \"\"image_data\": \"\"" @@ -17543,12 +18927,12 @@ { "arguments": [ { - "id": 2875, + "id": 2923, "name": "tokenId", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2847, - "src": "1187:7:13", + "referencedDeclaration": 2895, + "src": "1565:7:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17562,18 +18946,18 @@ "typeString": "uint256" } ], - "id": 2874, + "id": 2922, "name": "getSvgImage", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2927, - "src": "1175:11:13", + "referencedDeclaration": 2975, + "src": "1553:11:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", "typeString": "function (uint256) pure returns (string memory)" } }, - "id": 2876, + "id": 2924, "isConstant": false, "isLValue": false, "isPure": false, @@ -17582,7 +18966,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1175:20:13", + "src": "1553:20:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", @@ -17591,14 +18975,14 @@ }, { "hexValue": "22", - "id": 2877, + "id": 2925, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1221:3:13", + "src": "1599:3:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0", "typeString": "literal_string \"\"\"" @@ -17607,14 +18991,14 @@ }, { "hexValue": "7d", - "id": 2878, + "id": 2926, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1250:3:13", + "src": "1628:3:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_8e2ffa389f3a6ded42d759b3377ac0d928e6a268d143bcc9517093d10c843bff", "typeString": "literal_string \"}\"" @@ -17654,32 +19038,32 @@ } ], "expression": { - "id": 2865, + "id": 2913, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4294967295, - "src": "932:3:13", + "src": "1310:3:13", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 2866, + "id": 2914, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, - "memberLocation": "936:12:13", + "memberLocation": "1314:12:13", "memberName": "encodePacked", "nodeType": "MemberAccess", - "src": "932:16:13", + "src": "1310:16:13", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 2879, + "id": 2927, "isConstant": false, "isLValue": false, "isPure": false, @@ -17688,7 +19072,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "932:343:13", + "src": "1310:343:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -17703,26 +19087,26 @@ "typeString": "bytes memory" } ], - "id": 2864, + "id": 2912, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "904:6:13", + "src": "1282:6:13", "typeDescriptions": { "typeIdentifier": "t_type$_t_string_storage_ptr_$", "typeString": "type(string storage pointer)" }, "typeName": { - "id": 2863, + "id": 2911, "name": "string", "nodeType": "ElementaryTypeName", - "src": "904:6:13", + "src": "1282:6:13", "typeDescriptions": {} } }, - "id": 2880, + "id": 2928, "isConstant": false, "isLValue": false, "isPure": false, @@ -17731,7 +19115,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "904:389:13", + "src": "1282:389:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", @@ -17746,26 +19130,26 @@ "typeString": "string memory" } ], - "id": 2862, + "id": 2910, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "881:5:13", + "src": "1259:5:13", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", "typeString": "type(bytes storage pointer)" }, "typeName": { - "id": 2861, + "id": 2909, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "881:5:13", + "src": "1259:5:13", "typeDescriptions": {} } }, - "id": 2881, + "id": 2929, "isConstant": false, "isLValue": false, "isPure": false, @@ -17774,7 +19158,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "881:429:13", + "src": "1259:429:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -17790,33 +19174,33 @@ } ], "expression": { - "id": 2859, + "id": 2907, "name": "Base64", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1464, - "src": "854:6:13", + "src": "1232:6:13", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_Base64_$1464_$", "typeString": "type(library Base64)" } }, - "id": 2860, + "id": 2908, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberLocation": "861:6:13", + "memberLocation": "1239:6:13", "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": 1463, - "src": "854:13:13", + "src": "1232:13:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$", "typeString": "function (bytes memory) pure returns (string memory)" } }, - "id": 2882, + "id": 2930, "isConstant": false, "isLValue": false, "isPure": false, @@ -17825,7 +19209,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "854:466:13", + "src": "1232:466:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", @@ -17833,7 +19217,7 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "833:487:13" + "src": "1211:487:13" }, { "expression": { @@ -17842,14 +19226,14 @@ "arguments": [ { "hexValue": "646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c", - "id": 2888, + "id": 2936, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "1361:31:13", + "src": "1739:31:13", "typeDescriptions": { "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa", "typeString": "literal_string \"data:application/json;base64,\"" @@ -17857,12 +19241,12 @@ "value": "data:application/json;base64," }, { - "id": 2889, + "id": 2937, "name": "json", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 2858, - "src": "1394:4:13", + "referencedDeclaration": 2906, + "src": "1772:4:13", "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", "typeString": "string memory" @@ -17881,32 +19265,32 @@ } ], "expression": { - "id": 2886, + "id": 2934, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4294967295, - "src": "1344:3:13", + "src": "1722:3:13", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 2887, + "id": 2935, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, - "memberLocation": "1348:12:13", + "memberLocation": "1726:12:13", "memberName": "encodePacked", "nodeType": "MemberAccess", - "src": "1344:16:13", + "src": "1722:16:13", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 2890, + "id": 2938, "isConstant": false, "isLValue": false, "isPure": false, @@ -17915,7 +19299,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1344:55:13", + "src": "1722:55:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", @@ -17930,26 +19314,26 @@ "typeString": "bytes memory" } ], - "id": 2885, + "id": 2933, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "1337:6:13", + "src": "1715:6:13", "typeDescriptions": { "typeIdentifier": "t_type$_t_string_storage_ptr_$", "typeString": "type(string storage pointer)" }, "typeName": { - "id": 2884, + "id": 2932, "name": "string", "nodeType": "ElementaryTypeName", - "src": "1337:6:13", + "src": "1715:6:13", "typeDescriptions": {} } }, - "id": 2891, + "id": 2939, "isConstant": false, "isLValue": false, "isPure": false, @@ -17958,458 +19342,7 @@ "nameLocations": [], "names": [], "nodeType": "FunctionCall", - "src": "1337:63:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "functionReturnParameters": 2852, - "id": 2892, - "nodeType": "Return", - "src": "1330:70:13" - } - ] - }, - "functionSelector": "c87b56dd", - "id": 2894, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tokenURI", - "nameLocation": "710:8:13", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2849, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "756:8:13" - }, - "parameters": { - "id": 2848, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2847, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "727:7:13", - "nodeType": "VariableDeclaration", - "scope": 2894, - "src": "719:15:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2846, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "719:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "718:17:13" - }, - "returnParameters": { - "id": 2852, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2851, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2894, - "src": "774:13:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2850, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "774:6:13", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "773:15:13" - }, - "scope": 2928, - "src": "701:706:13", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2926, - "nodeType": "Block", - "src": "1480:8842:13", - "statements": [ - { - "assignments": [ - 2902 - ], - "declarations": [ - { - "constant": false, - "id": 2902, - "mutability": "mutable", - "name": "uid_str", - "nameLocation": "1504:7:13", - "nodeType": "VariableDeclaration", - "scope": 2926, - "src": "1490:21:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2901, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1490:6:13", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 2907, - "initialValue": { - "arguments": [ - { - "id": 2905, - "name": "uid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2896, - "src": "1531:3:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 2903, - "name": "Strings", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1789, - "src": "1514:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Strings_$1789_$", - "typeString": "type(library Strings)" - } - }, - "id": 2904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1522:8:13", - "memberName": "toString", - "nodeType": "MemberAccess", - "referencedDeclaration": 1619, - "src": "1514:16:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", - "typeString": "function (uint256) pure returns (string memory)" - } - }, - "id": 2906, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1514:21:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1490:45:13" - }, - { - "assignments": [ - 2909 - ], - "declarations": [ - { - "constant": false, - "id": 2909, - "mutability": "mutable", - "name": "a", - "nameLocation": "1559:1:13", - "nodeType": "VariableDeclaration", - "scope": 2926, - "src": "1545:15:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2908, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1545:6:13", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 2911, - "initialValue": { - "hexValue": "3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23", - "id": 2910, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1563:2366:13", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_dbcc12a40ae8300b68536c213bc5a43164d523186f9da63fce0f8091a561880f", - "typeString": "literal_string \"Credit System Soulbound Token (CSSBT)#\"" - }, - "value": "<svg id='eY2GjP7k5St1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 511.999 511.999' shape-rendering='geometricPrecision' text-rendering='geometricPrecision' width='511.999' height='511.999'><path d='M460.803,446.739h-409.606C22.967,446.739,0,423.772,0,395.542v-279.085C0,88.227,22.967,65.26,51.197,65.26h409.605c28.23,0,51.197,22.967,51.197,51.197v279.084c.001,28.231-22.966,51.198-51.196,51.198Z' fill='#39a3db'/><path d='M460.803,65.26h-204.804v381.479h204.802c28.23,0,51.197-22.967,51.197-51.197v-279.085C512,88.227,489.033,65.26,460.803,65.26Z' fill='#3797d3'/><path d='M237.413,381.144h-156.122c-10.264,0-18.586-8.322-18.586-18.586v-213.119c0-10.264,8.322-18.586,18.586-18.586h156.122c10.264,0,18.586,8.322,18.586,18.586v213.119c0,10.266-8.32,18.586-18.586,18.586Z' fill='#80d0e1'/><g><circle r='27.204' transform='translate(159.356 237.355)' fill='#e8f2fb'/><path d='M160.414,285.559c-40.261,0-73.306,30.9-76.71,70.279-.312,3.614,2.556,6.721,6.184,6.721h141.053c3.628,0,6.496-3.106,6.184-6.721-3.405-39.378-36.449-70.279-76.711-70.279Z' fill='#e8f2fb'/></g><path d='M439.004,234.586h-147.18c-10.264,0-18.586-8.322-18.586-18.586v-66.561c0-10.264,8.322-18.586,18.586-18.586h147.18c10.264,0,18.586,8.322,18.586,18.586v66.561c0,10.265-8.321,18.586-18.586,18.586Z' transform='matrix(1.06575 0 0 1.15416-23.142833-14.750278)' fill='#51b3da'/><path d='M439.004,284.497h-147.18c-10.264,0-18.586-8.322-18.586-18.586s8.322-18.586,18.586-18.586h147.18c10.264,0,18.586,8.322,18.586,18.586c0,10.266-8.321,18.586-18.586,18.586Z' transform='matrix(1.075331 0 0 1.526395-25.760726-81.826221)' fill='#51b3da'/><text dx='0' dy='0' font-family='&quot;eY2GjP7k5St1:::Source Sans Pro&quot;' font-size='25.59995' font-weight='700' transform='translate(270.606978 180.04155)' fill='#fff' stroke-width='0'><tspan y='0' font-weight='700' stroke-width='0'><![CDATA[Credit System Soulbound Token (CSSBT)#" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1545:2384:13" - }, - { - "assignments": [ - 2913 - ], - "declarations": [ - { - "constant": false, - "id": 2913, - "mutability": "mutable", - "name": "b", - "nameLocation": "3953:1:13", - "nodeType": "VariableDeclaration", - "scope": 2926, - "src": "3939:15:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2912, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3939:6:13", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 2915, - "initialValue": { - "hexValue": "5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e", - "id": 2914, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3958:6301:13", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3b8052da42b9847f866978e427af2eeb6ff3d7c7469020abf02b901a8c834480", - "typeString": "literal_string \"\"" - }, - "value": "]]>" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3939:6320:13" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 2920, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2909, - "src": "10300:1:13", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 2921, - "name": "uid_str", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2902, - "src": "10303:7:13", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 2922, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2913, - "src": "10312:1:13", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "id": 2918, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "10283:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 2919, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10287:12:13", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "10283:16:13", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 2923, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10283:31:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 2917, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10276:6:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_string_storage_ptr_$", - "typeString": "type(string storage pointer)" - }, - "typeName": { - "id": 2916, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "10276:6:13", - "typeDescriptions": {} - } - }, - "id": 2924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10276:39:13", + "src": "1715:63:13", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_string_memory_ptr", @@ -18417,32 +19350,39 @@ } }, "functionReturnParameters": 2900, - "id": 2925, + "id": 2940, "nodeType": "Return", - "src": "10269:46:13" + "src": "1708:70:13" } ] }, - "id": 2927, + "functionSelector": "c87b56dd", + "id": 2942, "implemented": true, "kind": "function", "modifiers": [], - "name": "getSvgImage", - "nameLocation": "1422:11:13", + "name": "tokenURI", + "nameLocation": "1088:8:13", "nodeType": "FunctionDefinition", - "parameters": { + "overrides": { "id": 2897, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1134:8:13" + }, + "parameters": { + "id": 2896, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 2896, + "id": 2895, "mutability": "mutable", - "name": "uid", - "nameLocation": "1439:3:13", + "name": "tokenId", + "nameLocation": "1105:7:13", "nodeType": "VariableDeclaration", - "scope": 2927, - "src": "1434:8:13", + "scope": 2942, + "src": "1097:15:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -18450,10 +19390,10 @@ "typeString": "uint256" }, "typeName": { - "id": 2895, - "name": "uint", + "id": 2894, + "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1434:4:13", + "src": "1097:7:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -18462,7 +19402,7 @@ "visibility": "internal" } ], - "src": "1433:10:13" + "src": "1096:17:13" }, "returnParameters": { "id": 2900, @@ -18475,8 +19415,8 @@ "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", - "scope": 2927, - "src": "1466:13:13", + "scope": 2942, + "src": "1152:13:13", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -18487,7 +19427,7 @@ "id": 2898, "name": "string", "nodeType": "ElementaryTypeName", - "src": "1466:6:13", + "src": "1152:6:13", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" @@ -18496,21 +19436,465 @@ "visibility": "internal" } ], - "src": "1465:15:13" + "src": "1151:15:13" }, - "scope": 2928, - "src": "1413:8909:13", + "scope": 2976, + "src": "1079:706:13", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 2974, + "nodeType": "Block", + "src": "1858:8842:13", + "statements": [ + { + "assignments": [ + 2950 + ], + "declarations": [ + { + "constant": false, + "id": 2950, + "mutability": "mutable", + "name": "uid_str", + "nameLocation": "1882:7:13", + "nodeType": "VariableDeclaration", + "scope": 2974, + "src": "1868:21:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2949, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1868:6:13", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 2955, + "initialValue": { + "arguments": [ + { + "id": 2953, + "name": "uid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2944, + "src": "1909:3:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2951, + "name": "Strings", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1789, + "src": "1892:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Strings_$1789_$", + "typeString": "type(library Strings)" + } + }, + "id": 2952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1900:8:13", + "memberName": "toString", + "nodeType": "MemberAccess", + "referencedDeclaration": 1619, + "src": "1892:16:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$", + "typeString": "function (uint256) pure returns (string memory)" + } + }, + "id": 2954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1892:21:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1868:45:13" + }, + { + "assignments": [ + 2957 + ], + "declarations": [ + { + "constant": false, + "id": 2957, + "mutability": "mutable", + "name": "a", + "nameLocation": "1937:1:13", + "nodeType": "VariableDeclaration", + "scope": 2974, + "src": "1923:15:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2956, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1923:6:13", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 2959, + "initialValue": { + "hexValue": "3c7376672069643d27655932476a50376b355374312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b272076696577426f783d27302030203531312e393939203531312e393939272073686170652d72656e646572696e673d2767656f6d6574726963507265636973696f6e2720746578742d72656e646572696e673d2767656f6d6574726963507265636973696f6e272077696474683d273531312e39393927206865696768743d273531312e393939273e3c7061746820643d274d3436302e3830332c3434362e373339682d3430392e3630364332322e3936372c3434362e3733392c302c3432332e3737322c302c3339352e353432762d3237392e30383543302c38382e3232372c32322e3936372c36352e32362c35312e3139372c36352e3236683430392e3630356332382e32332c302c35312e3139372c32322e3936372c35312e3139372c35312e313937763237392e303834632e3030312c32382e3233312d32322e3936362c35312e3139382d35312e3139362c35312e3139385a272066696c6c3d2723333961336462272f3e3c7061746820643d274d3436302e3830332c36352e3236682d3230342e383034763338312e343739683230342e3830326332382e32332c302c35312e3139372d32322e3936372c35312e3139372d35312e313937762d3237392e303835433531322c38382e3232372c3438392e3033332c36352e32362c3436302e3830332c36352e32365a272066696c6c3d2723333739376433272f3e3c7061746820643d274d3233372e3431332c3338312e313434682d3135362e313232632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d3231332e31313963302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683135362e3132326331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e353836763231332e31313963302c31302e3236362d382e33322c31382e3538362d31382e3538362c31382e3538365a272066696c6c3d2723383064306531272f3e3c673e3c636972636c6520723d2732372e32303427207472616e73666f726d3d277472616e736c617465283135392e333536203233372e33353529272066696c6c3d2723653866326662272f3e3c7061746820643d274d3136302e3431342c3238352e353539632d34302e3236312c302d37332e3330362c33302e392d37362e37312c37302e3237392d2e3331322c332e3631342c322e3535362c362e3732312c362e3138342c362e373231683134312e30353363332e3632382c302c362e3439362d332e3130362c362e3138342d362e3732312d332e3430352d33392e3337382d33362e3434392d37302e3237392d37362e3731312d37302e3237395a272066696c6c3d2723653866326662272f3e3c2f673e3c7061746820643d274d3433392e3030342c3233342e353836682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e353836762d36362e35363163302d31302e3236342c382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e3538367636362e35363163302c31302e3236352d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e30363537352030203020312e31353431362d32332e3134323833332d31342e37353032373829272066696c6c3d2723353162336461272f3e3c7061746820643d274d3433392e3030342c3238342e343937682d3134372e3138632d31302e3236342c302d31382e3538362d382e3332322d31382e3538362d31382e35383673382e3332322d31382e3538362c31382e3538362d31382e353836683134372e31386331302e3236342c302c31382e3538362c382e3332322c31382e3538362c31382e35383663302c31302e3236362d382e3332312c31382e3538362d31382e3538362c31382e3538365a27207472616e73666f726d3d276d617472697828312e3037353333312030203020312e3532363339352d32352e3736303732362d38312e38323632323129272066696c6c3d2723353162336461272f3e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283237302e363036393738203138302e303431353529272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b4372656469742053797374656d5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2732352e35393939352720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020536f756c626f756e6420546f6b656e5d5d3e3c2f747370616e3e3c747370616e20783d27302720793d2735312e313939392720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b2020202020284353534254295d5d3e3c2f747370616e3e3c2f746578743e3c746578742064783d2730272064793d27302720666f6e742d66616d696c793d272671756f743b655932476a50376b355374313a3a3a536f757263652053616e732050726f2671756f743b2720666f6e742d73697a653d2732352e35393939352720666f6e742d7765696768743d2737303027207472616e73666f726d3d277472616e736c617465283239352e363933363739203333322e34343530393429272066696c6c3d272366666627207374726f6b652d77696474683d2730273e3c747370616e20793d27302720666f6e742d7765696768743d2737303027207374726f6b652d77696474683d2730273e3c215b43444154415b23", + "id": 2958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1941:2366:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dbcc12a40ae8300b68536c213bc5a43164d523186f9da63fce0f8091a561880f", + "typeString": "literal_string \"Credit System Soulbound Token (CSSBT)#\"" + }, + "value": "<svg id='eY2GjP7k5St1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 511.999 511.999' shape-rendering='geometricPrecision' text-rendering='geometricPrecision' width='511.999' height='511.999'><path d='M460.803,446.739h-409.606C22.967,446.739,0,423.772,0,395.542v-279.085C0,88.227,22.967,65.26,51.197,65.26h409.605c28.23,0,51.197,22.967,51.197,51.197v279.084c.001,28.231-22.966,51.198-51.196,51.198Z' fill='#39a3db'/><path d='M460.803,65.26h-204.804v381.479h204.802c28.23,0,51.197-22.967,51.197-51.197v-279.085C512,88.227,489.033,65.26,460.803,65.26Z' fill='#3797d3'/><path d='M237.413,381.144h-156.122c-10.264,0-18.586-8.322-18.586-18.586v-213.119c0-10.264,8.322-18.586,18.586-18.586h156.122c10.264,0,18.586,8.322,18.586,18.586v213.119c0,10.266-8.32,18.586-18.586,18.586Z' fill='#80d0e1'/><g><circle r='27.204' transform='translate(159.356 237.355)' fill='#e8f2fb'/><path d='M160.414,285.559c-40.261,0-73.306,30.9-76.71,70.279-.312,3.614,2.556,6.721,6.184,6.721h141.053c3.628,0,6.496-3.106,6.184-6.721-3.405-39.378-36.449-70.279-76.711-70.279Z' fill='#e8f2fb'/></g><path d='M439.004,234.586h-147.18c-10.264,0-18.586-8.322-18.586-18.586v-66.561c0-10.264,8.322-18.586,18.586-18.586h147.18c10.264,0,18.586,8.322,18.586,18.586v66.561c0,10.265-8.321,18.586-18.586,18.586Z' transform='matrix(1.06575 0 0 1.15416-23.142833-14.750278)' fill='#51b3da'/><path d='M439.004,284.497h-147.18c-10.264,0-18.586-8.322-18.586-18.586s8.322-18.586,18.586-18.586h147.18c10.264,0,18.586,8.322,18.586,18.586c0,10.266-8.321,18.586-18.586,18.586Z' transform='matrix(1.075331 0 0 1.526395-25.760726-81.826221)' fill='#51b3da'/><text dx='0' dy='0' font-family='&quot;eY2GjP7k5St1:::Source Sans Pro&quot;' font-size='25.59995' font-weight='700' transform='translate(270.606978 180.04155)' fill='#fff' stroke-width='0'><tspan y='0' font-weight='700' stroke-width='0'><![CDATA[Credit System Soulbound Token (CSSBT)#" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1923:2384:13" + }, + { + "assignments": [ + 2961 + ], + "declarations": [ + { + "constant": false, + "id": 2961, + "mutability": "mutable", + "name": "b", + "nameLocation": "4331:1:13", + "nodeType": "VariableDeclaration", + "scope": 2974, + "src": "4317:15:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2960, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4317:6:13", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 2963, + "initialValue": { + "hexValue": "5d5d3e3c2f747370616e3e3c2f746578743e3c7374796c653e3c215b43444154415b40666f6e742d66616365207b666f6e742d66616d696c793a2027655932476a50376b355374313a3a3a536f757263652053616e732050726f273b666f6e742d7374796c653a206e6f726d616c3b666f6e742d7765696768743a203730303b7372633a2075726c28646174613a666f6e742f7474663b636861727365743d7574662d383b6261736536342c414145414141414e41494141417742515230524652674153414251414141446341414141466b645154314e53446b4733414141486141414141787848553156435a6e553268774141417951414141484954314d764d6c7842647134414141484d4141414159474e745958414345414d35414141436f4141414149526e62486c6d6e68456676514141436f514141416451614756685a42742f4874514141414659414141414e6d686f5a57454b66775863414141424e4141414143526f625852344d5230464167414141697741414142306247396a5952326748395941414147514141414150473168654841414e5144334141414139414141414342755957316c55755a7533674141424f774141414a386347397a64502f524144494141414555414141414941414241414141444141414141414141414143414145414167415441414541414141424141414148514351414177415977414841414541414141414141414141414141414141414241414441414d41414141414141442f7a674179414141414141414141414141414141414141414141414141414141414151414141396a2b37774141434a6a2b4e2f343343473041415141414141414141414141414141414141414141423041415141414141494c68645a7438343566447a7a314141454436414141414144595861434541414141414e316d4c7a622b4e2f3745434730443851414241414d41416741414141414141414141414377414c414267414977417a414464415134425141467a415838426c77477a416555434277497a416c4d436a674b7a4174554442414d5141796f4452414e4d4132594467414f4a413549447141414441696f43764141464141414369674a594141414153774b4b416c674141414665414449424b5141414167734841774d454177494342414141414363414141414441414141414141414141424252454a50414341414950372f4175372f426741414139674245534141415a384141414141416641436c4141414143414141774b794146414179414141416c304154514a47414334434c41416a4169774147514939414545435051416e416759414a414555414463434a4142424152344151514e5a4145454350414242416973414a41474f41454542757741564158384145514934414477434351414d41525141515146594145674257414177415251414e77454d414438424441416a415177415077454d41434d4141502b74414141414167414141414d414141415541414d41415141414142514142414277414141414741415141414d414341416741436b4151774255414749415a5142704147384164514235414b442f2f774141414341414b41424341464d415967426b41476b416177427941486b416f502f2f2f2b482f37662f412f37482f70502b6a2f36442f6e2f2b642f35722f595141424141414141414141414141414141414141414141414141414141414141414141414145414141414b414b41425441414552455a4d5641434759336c79624142325a334a6c6177426d62474630626741614145414141304661525341414d6b4e53564341414a46525353794141466741412f2f38414241414741413041454141584141442f2f77414541415541444141504142594141502f2f414151414241414c41413441465141412f2f38414177414441416f41464141454141414141502f2f41414d414167414a41424d41424141414141442f2f774144414145414341415341415141414141412f2f38414177414141416341455141595a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a4735766251436d5a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743655a6e4a68597743656247396a624143596247396a624143596247396a62414359626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e567463674353626e56746367435341414141415141424141414141514141414141414167414241414d4141414142414149414251426f4146494152414161414177414151414141414541434141424143442f2f674147414141414151414941414d4141514161414145414567414141414541414141454141454141674161414273414151414341426741475141424141414141514149414145414641414441414541414141424141674141514147414155414151414341425541466741424141414141514149414145414267414f414145414151414a414141414341426d41414d414151514a414141417867465141414d414151514a414145414867457941414d414151514a414149414341457141414d414151514a41414d415267446b41414d414151514a414151414b41433841414d414151514a414155415a41425941414d414151514a414159414a41413041414d414151514a414134414e4141414147674164414230414841414f674176414338416377426a4148494161514277414851416377417541484d41615142734143344162774279414763414c7742504145594154414254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a414257414755416367427a41476b4162774275414341414d674175414441414e414131414473416141427641485141597742764147344164674167414445414c674177414334414d51417741446b414f774274414745416177426c414738416441426d414755416541426c414341414d674175414455414c674132414455414e5141354144594155774276414855416367426a4147554149414254414745416267427a41434141554142794147384149414243414738416241426b414449414c674177414451414e5141374145454152414243414538414f774254414738416451427941474d415a514254414745416267427a41464141636742764143304151674276414777415a41413741454541524142504145494152514243414738416241426b41464d4162774231414849415977426c414341415577426841473441637741674146414163674276414b6b4149414179414441414d514177414341414c514167414449414d41417841446741494142424147514162774269414755414941425441486b4163774230414755416251427a414341415351427541474d41627742794148414162774279414745416441426c414751414941416f4147674164414230414841414f6741764143384164774233414863414c6742684147514162774269414755414c67426a414738416251417641436b414c41416741486341615142304147674149414253414755416377426c414849416467426c414751414941424741473841626742304143414154674268414730415a5141674942674155774276414855416367426a4147556747514175414145414141414b414651416441414552455a4d5641412b59336c79624141795a334a6c6177416d624746306267416141415141414141412f2f38414151414441415141414141412f2f38414151414341415141414141412f2f38414151414241415141414141412f2f384141514141414152725a584a75414270725a584a75414270725a584a75414270725a584a7541426f4141414142414141414151414541416b414141414341624941436741424141494141414149414149424d414145414141426467464741417741444141412f2b542f33662f4c2f2b3441414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141502f6b4141414141414141414141414141414141414141414141414141442f35762f4641414141414141412f2f674141502f3741414141414141412f2f59414141414141414141414141414141634141502f3441414141414141414141442f37502f6b4141414141414141414141414141414141414141414141414141442f35502f734141414141502f75414141414141414141414141414141412f2b372f37502f7541414141414141414141414141502f3241414141414141412f37542f394141412f39622f35502f6e2f2b674141502f452f395941414141414141414141502f734141414141414141414141414141414141414141414141412f2f674141502f73414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414341414d4142414147414141414367415441414d41465141564141304141514144414255414251414741414d41414141424141454143774141414141414367414b414145414367414a414149414241414841414141414141494141734141514145414249414267414941414d414141414141414141414141424141494141674144414151414251414841416b4143674141414173414151414341414141434141434149674142414141414d67416d41414641417741414141412f2f622f354141414141442f37762f75414141414141414141414141414141412f397a2f39502f624141442f37762f6b4141442f39674141414141414141414141414141414141414141414141414141414141414141414141414141414141412f2f622f354141414141442f2b762f734141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415141474141494141774148414167414351415841414541417741564141514142774144414141414341414941416f41414141414141734143774149414173414251414341416b4142674141414141414151414b414149414251414441414d41415141484141634141674149414167414177414a41416b414241415841426341424141464146414141414a69417051414177414a41413841456741564141417a455345524a544d6e4a794d484e7a4d334e794d58417a636e41524548554149532f71576b4a796b454b536b454b694359483370665877464e58674b552f57786254574a69396c38374f2f36657562722b6a51467a756741414177424e4141414350414b4d41424541476741694141417a45544d794668595646415948465259574652514742694d444d7a49324e54516d49794d524d7a49314e43596a49303366524778414c53677951305279523139464e6a45794e455a546554773955774b4d4855592f4b314d504241314c51554e554b5147484b694d6d495035595743736c414141424143372f3941497741706741477741414253496d4a6a55304e6a597a4d6859584279596d4979494742685555466a4d794e6a635842674664556f7054565931535032516854686b334979784a4b315a494b443859546c494d544a5674624a6c524d794a6546783079586b4a6b6343515a584741414151416a2f2f514343674b5941436f41414155694a6963334668597a4d6a59314e43596e4a7934434e5451324e6a4d79466863484a69596a49675956464259584678595746525147426745555148387956434e574b4334744d7974564954776d4f326c454f484171537942414a7959744f5370554f305936626777774c6d55654a694964487830534a41347652693832574451734b6c305a47783863486834524968685552545a634f41414241426b4141414954416f7741427741414d78456a4e5345564978484d737748367377495166487a3938414141416742422f2f514346674b3941425141487741414253496d4a794d484978457a465163324e6a4d7946685956464159474a7a49324e54516a4967635646685942525346444851514d63354d454855516950466776504639594a6a5a574c436b554b417768494455437661784d4768302b6355785665543934526b79474c637353446741434143662f39414838417230414577416741414158496959314e4459324d7a4957467963314d78456a4a794d47426a63794e6a63314a69596a496759564642627958473837587a51704f426b476b33674b424270474168676e45684d7246434d324c77794c6556463150687759544b6e39517a45614933675547637353446b4e48535555414167416b2f2f51423451483841426741487741414253496d4a6a55304e6a597a4d6859574652514742794557466a4d794e78634742674d7a4e43596a4967594248306479516b4e734f3064644c7751432f74634b526a45314e6a456d5870717a4a7977694e67772b64464a526444382f613051544a516b324d79465a476834424f696b314c77442f2f7741334141414133514c544169594146414141414163414841434b41414141415142424141414348674b394141774141444d524d78457a4e7a4d4845794d6e427856426a7753646f4b36376e33412f4172332b6273584d2f747a4252336f41415142422f2f514245674b3941413841414263694a6a55524d784555466a4d794e6a6358426762495444755445516b46427759534443554d57307343492f33584678494241573046427741424145454141414d6441667741495141414d78457a467a4d324e6a4d79466863324e6a4d7946685552497845304a694d694278456a4554516d497949484555463443675166526a453151524d68536a465153354d64494355776b7830674a533842384541664c53736f496a46725866374d415345324b44442b735145684e6967772f7245414151424241414143414148384142514141444d524d78637a4e6a597a4d68595645534d524e43596a49675948455546344367516754544a52535a4d644942776f47414877507834746131332b7a4145684e69675a462f3678414141434143542f394149484166774144774162414141464969596d4e5451324e6a4d7946685956464159474a7a49324e54516d49794947465251574152592f62305245627a382f626b5245626a38744c6934744c69307444443131556c4e305054313055314a315058644e5145464d544546415451414141514242414141426a7748384142494141444d524d78637a4e6a597a4d6859584279596d497949474278464265416f454730776d4652774b4741305a4542773946414877567a49784251562f424151704d7637674141454146662f30415a38422f41416e414141584969596e4e7859574d7a49324e54516d4a696375416a55304e6a4d79466863484a69596a49685555466863654168555542744d785a795a43496a3866495234644c686f654f79687056546c58483049614e426f354f53596750536c6f4443596658426b6246784d5246684d4b444351354b5556574a7868594642596e47426b4f43794d354c6b4e64414141424142482f39414675416e5141467741414253496d4e54556a4e5463334d78557a46534d564642597a4d6a593346775947415142635430524d4558703364794d6444426b4b46784d3344477057795730476849527a78796f6c42675272426777414141454150502f304166674238414155414141584969593145544d524642597a4d6a593345544d524979636a4267625755556d54486941634a6861546541734448306f4d613130424e5037664e536b61485146492f6842464a5377414151414d2f7a34422f51487741427341414263694a6963334668597a4d6a59334e774d7a46785957467a4d324e6a63334d774d4f416e675749513861427849494a53674b42372b55527773534367514945516b386a6177584f452f43426752774151556b48526f42343955695269556a527950562f67732b56536f414141454151514141414e5142384141444141417a45544d52515a4d4238503451414145415350394e415367433377414e414141584a6959314e44593346775947465251574638772f5255552f584463794d6a657a5a393645684e356e4a6d485861327258596741424144442f545145514174384144514141467963324e6a55304a696333466859564641614d584467794d6a68635030564673795a69313270723132456d5a393645684e372f2f7741334141414133514c54416759414351414141414541502f2b6d414f6b423451414e414141584a6959314e445933467759474652515746356f724d4441725479496949694a61516f4a6157594a434944313951304e39506741424143502f7067444e4165454144514141467963324e6a55304a6963334668595646415a7a5543496949694a514b7938765769412b66554e4466543067516f4a5a576f4c2f2f77412f414b774136514c6e41676341474141414151622f2f77416a414b77417a514c6e41676341475141414151594141662b74416a6b4155774c5441417341414245694a6a55304e6a4d7946685555426955754c69556c4c6934434f536f6a49796f7149794d7141413d3d2920666f726d61742827747275657479706527293b7d5d5d3e3c2f7374796c653e3c2f7376673e", + "id": 2962, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4336:6301:13", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3b8052da42b9847f866978e427af2eeb6ff3d7c7469020abf02b901a8c834480", + "typeString": "literal_string \"\"" + }, + "value": "]]>" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4317:6320:13" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 2968, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2957, + "src": "10678:1:13", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 2969, + "name": "uid_str", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2950, + "src": "10681:7:13", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 2970, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2961, + "src": "10690:1:13", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 2966, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "10661:3:13", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 2967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10665:12:13", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "10661:16:13", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 2971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10661:31:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 2965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10654:6:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 2964, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "10654:6:13", + "typeDescriptions": {} + } + }, + "id": 2972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10654:39:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 2948, + "id": 2973, + "nodeType": "Return", + "src": "10647:46:13" + } + ] + }, + "id": 2975, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSvgImage", + "nameLocation": "1800:11:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2945, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2944, + "mutability": "mutable", + "name": "uid", + "nameLocation": "1817:3:13", + "nodeType": "VariableDeclaration", + "scope": 2975, + "src": "1812:8:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2943, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1812:4:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1811:10:13" + }, + "returnParameters": { + "id": 2948, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2947, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2975, + "src": "1844:13:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2946, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1844:6:13", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1843:15:13" + }, + "scope": 2976, + "src": "1791:8909:13", "stateMutability": "pure", "virtual": false, "visibility": "private" } ], - "scope": 2929, - "src": "310:10015:13", + "scope": 2977, + "src": "310:10393:13", "usedErrors": [] } ], - "src": "32:10293:13" + "src": "32:10671:13" }, "compiler": { "name": "solc", @@ -18526,12 +19910,12 @@ "5777": { "events": {}, "links": {}, - "address": "0xA974fe9b7D023F24b7c52Af6e6782Ef3c9d2a4b4", - "transactionHash": "0xf26eb0c0666369dbbeff00cf6eb00ef0b03821882e104ca56bd9183bad2229c6" + "address": "0xfAcF321fC0E66b8679B67c2d2A9D6266b8f219B8", + "transactionHash": "0x5edfa98f84e450e8445ba03d28cdb03eedb49d8bd12fb98926ca6212244c07ab" } }, "schemaVersion": "3.4.13", - "updatedAt": "2023-06-04T11:14:28.850Z", + "updatedAt": "2023-06-04T12:30:53.515Z", "networkType": "ethereum", "devdoc": { "events": { diff --git a/contracts/SoulboundToken.sol b/contracts/SoulboundToken.sol index 0a2b71b..4de8cf6 100644 --- a/contracts/SoulboundToken.sol +++ b/contracts/SoulboundToken.sol @@ -20,6 +20,12 @@ contract SoulboundToken is ERC721 { return newItemId; } + function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual override { + require(from == address(0) || to == address(0), "SOULBOUND: Non-Transferable."); + require(balanceOf(to)==0, "SOULBOUND: Everyone should only have 1 SBT."); + super._beforeTokenTransfer(from, to, firstTokenId, batchSize); + } + function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId);