{
  "contractName": "ERC721Handler",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_burnList",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractWhitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToTokenContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_tokenContractAddressToResourceID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "depositer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "metaData",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_burnList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToTokenContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_tokenContractAddressToResourceID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"metaData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"deposit(bytes32,address,bytes)\":{\"details\":\"Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\",\"params\":{\"data\":\"Consists of {tokenID} padded to 32 bytes.\",\"depositer\":\"Address of account making the deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of token to be used for deposit.\"},\"returns\":{\"metaData\":\": the deposited token metadata acquired by calling a {tokenURI} method in the token contract.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress}, {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\"}},\"setBurnable(address)\":{\"params\":{\"contractAddress\":\"Address of contract to be used when making or executing deposits.\"}},\"setResource(bytes32,address)\":{\"params\":{\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"withdraw(bytes)\":{\"params\":{\"data\":\"Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\"}}},\"title\":\"Handles ERC721 deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA}, then {metaData} will be set according to the {tokenURI} method in the token contract.\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\"},\"setBurnable(address)\":{\"notice\":\"First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true.\"},\"setResource(bytes32,address)\":{\"notice\":\"First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}.\"},\"withdraw(bytes)\":{\"notice\":\"Used to manually release ERC721 tokens from ERC721Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 tokenID                                uint        bytes  64 - 96\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/ERC721Handler.sol\":\"ERC721Handler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x9486045e189facd2e868ece35249872598ef03f1087fb6fa4d1161842daa2287\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77c3a04ef8453788b14b1ebbc24dd3f0a18ceb2615cd156aac949a611e552af8\",\"dweb:/ipfs/QmcmqWGguRM3iLuF57tcyrN3F6EA63kzeNkDfQuteBnurr\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b710eb003944777135f027500a5a57b479fe857849f5f467c1ef9687401e3c95\",\"dweb:/ipfs/QmcELzi6KRzAs3DXwxdsoKWRJ13KSeipKQsJgD3unctdZM\"]},\"@openzeppelin/contracts/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x1bdefceaba99e08a6c30400bc686e6380c1e914887bf5780db14f965c09aa9d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa31e8df5c7a5f3434977d3a881ee322c4e81f8486aec4bb859bebd20f23d805\",\"dweb:/ipfs/QmShFfnjPytP2ooLtDj7f2XULXgbsRj4xjrFc9qm9kRe79\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x118ed7540f56b21ff92e21ebaa73584048e98d2ac04ca67571329bb8dbd9032f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da2918b7aff73dd51d41bfcfa548f81eb50531b8353500fdbdacf297076db070\",\"dweb:/ipfs/Qmb8ixAs1vBjZRowQNuNg6bRf2NZmgZ1JTBxmQS14PHpcL\"]},\"@openzeppelin/contracts/token/ERC721/ERC721Burnable.sol\":{\"keccak256\":\"0x060925a04766df64ac29f56aaa3a38aafd71424ba4d996ca0f14363828b97056\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8593f0fcac22c97956ab3e779e8a55a6c33dd01059fa01f15992518e708f4e6f\",\"dweb:/ipfs/QmWYQcAy7R6v5prSfmigmrhr7nGxwzkbZkmdeMcLNLUG66\"]},\"@openzeppelin/contracts/token/ERC721/ERC721Pausable.sol\":{\"keccak256\":\"0x1c31a4c2ad1af9e25cd8f4ea941ebd6a6a932426183ab39c160cb8e51cfc704f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77dd2448bbeb4a8f6f3273042d02326fa6ba191827e5b37f6f68492b17d022c9\",\"dweb:/ipfs/QmRiAmuxtRcVRhXUymziiTD3r8SGcjxKN95ZLVKd2jtWjN\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x2d99a0deb6648c34fbc66d6ac4a2d64798d7a5321b45624f6736fadc63da1962\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2dcdce5ede1e5e650d174ec0b35be7d47b6a50f30bc895ef0d9e59fb75052e45\",\"dweb:/ipfs/QmQ2XFsDLTYqfEdw7pYzHiGtFRY11yQm4b6ynYgKqDxeB8\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0xe6bd1b1218338b6f9fe17776f48623b4ac3d8a40405f74a44bc23c00abe2ca13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c354c3f6e9c487759aa7869be4fba68e0b2efc777b514d289c4cbd3ff8f7e1a\",\"dweb:/ipfs/QmdF9LcSYVmiUCL7JxLEYmSLrjga6zJsujfi6sgEJD4M1z\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xccb917776f826ac6b68bd5a15a5f711e3967848a52ba11e6104d9a4f593314a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://430255ad2229ced6d880e61a67bdc6e48dbbaed8354a7c1fe918cd8b8714a886\",\"dweb:/ipfs/QmTHY56odzqEpEC6v6tafaWMYY7vmULw25q5XHJLCCAeox\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada84513617b7c1b2f890b44503735abaec73a1acd030112a17aac7e6c66a4a1\",\"dweb:/ipfs/QmaiFwdio67iJrfjAdkMac24eJ5sS1qD7CZW6PhUU6KjiK\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0x21662e4254ce4ac8570b30cc7ab31435966b3cb778a56ba4d09276881cfb2437\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://acce8fe6adc670f9987a8b6aedc4cc0abcd0dcd2e152d649a12099d735bd7bad\",\"dweb:/ipfs/QmXAk17oK3daBmA8CGyVcU56L496jW3U6Ef1WkfHyB1JAV\"]},\"@openzeppelin/contracts/utils/EnumerableMap.sol\":{\"keccak256\":\"0x4b087f06b6670a131a5a14e53b1d2a5ef19c034cc5ec42eeebcf9554325744ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6a6af5d848334e40db419773f6360601e311ffc21c2e274f730b8c542da99fd\",\"dweb:/ipfs/QmfA24cxQ2g41ZWUuDF295dxDJ4xF1bSDYtC3EaLd7CzW8\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x1562cd9922fbf739edfb979f506809e2743789cbde3177515542161c3d04b164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4580d57781513d98870d9738c7d39094336e0a70cdb90d68dad549c6ced466ec\",\"dweb:/ipfs/Qmf9YZzzRFuvMnav9dgmeRUpdYMMECiZX8w25sHWVbA18V\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x212fb1b1d4beaf74354dad9bc329f44ee3c5375ef1c32acff76b4ecefc10f1d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d21c68cb321d1c8d0fa39fd9ecb6bbe3b2f26623b0f38af280a010c916c85f23\",\"dweb:/ipfs/Qmf2P51HRC4ekDHLYfbXu5SXR33gXrWtq6oKSmfyWqVRuC\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa1e12f97981f1d0964b1c048978606a57127c56c438bab61cdfe269cad859a74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5eefac1760f524971e14aa3f3d79515a3d54fd28c1d3bdca0b36127da349b830\",\"dweb:/ipfs/QmUMzkyH3ytJX5gVPizQruNLhkKmuJb3nFqBDad4LPdg5U\"]},\"project:/contracts/ERC721MinterBurnerPauser.sol\":{\"keccak256\":\"0xb0f727d542bf3f517bcc07abab1efb86ef6d37a216b4d41d8a3194c5bcd20a73\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://02dc95a492b39f9ecf35f607479c0320b917aeba7730407734d1aaa02cb3b040\",\"dweb:/ipfs/QmTekLFSqQaJwdJUHQ814cHPrL8DzuWhFEgLzteJE2hmLv\"]},\"project:/contracts/ERC721Safe.sol\":{\"keccak256\":\"0x834bedd29226386aaf241ba2f369c8c3109ef087bf355c0da19cb84b5d3e0846\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://6e38c3ba911aa06dfccf46cd8fec3e562d3766b7e0ae351d931f78d8834c380a\",\"dweb:/ipfs/QmeEutLyHU9mv23PrGGQUTQpSWXcrGxkQF7TbwTtFdET3M\"]},\"project:/contracts/handlers/ERC721Handler.sol\":{\"keccak256\":\"0xb4ea78f1b0d86bda8355a38402c46b8a879337d76dd4e996e038f24f93a14222\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://433f4c32c6a4622188e69b50bd34fe7f4203227be1f896367b221b7cf91d6ed7\",\"dweb:/ipfs/QmPigSncvD6PRv6UPzdQ4skFWXMsC4rfd9ef3Eb9FWDN7d\"]},\"project:/contracts/handlers/HandlerHelpers.sol\":{\"keccak256\":\"0x9418d0646c373e028595a4a3abf5ac93948ea64efa031f1531c70a0500882d09\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://43e30989056cc8c5f0d2a26cb3a7e8a5d0d51dd2c832fb8d751c353226254871\",\"dweb:/ipfs/QmRpXPeLz7Qjh5qxMW4PyC8qkjrpEJCeCiqfobZyg28y6S\"]},\"project:/contracts/interfaces/IDepositExecute.sol\":{\"keccak256\":\"0x3623f906ae6f354cbf27ffd4eeccbfc2c3baa94783c5dd854b2e0f50db2a7c8d\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://26f8ddafd8655375eeb861a033fe390b3235c4f8de9a54e0524b91d2d1992674\",\"dweb:/ipfs/QmUAsxc8j4UdaDZ5HVp73kAwLpgTqqrgZG1sX86iRKZTqv\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0x4384276611a789db6481e1158d92c280fe5990ec0c375df30dd5e8f8a97cbb4c\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3af488536c6d8f6b3090ca9b5fa54718941604a30f58bd66db641a6599a9f296\",\"dweb:/ipfs/QmSm988tQV4XtkCQpTbf2SbdCHp8AcjYZhQLhftPFXrUf2\"]},\"project:/contracts/utils/AccessControl.sol\":{\"keccak256\":\"0x0188570bd646df63dd236b997edf12d2e5a566d9fd54b9405c67c6d7eeca353e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eaa8a02b8fda3d9a50019cb96fec11cfb80b90250e37e91e0ec6cd945efa9810\",\"dweb:/ipfs/QmZ2nuod9fjYvsCjRr4Bhk6FTES4zsofxsQSDFS24JFaGq\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b50604051610e71380380610e7183398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610ddd6100946000398061020052806105445250610ddd6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637f79bea8116100665780637f79bea81461011c578063b07e54bb1461012f578063b8fa37361461014f578063c8ba6c8714610162578063e248cff2146101825761009e565b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb578063318c136e146100f45780636a70d081146100fc575b600080fd5b6100b66100b13660046108e0565b610195565b005b6100b66100c6366004610a49565b6101a9565b6100de6100d936600461095e565b6101e3565b6040516100eb9190610b95565b60405180910390f35b6100de6101fe565b61010f61010a3660046108e0565b610222565b6040516100eb9190610bf4565b61010f61012a3660046108e0565b610237565b61014261013d3660046109a5565b61024c565b6040516100eb9190610c1d565b6100b661015d366004610976565b6103a0565b6101756101703660046108e0565b6103b6565b6040516100eb9190610bff565b6100b66101903660046109ff565b6103c8565b61019d610539565b6101a681610583565b50565b6101b1610539565b6000806000838060200190518101906101ca91906108fc565b919450925090506101dd833084846105df565b50505050565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6060610256610539565b60006102648385018561095e565b600087815260208181526040808320546001600160a01b03168084526002909252909120549192509060ff166102b55760405162461bcd60e51b81526004016102ac90610cab565b60405180910390fd5b6102cf6001600160a01b038216635b5e139f60e01b61064a565b1561035a5760405163c87b56dd60e01b815281906001600160a01b0382169063c87b56dd90610302908690600401610bff565b60006040518083038186803b15801561031a57600080fd5b505afa15801561032e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103569190810190610ac2565b9350505b6001600160a01b03811660009081526003602052604090205460ff161561038a57610385818361066d565b610396565b610396818730856105df565b5050949350505050565b6103a8610539565b6103b282826106d2565b5050565b60016020526000908152604090205481565b6103d0610539565b60008060608180826103e487890189610b2c565b9096509450604080860193506103fd908490898b610d3e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296506104439250899150859050818b610d3e565b810190610450919061095e565b915061046660208484018101908501898b610d3e565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506020898101518f83528282526040808420546001600160a01b0316808552600290935290922054959650909490935060ff1691506104e890505760405162461bcd60e51b81526004016102ac90610cab565b6001600160a01b03811660009081526003602052604090205460ff161561051d57610518818360601c8a8661071f565b61052c565b61052c81308460601c8b6105df565b5050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105815760405162461bcd60e51b81526004016102ac90610c30565b565b6001600160a01b03811660009081526002602052604090205460ff166105bb5760405162461bcd60e51b81526004016102ac90610c67565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6040516323b872dd60e01b815284906001600160a01b038216906323b872dd9061061190879087908790600401610ba9565b600060405180830381600087803b15801561062b57600080fd5b505af115801561063f573d6000803e3d6000fd5b505050505050505050565b600061065583610751565b801561066657506106668383610785565b9392505050565b604051630852cd8d60e31b815282906001600160a01b038216906342966c689061069b908590600401610bff565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b50505050505050565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff19169091179055565b6040516334ff261960e21b815284906001600160a01b0382169063d3fc98649061061190879087908790600401610bcd565b6000610764826301ffc9a760e01b610785565b801561077f575061077d826001600160e01b0319610785565b155b92915050565b600080600061079485856107ab565b915091508180156107a25750805b95945050505050565b60008060606301ffc9a760e01b846040516024016107c99190610c08565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060866001600160a01b03166175308460405161081d9190610b79565b6000604051808303818686fa925050503d8060008114610859576040519150601f19603f3d011682016040523d82523d6000602084013e61085e565b606091505b509150915060208151101561087c5760008094509450505050610899565b8181806020019051810190610891919061093e565b945094505050505b9250929050565b60008083601f8401126108b1578182fd5b50813567ffffffffffffffff8111156108c8578182fd5b60208301915083602082850101111561089957600080fd5b6000602082840312156108f1578081fd5b813561066681610d92565b600080600060608486031215610910578182fd5b835161091b81610d92565b602085015190935061092c81610d92565b80925050604084015190509250925092565b60006020828403121561094f578081fd5b81518015158114610666578182fd5b60006020828403121561096f578081fd5b5035919050565b60008060408385031215610988578182fd5b82359150602083013561099a81610d92565b809150509250929050565b600080600080606085870312156109ba578081fd5b8435935060208501356109cc81610d92565b9250604085013567ffffffffffffffff8111156109e7578182fd5b6109f3878288016108a0565b95989497509550505050565b600080600060408486031215610a13578283fd5b83359250602084013567ffffffffffffffff811115610a30578283fd5b610a3c868287016108a0565b9497909650939450505050565b600060208284031215610a5a578081fd5b813567ffffffffffffffff811115610a70578182fd5b8201601f81018413610a80578182fd5b8035610a93610a8e82610d1a565b610cf3565b818152856020838501011115610aa7578384fd5b81602084016020830137908101602001929092525092915050565b600060208284031215610ad3578081fd5b815167ffffffffffffffff811115610ae9578182fd5b8201601f81018413610af9578182fd5b8051610b07610a8e82610d1a565b818152856020838501011115610b1b578384fd5b6107a2826020830160208601610d66565b60008060408385031215610b3e578182fd5b50508035926020909101359150565b60008151808452610b65816020860160208601610d66565b601f01601f19169290920160200192915050565b60008251610b8b818460208701610d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b0385168252836020830152606060408301526107a26060830184610b4d565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b6000602082526106666020830184610b4d565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526024908201527f70726f766964656420636f6e7472616374206973206e6f742077686974656c696040820152631cdd195960e21b606082015260800190565b60208082526028908201527f70726f766964656420746f6b656e41646472657373206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b60405181810167ffffffffffffffff81118282101715610d1257600080fd5b604052919050565b600067ffffffffffffffff821115610d30578081fd5b50601f01601f191660200190565b60008085851115610d4d578182fd5b83861115610d59578182fd5b5050820193919092039150565b60005b83811015610d81578181015183820152602001610d69565b838111156101dd5750506000910152565b6001600160a01b03811681146101a657600080fdfea2646970667358221220c259b19f4e3d5dd38a63e4ece7212eddbb4aa75067017ab1b11d428ce9d4c10f64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80637f79bea8116100665780637f79bea81461011c578063b07e54bb1461012f578063b8fa37361461014f578063c8ba6c8714610162578063e248cff2146101825761009e565b806307b7ed99146100a35780630968f264146100b85780630a6d55d8146100cb578063318c136e146100f45780636a70d081146100fc575b600080fd5b6100b66100b13660046108e0565b610195565b005b6100b66100c6366004610a49565b6101a9565b6100de6100d936600461095e565b6101e3565b6040516100eb9190610b95565b60405180910390f35b6100de6101fe565b61010f61010a3660046108e0565b610222565b6040516100eb9190610bf4565b61010f61012a3660046108e0565b610237565b61014261013d3660046109a5565b61024c565b6040516100eb9190610c1d565b6100b661015d366004610976565b6103a0565b6101756101703660046108e0565b6103b6565b6040516100eb9190610bff565b6100b66101903660046109ff565b6103c8565b61019d610539565b6101a681610583565b50565b6101b1610539565b6000806000838060200190518101906101ca91906108fc565b919450925090506101dd833084846105df565b50505050565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6060610256610539565b60006102648385018561095e565b600087815260208181526040808320546001600160a01b03168084526002909252909120549192509060ff166102b55760405162461bcd60e51b81526004016102ac90610cab565b60405180910390fd5b6102cf6001600160a01b038216635b5e139f60e01b61064a565b1561035a5760405163c87b56dd60e01b815281906001600160a01b0382169063c87b56dd90610302908690600401610bff565b60006040518083038186803b15801561031a57600080fd5b505afa15801561032e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103569190810190610ac2565b9350505b6001600160a01b03811660009081526003602052604090205460ff161561038a57610385818361066d565b610396565b610396818730856105df565b5050949350505050565b6103a8610539565b6103b282826106d2565b5050565b60016020526000908152604090205481565b6103d0610539565b60008060608180826103e487890189610b2c565b9096509450604080860193506103fd908490898b610d3e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296506104439250899150859050818b610d3e565b810190610450919061095e565b915061046660208484018101908501898b610d3e565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506020898101518f83528282526040808420546001600160a01b0316808552600290935290922054959650909490935060ff1691506104e890505760405162461bcd60e51b81526004016102ac90610cab565b6001600160a01b03811660009081526003602052604090205460ff161561051d57610518818360601c8a8661071f565b61052c565b61052c81308460601c8b6105df565b5050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105815760405162461bcd60e51b81526004016102ac90610c30565b565b6001600160a01b03811660009081526002602052604090205460ff166105bb5760405162461bcd60e51b81526004016102ac90610c67565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6040516323b872dd60e01b815284906001600160a01b038216906323b872dd9061061190879087908790600401610ba9565b600060405180830381600087803b15801561062b57600080fd5b505af115801561063f573d6000803e3d6000fd5b505050505050505050565b600061065583610751565b801561066657506106668383610785565b9392505050565b604051630852cd8d60e31b815282906001600160a01b038216906342966c689061069b908590600401610bff565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b50505050505050565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff19169091179055565b6040516334ff261960e21b815284906001600160a01b0382169063d3fc98649061061190879087908790600401610bcd565b6000610764826301ffc9a760e01b610785565b801561077f575061077d826001600160e01b0319610785565b155b92915050565b600080600061079485856107ab565b915091508180156107a25750805b95945050505050565b60008060606301ffc9a760e01b846040516024016107c99190610c08565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060866001600160a01b03166175308460405161081d9190610b79565b6000604051808303818686fa925050503d8060008114610859576040519150601f19603f3d011682016040523d82523d6000602084013e61085e565b606091505b509150915060208151101561087c5760008094509450505050610899565b8181806020019051810190610891919061093e565b945094505050505b9250929050565b60008083601f8401126108b1578182fd5b50813567ffffffffffffffff8111156108c8578182fd5b60208301915083602082850101111561089957600080fd5b6000602082840312156108f1578081fd5b813561066681610d92565b600080600060608486031215610910578182fd5b835161091b81610d92565b602085015190935061092c81610d92565b80925050604084015190509250925092565b60006020828403121561094f578081fd5b81518015158114610666578182fd5b60006020828403121561096f578081fd5b5035919050565b60008060408385031215610988578182fd5b82359150602083013561099a81610d92565b809150509250929050565b600080600080606085870312156109ba578081fd5b8435935060208501356109cc81610d92565b9250604085013567ffffffffffffffff8111156109e7578182fd5b6109f3878288016108a0565b95989497509550505050565b600080600060408486031215610a13578283fd5b83359250602084013567ffffffffffffffff811115610a30578283fd5b610a3c868287016108a0565b9497909650939450505050565b600060208284031215610a5a578081fd5b813567ffffffffffffffff811115610a70578182fd5b8201601f81018413610a80578182fd5b8035610a93610a8e82610d1a565b610cf3565b818152856020838501011115610aa7578384fd5b81602084016020830137908101602001929092525092915050565b600060208284031215610ad3578081fd5b815167ffffffffffffffff811115610ae9578182fd5b8201601f81018413610af9578182fd5b8051610b07610a8e82610d1a565b818152856020838501011115610b1b578384fd5b6107a2826020830160208601610d66565b60008060408385031215610b3e578182fd5b50508035926020909101359150565b60008151808452610b65816020860160208601610d66565b601f01601f19169290920160200192915050565b60008251610b8b818460208701610d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b0385168252836020830152606060408301526107a26060830184610b4d565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b6000602082526106666020830184610b4d565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526024908201527f70726f766964656420636f6e7472616374206973206e6f742077686974656c696040820152631cdd195960e21b606082015260800190565b60208082526028908201527f70726f766964656420746f6b656e41646472657373206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b60405181810167ffffffffffffffff81118282101715610d1257600080fd5b604052919050565b600067ffffffffffffffff821115610d30578081fd5b50601f01601f191660200190565b60008085851115610d4d578182fd5b83861115610d59578182fd5b5050820193919092039150565b60005b83811015610d81578181015183820152602001610d69565b838111156101dd5750506000910152565b6001600160a01b03811681146101a657600080fdfea2646970667358221220c259b19f4e3d5dd38a63e4ece7212eddbb4aa75067017ab1b11d428ce9d4c10f64736f6c634300060c0033",
  "immutableReferences": {
    "9652": [
      {
        "length": 32,
        "start": 512
      },
      {
        "length": 32,
        "start": 1348
      }
    ]
  },
  "sourceMap": "512:5426:46:-:0;;;789:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1045:30:48;;-1:-1:-1;;;;;;1045:30:48;;;512:5426:46;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;512:5426:46;;;;;;;;;;;",
  "deployedSourceMap": "512:5426:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:120:48;;;;;;:::i;:::-;;:::i;:::-;;5621:315:46;;;;;;:::i;:::-;;:::i;408:69:48:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;318:39;;;:::i;755:42::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;652:51::-;;;;;;:::i;:::-;;:::i;1908:938:46:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1774:154:48:-;;;;;;:::i;:::-;;:::i;528:69::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3852:1275:46:-;;;;;;:::i;:::-;;:::i;2170:120:48:-;836:13;:11;:13::i;:::-;2254:29:::1;2267:15;2254:12;:29::i;:::-;2170:120:::0;:::o;5621:315:46:-;836:13:48;:11;:13::i;:::-;5697:20:46::1;5727:17:::0;5754:12:::1;5825:4;5814:42;;;;;;;;;;;;:::i;:::-;5777:79:::0;;-1:-1:-1;5777:79:46;-1:-1:-1;5777:79:46;-1:-1:-1;5867:62:46::1;5777:79:::0;5903:4:::1;5777:79:::0;;5867:13:::1;:62::i;:::-;859:1:48;;;5621:315:46::0;:::o;408:69:48:-;;;;;;;;;;;;;-1:-1:-1;;;;;408:69:48;;:::o;318:39::-;;;:::o;755:42::-;;;;;;;;;;;;;;;:::o;652:51::-;;;;;;;;;;;;;;;:::o;1908:938:46:-;2097:21;836:13:48;:11;:13::i;:::-;2130:20:46::1;2173:24;::::0;;::::1;2184:4:::0;2173:24:::1;:::i;:::-;2208:20;2231:45:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;2231:45:46::1;2294:32:::0;;;:18:::1;:32:::0;;;;;;;2161:36;;-1:-1:-1;2231:45:46;2294:32:::1;;2286:85;;;;-1:-1:-1::0;;;2286:85:46::1;;;;;;;:::i;:::-;;;;;;;;;2458:58;-1:-1:-1::0;;;;;2458:30:46;::::1;-1:-1:-1::0;;;2458:30:46::1;:58::i;:::-;2454:199;;;2617:24;::::0;-1:-1:-1;;;2617:24:46;;2573:12;;-1:-1:-1;;;;;2617:15:46;::::1;::::0;::::1;::::0;:24:::1;::::0;2633:7;;2617:24:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;2617:24:46::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;2600:42;;2454:199;;-1:-1:-1::0;;;;;2667:23:46;::::1;;::::0;;;:9:::1;:23;::::0;;;;;::::1;;2663:177;;;2706:33;2717:12;2731:7;2706:10;:33::i;:::-;2663:177;;;2770:59;2781:12;2795:9;2814:4;2821:7;2770:10;:59::i;:::-;859:1:48;;1908:938:46::0;;;;;;:::o;1774:154:48:-;836:13;:11;:13::i;:::-;1880:41:::1;1893:10;1905:15;1880:12;:41::i;:::-;1774:154:::0;;:::o;528:69::-;;;;;;;;;;;;;:::o;3852:1275:46:-;836:13:48;:11;:13::i;:::-;3957:20:46::1;::::0;4040:40:::1;3957:20:::0;;4040:40;4237:30:::1;::::0;;::::1;4248:4:::0;4237:30:::1;:::i;:::-;4193:74:::0;;-1:-1:-1;4193:74:46;-1:-1:-1;4294:2:46::1;:35:::0;;::::1;::::0;-1:-1:-1;4375:23:46::1;::::0;4294:35;;4375:4;;:23:::1;:::i;:::-;4339:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4339:60:46;;-1:-1:-1;4434:21:46::1;::::0;-1:-1:-1;4434:4:46;;-1:-1:-1;4439:14:46;;-1:-1:-1;4434:4:46;;:21:::1;:::i;:::-;4423:41;;;;;;;:::i;:::-;4409:55:::0;-1:-1:-1;4491:59:46::1;4513:2;4516:33:::0;;;;;;4496:19;::::1;4491:4:::0;;:59:::1;:::i;:::-;4474:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4679:4:46::1;4646:38:::0;;::::1;4640:45:::0;4728;;;;;;;;;;;-1:-1:-1;;;;;4728:45:46::1;4791:41:::0;;;:18:::1;:41:::0;;;;;;;4474:77;;-1:-1:-1;4640:45:46;;4728;;-1:-1:-1;4791:41:46::1;;::::0;-1:-1:-1;4783:94:46::1;::::0;-1:-1:-1;4783:94:46::1;;;-1:-1:-1::0;;;4783:94:46::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4892:23:46;::::1;;::::0;;;:9:::1;:23;::::0;;;;;::::1;;4888:233;;;4931:70;4942:12;4964:16;4956:25;;4983:7;4992:8;4931:10;:70::i;:::-;4888:233;;;5032:78;5046:12;5068:4;5083:16;5075:25;;5102:7;5032:13;:78::i;:::-;859:1:48;;;;;;;;3852:1275:46::0;;;:::o;1088:124:48:-;1142:10;-1:-1:-1;;;;;1156:14:48;1142:28;;1134:71;;;;-1:-1:-1;;;1134:71:48;;;;;;;:::i;:::-;1088:124::o;2655:200::-;-1:-1:-1;;;;;2729:35:48;;;;;;:18;:35;;;;;;;;2721:84;;;;-1:-1:-1;;;2721:84:48;;;;;;;:::i;:::-;-1:-1:-1;;;;;2815:26:48;;;;;:9;:26;;;;;:33;;-1:-1:-1;;2815:33:48;2844:4;2815:33;;;2655:200::o;1228:216:40:-;1391:46;;-1:-1:-1;;;1391:46:40;;1368:12;;-1:-1:-1;;;;;1391:19:40;;;;;:46;;1411:5;;1418:9;;1429:7;;1391:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1228:216;;;;;:::o;1358:286:3:-;1445:4;1552:23;1567:7;1552:14;:23::i;:::-;:85;;;;;1591:46;1616:7;1625:11;1591:24;:46::i;:::-;1545:92;1358:286;-1:-1:-1;;;1358:286:3:o;2133:187:40:-;2293:20;;-1:-1:-1;;;2293:20:40;;2270:12;;-1:-1:-1;;;;;2293:11:40;;;;;:20;;2305:7;;2293:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2133:187;;;:::o;2367:282:48:-;2453:33;:45;;;;;;;;;;;:63;;-1:-1:-1;;;;;2453:63:48;;;-1:-1:-1;;;;;;2453:63:48;;;;;;;2526:50;;;2453:63;2526:50;;;;;;:63;;;;2600:18;:35;;;:42;;-1:-1:-1;;2600:42:48;;;;;;2367:282::o;1724:250:40:-;1922:45;;-1:-1:-1;;;1922:45:40;;1899:12;;-1:-1:-1;;;;;1922:11:40;;;;;:45;;1934:9;;1945:7;;1961:4;;1922:45;;;:::i;746:394:3:-;810:4;1005:55;1030:7;-1:-1:-1;;;1005:24:3;:55::i;:::-;:128;;;;-1:-1:-1;1077:56:3;1102:7;-1:-1:-1;;;;;;1077:24:3;:56::i;:::-;1076:57;1005:128;998:135;746:394;-1:-1:-1;;746:394:3:o;4232:395::-;4325:4;4504:12;4518:11;4533:50;4562:7;4571:11;4533:28;:50::i;:::-;4503:80;;;;4602:7;:17;;;;;4613:6;4602:17;4594:26;4232:395;-1:-1:-1;;;;;4232:395:3:o;5144:444::-;5265:4;5271;5291:26;641:10;5343:20;;5365:11;5320:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;5320:57:3;;;;;;;-1:-1:-1;;;;;5320:57:3;;;;;;;;;;;5291:86;;5388:12;5402:19;5425:7;-1:-1:-1;;;;;5425:18:3;5450:5;5458:13;5425:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5387:85;;;;5502:2;5486:6;:13;:18;5482:45;;;5514:5;5521;5506:21;;;;;;;;;5482:45;5545:7;5565:6;5554:26;;;;;;;;;;;;:::i;:::-;5537:44;;;;;;;5144:444;;;;;;:::o;585:336:-1:-;;;699:3;692:4;684:6;680:17;676:27;666:2;;-1:-1;;707:12;666:2;-1:-1;737:20;;777:18;766:30;;763:2;;;-1:-1;;799:12;763:2;843:4;835:6;831:17;819:29;;894:3;843:4;874:17;835:6;860:32;;857:41;854:2;;;911:1;;901:12;2109:241;;2213:2;2201:9;2192:7;2188:23;2184:32;2181:2;;;-1:-1;;2219:12;2181:2;85:6;72:20;97:33;124:5;97:33;:::i;2357:567::-;;;;2522:2;2510:9;2501:7;2497:23;2493:32;2490:2;;;-1:-1;;2528:12;2490:2;234:6;228:13;246:41;281:5;246:41;:::i;:::-;2699:2;2757:22;;228:13;2580:82;;-1:-1;246:41;228:13;246:41;:::i;:::-;2707:82;;;;2826:2;2880:9;2876:22;2046:13;2834:74;;2484:440;;;;;:::o;2931:257::-;;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;-1:-1;;3049:12;3011:2;380:6;374:13;16630:5;15286:13;15279:21;16608:5;16605:32;16595:2;;-1:-1;;16641:12;3195:241;;3299:2;3287:9;3278:7;3274:23;3270:32;3267:2;;;-1:-1;;3305:12;3267:2;-1:-1;501:20;;3261:175;-1:-1;3261:175::o;3443:366::-;;;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;-1:-1;;3570:12;3532:2;514:6;501:20;3622:63;;3722:2;3765:9;3761:22;72:20;97:33;124:5;97:33;:::i;:::-;3730:63;;;;3526:283;;;;;:::o;3816:615::-;;;;;3973:2;3961:9;3952:7;3948:23;3944:32;3941:2;;;-1:-1;;3979:12;3941:2;514:6;501:20;4031:63;;4131:2;4174:9;4170:22;72:20;97:33;124:5;97:33;:::i;:::-;4139:63;-1:-1;4267:2;4252:18;;4239:32;4291:18;4280:30;;4277:2;;;-1:-1;;4313:12;4277:2;4351:64;4407:7;4398:6;4387:9;4383:22;4351:64;:::i;:::-;3935:496;;;;-1:-1;4333:82;-1:-1;;;;3935:496::o;4438:490::-;;;;4578:2;4566:9;4557:7;4553:23;4549:32;4546:2;;;-1:-1;;4584:12;4546:2;514:6;501:20;4636:63;;4764:2;4753:9;4749:18;4736:32;4788:18;4780:6;4777:30;4774:2;;;-1:-1;;4810:12;4774:2;4848:64;4904:7;4895:6;4884:9;4880:22;4848:64;:::i;:::-;4540:388;;4830:82;;-1:-1;4830:82;;-1:-1;;;;4540:388::o;4935:345::-;;5048:2;5036:9;5027:7;5023:23;5019:32;5016:2;;;-1:-1;;5054:12;5016:2;5112:17;5099:31;5150:18;5142:6;5139:30;5136:2;;;-1:-1;;5172:12;5136:2;5232:22;;1024:4;1012:17;;1008:27;-1:-1;998:2;;-1:-1;;1039:12;998:2;1086:6;1073:20;1108:64;1123:48;1164:6;1123:48;:::i;:::-;1108:64;:::i;:::-;1192:6;1185:5;1178:21;1296:3;5048:2;1287:6;1220;1278:16;;1275:25;1272:2;;;-1:-1;;1303:12;1272:2;15831:6;5048:2;1220:6;1216:17;5048:2;1254:5;1250:16;15808:30;15869:16;;;5048:2;15869:16;15862:27;;;;-1:-1;1254:5;5010:270;-1:-1;;5010:270::o;5287:362::-;;5412:2;5400:9;5391:7;5387:23;5383:32;5380:2;;;-1:-1;;5418:12;5380:2;5469:17;5463:24;5507:18;5499:6;5496:30;5493:2;;;-1:-1;;5529:12;5493:2;5601:22;;1485:4;1473:17;;1469:27;-1:-1;1459:2;;-1:-1;;1500:12;1459:2;1540:6;1534:13;1562:65;1577:49;1619:6;1577:49;:::i;1562:65::-;1647:6;1640:5;1633:21;1751:3;5412:2;1742:6;1675;1733:16;;1730:25;1727:2;;;-1:-1;;1758:12;1727:2;1778:39;1810:6;5412:2;1709:5;1705:16;5412:2;1675:6;1671:17;1778:39;:::i;5904:366::-;;;6025:2;6013:9;6004:7;6000:23;5996:32;5993:2;;;-1:-1;;6031:12;5993:2;-1:-1;;1898:20;;;6183:2;6222:22;;;1898:20;;-1:-1;5987:283::o;6745:343::-;;6887:5;14025:12;14310:6;14305:3;14298:19;6980:52;7025:6;14347:4;14342:3;14338:14;14347:4;7006:5;7002:16;6980:52;:::i;:::-;16264:7;16248:14;-1:-1;;16244:28;7044:39;;;;14347:4;7044:39;;6835:253;-1:-1;;6835:253::o;9039:271::-;;7255:5;14025:12;7366:52;7411:6;7406:3;7399:4;7392:5;7388:16;7366:52;:::i;:::-;7430:16;;;;;9173:137;-1:-1;;9173:137::o;9317:222::-;-1:-1;;;;;15604:54;;;;6348:37;;9444:2;9429:18;;9415:124::o;9546:444::-;-1:-1;;;;;15604:54;;;6348:37;;15604:54;;;;9893:2;9878:18;;6348:37;9976:2;9961:18;;6579:37;;;;9729:2;9714:18;;9700:290::o;9997:532::-;;777:18;;15615:42;;;15608:5;15604:54;6355:3;6348:37;6609:5;10364:2;10353:9;10349:18;6579:37;10200:2;10401;10390:9;10386:18;10379:48;10441:78;10200:2;10189:9;10185:18;10505:6;10441:78;:::i;10536:210::-;15286:13;;15279:21;6462:34;;10657:2;10642:18;;10628:118::o;10753:222::-;6579:37;;;10880:2;10865:18;;10851:124::o;10982:218::-;-1:-1;;;;;;15452:78;;;;6697:36;;11107:2;11092:18;;11078:122::o;11207:306::-;;11352:2;11373:17;11366:47;11427:76;11352:2;11341:9;11337:18;11489:6;11427:76;:::i;11520:416::-;11720:2;11734:47;;;8037:2;11705:18;;;14298:19;8073:32;14338:14;;;8053:53;8125:12;;;11691:245::o;11943:416::-;12143:2;12157:47;;;8376:2;12128:18;;;14298:19;8412:34;14338:14;;;8392:55;-1:-1;;;8467:12;;;8460:28;8507:12;;;12114:245::o;12366:416::-;12566:2;12580:47;;;8758:2;12551:18;;;14298:19;8794:34;14338:14;;;8774:55;-1:-1;;;8849:12;;;8842:32;8893:12;;;12537:245::o;13018:256::-;13080:2;13074:9;13106:17;;;13181:18;13166:34;;13202:22;;;13163:62;13160:2;;;13238:1;;13228:12;13160:2;13080;13247:22;13058:216;;-1:-1;13058:216::o;13281:321::-;;13424:18;13416:6;13413:30;13410:2;;;-1:-1;;13446:12;13410:2;-1:-1;16264:7;13500:17;-1:-1;;13496:33;13587:4;13577:15;;13347:255::o;14691:318::-;;;14841:8;14829:10;14826:24;14823:2;;;-1:-1;;14853:12;14823:2;14888:6;14878:8;14875:20;14872:2;;;-1:-1;;14898:12;14872:2;-1:-1;;14930:31;;;14979:25;;;;;-1:-1;14817:192::o;15904:268::-;15969:1;15976:101;15990:6;15987:1;15984:13;15976:101;;;16057:11;;;16051:18;16038:11;;;16031:39;16012:2;16005:10;15976:101;;;16092:6;16089:1;16086:13;16083:2;;;-1:-1;;15969:1;16139:16;;16132:27;15953:219::o;16285:117::-;-1:-1;;;;;15604:54;;16344:35;;16334:2;;16393:1;;16383:12",
  "source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IDepositExecute.sol\";\nimport \"./HandlerHelpers.sol\";\nimport \"../ERC721Safe.sol\";\nimport \"@openzeppelin/contracts/introspection/ERC165Checker.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\";\n\n\n/**\n    @title Handles ERC721 deposits and deposit executions.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract ERC721Handler is IDepositExecute, HandlerHelpers, ERC721Safe {\n    using ERC165Checker for address;\n\n    bytes4 private constant _INTERFACE_ERC721_METADATA = 0x5b5e139f;\n\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n     */\n    constructor(\n        address bridgeAddress\n    ) public HandlerHelpers(bridgeAddress) {\n    }\n\n    /**\n        @notice A deposit is initiatied by making a deposit in the Bridge contract.\n        @param resourceID ResourceID used to find address of token to be used for deposit.\n        @param depositer Address of account making the deposit in the Bridge contract.\n        @param data Consists of {tokenID} padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenID                                     uint256    bytes    0  - 32\n        @notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\n        then {metaData} will be set according to the {tokenURI} method in the token contract.\n        @dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\n        marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n        @return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract.\n     */\n    function deposit(bytes32    resourceID,\n                    address     depositer,\n                    bytes       calldata data\n                    ) external override onlyBridge returns (bytes memory metaData) {\n        uint         tokenID;\n\n        (tokenID) = abi.decode(data, (uint));\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        require(_contractWhitelist[tokenAddress], \"provided tokenAddress is not whitelisted\");\n\n        // Check if the contract supports metadata, fetch it if it does\n        if (tokenAddress.supportsInterface(_INTERFACE_ERC721_METADATA)) {\n            IERC721Metadata erc721 = IERC721Metadata(tokenAddress);\n            metaData = bytes(erc721.tokenURI(tokenID));\n        }\n\n        if (_burnList[tokenAddress]) {\n            burnERC721(tokenAddress, tokenID);\n        } else {\n            lockERC721(tokenAddress, depositer, address(this), tokenID);\n        }\n    }\n\n    /**\n        @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n        by a relayer on the deposit's destination chain.\n        @param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n        {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenID                                     uint256    bytes    0  - 32\n        destinationRecipientAddress     length      uint256    bytes    32 - 64\n        destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\n        metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\n        metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\n     */\n    function executeProposal(bytes32 resourceID, bytes calldata data) external override onlyBridge {\n        uint         tokenID;\n        uint         lenDestinationRecipientAddress;\n        bytes memory destinationRecipientAddress;\n        uint         offsetMetaData;\n        uint         lenMetaData;\n        bytes memory metaData;\n\n        (tokenID, lenDestinationRecipientAddress) = abi.decode(data, (uint, uint));\n        offsetMetaData = 64 + lenDestinationRecipientAddress;\n        destinationRecipientAddress = bytes(data[64:offsetMetaData]);\n        lenMetaData = abi.decode(data[offsetMetaData:], (uint));\n        metaData = bytes(data[offsetMetaData + 32:offsetMetaData + 32 + lenMetaData]);\n\n        bytes20 recipientAddress;\n\n        assembly {\n            recipientAddress := mload(add(destinationRecipientAddress, 0x20))\n        }\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        require(_contractWhitelist[address(tokenAddress)], \"provided tokenAddress is not whitelisted\");\n\n        if (_burnList[tokenAddress]) {\n            mintERC721(tokenAddress, address(recipientAddress), tokenID, metaData);\n        } else {\n            releaseERC721(tokenAddress, address(this), address(recipientAddress), tokenID);\n        }\n    }\n\n    /**\n        @notice Used to manually release ERC721 tokens from ERC721Safe.\n        @param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenAddress                           address     bytes  0 - 32\n        recipient                              address     bytes  32 - 64\n        tokenID                                uint        bytes  64 - 96\n     */\n    function withdraw(bytes memory data) external override onlyBridge {\n        address tokenAddress;\n        address recipient;\n        uint tokenID;\n\n        (tokenAddress, recipient, tokenID) = abi.decode(data, (address, address, uint));\n\n        releaseERC721(tokenAddress, address(this), recipient, tokenID);\n    }\n}\n",
  "sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/handlers/ERC721Handler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/ERC721Handler.sol",
    "exportedSymbols": {
      "ERC721Handler": [
        9297
      ]
    },
    "id": 9298,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8998,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:23:46"
      },
      {
        "id": 8999,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:46"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IDepositExecute.sol",
        "file": "../interfaces/IDepositExecute.sol",
        "id": 9000,
        "nodeType": "ImportDirective",
        "scope": 9298,
        "sourceUnit": 9817,
        "src": "101:43:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
        "file": "./HandlerHelpers.sol",
        "id": 9001,
        "nodeType": "ImportDirective",
        "scope": 9298,
        "sourceUnit": 9783,
        "src": "145:30:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC721Safe.sol",
        "file": "../ERC721Safe.sol",
        "id": 9002,
        "nodeType": "ImportDirective",
        "scope": 9298,
        "sourceUnit": 8016,
        "src": "176:27:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
        "file": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
        "id": 9003,
        "nodeType": "ImportDirective",
        "scope": 9298,
        "sourceUnit": 571,
        "src": "204:65:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
        "file": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
        "id": 9004,
        "nodeType": "ImportDirective",
        "scope": 9298,
        "sourceUnit": 4505,
        "src": "270:66:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9006,
              "name": "IDepositExecute",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9816,
              "src": "538:15:46",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IDepositExecute_$9816",
                "typeString": "contract IDepositExecute"
              }
            },
            "id": 9007,
            "nodeType": "InheritanceSpecifier",
            "src": "538:15:46"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9008,
              "name": "HandlerHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9782,
              "src": "555:14:46",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_HandlerHelpers_$9782",
                "typeString": "contract HandlerHelpers"
              }
            },
            "id": 9009,
            "nodeType": "InheritanceSpecifier",
            "src": "555:14:46"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9010,
              "name": "ERC721Safe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8015,
              "src": "571:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Safe_$8015",
                "typeString": "contract ERC721Safe"
              }
            },
            "id": 9011,
            "nodeType": "InheritanceSpecifier",
            "src": "571:10:46"
          }
        ],
        "contractDependencies": [
          8015,
          9782,
          9816,
          9840
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 9005,
          "nodeType": "StructuredDocumentation",
          "src": "339:172:46",
          "text": "@title Handles ERC721 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 9297,
        "linearizedBaseContracts": [
          9297,
          8015,
          9782,
          9840,
          9816
        ],
        "name": "ERC721Handler",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9014,
            "libraryName": {
              "contractScope": null,
              "id": 9012,
              "name": "ERC165Checker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 570,
              "src": "594:13:46",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC165Checker_$570",
                "typeString": "library ERC165Checker"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "588:32:46",
            "typeName": {
              "id": 9013,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "612:7:46",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": true,
            "id": 9017,
            "mutability": "constant",
            "name": "_INTERFACE_ERC721_METADATA",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9297,
            "src": "626:63:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 9015,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "626:6:46",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30783562356531333966",
              "id": 9016,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "679:10:46",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1532892063_by_1",
                "typeString": "int_const 1532892063"
              },
              "value": "0x5b5e139f"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9026,
              "nodeType": "Block",
              "src": "875:7:46",
              "statements": []
            },
            "documentation": {
              "id": 9018,
              "nodeType": "StructuredDocumentation",
              "src": "696:88:46",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 9027,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9023,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9020,
                    "src": "860:13:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9024,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9022,
                  "name": "HandlerHelpers",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9782,
                  "src": "845:14:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_HandlerHelpers_$9782_$",
                    "typeString": "type(contract HandlerHelpers)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "845:29:46"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9020,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9027,
                  "src": "810:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "810:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "800:37:46"
            },
            "returnParameters": {
              "id": 9025,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "875:0:46"
            },
            "scope": 9297,
            "src": "789:93:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9807
            ],
            "body": {
              "id": 9112,
              "nodeType": "Block",
              "src": "2120:726:46",
              "statements": [
                {
                  "assignments": [
                    9043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9043,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9112,
                      "src": "2130:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9042,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2130:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9044,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2130:20:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 9045,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9043,
                          "src": "2162:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 9046,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2161:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9049,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9034,
                          "src": "2184:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2191:4:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9050,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "2191:4:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9052,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2190:6:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9047,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "2173:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2173:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2173:24:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2161:36:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9055,
                  "nodeType": "ExpressionStatement",
                  "src": "2161:36:46"
                },
                {
                  "assignments": [
                    9057
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9057,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9112,
                      "src": "2208:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9056,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2208:7:46",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9061,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9058,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9656,
                      "src": "2231:33:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 9060,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9059,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9030,
                      "src": "2265:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2231:45:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2208:68:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 9063,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9664,
                          "src": "2294:18:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 9065,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 9064,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9057,
                          "src": "2313:12:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2294:32:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                        "id": 9066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2328:42:46",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        },
                        "value": "provided tokenAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        }
                      ],
                      "id": 9062,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2286:7:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9067,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2286:85:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9068,
                  "nodeType": "ExpressionStatement",
                  "src": "2286:85:46"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9071,
                        "name": "_INTERFACE_ERC721_METADATA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9017,
                        "src": "2489:26:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9069,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9057,
                        "src": "2458:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 9070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "supportsInterface",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 391,
                      "src": "2458:30:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes4) view returns (bool)"
                      }
                    },
                    "id": 9072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2458:58:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9090,
                  "nodeType": "IfStatement",
                  "src": "2454:199:46",
                  "trueBody": {
                    "id": 9089,
                    "nodeType": "Block",
                    "src": "2518:135:46",
                    "statements": [
                      {
                        "assignments": [
                          9074
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9074,
                            "mutability": "mutable",
                            "name": "erc721",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9089,
                            "src": "2532:22:46",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC721Metadata_$4504",
                              "typeString": "contract IERC721Metadata"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 9073,
                              "name": "IERC721Metadata",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4504,
                              "src": "2532:15:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721Metadata_$4504",
                                "typeString": "contract IERC721Metadata"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 9078,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9076,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9057,
                              "src": "2573:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9075,
                            "name": "IERC721Metadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4504,
                            "src": "2557:15:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$4504_$",
                              "typeString": "type(contract IERC721Metadata)"
                            }
                          },
                          "id": 9077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2557:29:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC721Metadata_$4504",
                            "typeString": "contract IERC721Metadata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2532:54:46"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 9079,
                            "name": "metaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "2600:8:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9084,
                                    "name": "tokenID",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9043,
                                    "src": "2633:7:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9082,
                                    "name": "erc721",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9074,
                                    "src": "2617:6:46",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC721Metadata_$4504",
                                      "typeString": "contract IERC721Metadata"
                                    }
                                  },
                                  "id": 9083,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenURI",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4503,
                                  "src": "2617:15:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                    "typeString": "function (uint256) view external returns (string memory)"
                                  }
                                },
                                "id": 9085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2617:24:46",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 9081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2611:5:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 9080,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "2611:5:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2611:31:46",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2600:42:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 9088,
                        "nodeType": "ExpressionStatement",
                        "src": "2600:42:46"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9091,
                      "name": "_burnList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9668,
                      "src": "2667:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 9093,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9092,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9057,
                      "src": "2677:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2667:23:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 9110,
                    "nodeType": "Block",
                    "src": "2756:84:46",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9101,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9057,
                              "src": "2781:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9102,
                              "name": "depositer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9032,
                              "src": "2795:9:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 9105,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "2814:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 9104,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2806:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9103,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2806:7:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 9106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2806:13:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9107,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9043,
                              "src": "2821:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9100,
                            "name": "lockERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7936,
                            "src": "2770:10:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 9108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2770:59:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9109,
                        "nodeType": "ExpressionStatement",
                        "src": "2770:59:46"
                      }
                    ]
                  },
                  "id": 9111,
                  "nodeType": "IfStatement",
                  "src": "2663:177:46",
                  "trueBody": {
                    "id": 9099,
                    "nodeType": "Block",
                    "src": "2692:58:46",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9095,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9057,
                              "src": "2717:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9096,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9043,
                              "src": "2731:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9094,
                            "name": "burnERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8014,
                            "src": "2706:10:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2706:33:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9098,
                        "nodeType": "ExpressionStatement",
                        "src": "2706:33:46"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 9028,
              "nodeType": "StructuredDocumentation",
              "src": "888:1015:46",
              "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositer Address of account making the deposit in the Bridge contract.\n@param data Consists of {tokenID} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\n@notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\nthen {metaData} will be set according to the {tokenURI} method in the token contract.\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n@return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
            },
            "functionSelector": "b07e54bb",
            "id": 9113,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9038,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9037,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "2077:10:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2077:10:46"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9036,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2068:8:46"
            },
            "parameters": {
              "id": 9035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9030,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9113,
                  "src": "1925:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9029,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1925:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9032,
                  "mutability": "mutable",
                  "name": "depositer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9113,
                  "src": "1968:21:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9031,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1968:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9034,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9113,
                  "src": "2011:25:46",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9033,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2011:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1924:134:46"
            },
            "returnParameters": {
              "id": 9041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9040,
                  "mutability": "mutable",
                  "name": "metaData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9113,
                  "src": "2097:21:46",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9039,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2096:23:46"
            },
            "scope": 9297,
            "src": "1908:938:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9815
            ],
            "body": {
              "id": 9249,
              "nodeType": "Block",
              "src": "3947:1180:46",
              "statements": [
                {
                  "assignments": [
                    9125
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9125,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "3957:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9124,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3957:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9126,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3957:20:46"
                },
                {
                  "assignments": [
                    9128
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9128,
                      "mutability": "mutable",
                      "name": "lenDestinationRecipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "3987:43:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9127,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3987:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9129,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3987:43:46"
                },
                {
                  "assignments": [
                    9131
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9131,
                      "mutability": "mutable",
                      "name": "destinationRecipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4040:40:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9130,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4040:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9132,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4040:40:46"
                },
                {
                  "assignments": [
                    9134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9134,
                      "mutability": "mutable",
                      "name": "offsetMetaData",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4090:27:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9133,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4090:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9135,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4090:27:46"
                },
                {
                  "assignments": [
                    9137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9137,
                      "mutability": "mutable",
                      "name": "lenMetaData",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4127:24:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9136,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4127:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9138,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4127:24:46"
                },
                {
                  "assignments": [
                    9140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9140,
                      "mutability": "mutable",
                      "name": "metaData",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4161:21:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9139,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4161:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9141,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4161:21:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 9142,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9125,
                          "src": "4194:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 9143,
                          "name": "lenDestinationRecipientAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9128,
                          "src": "4203:30:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 9144,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4193:41:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9147,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9118,
                          "src": "4248:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4255:4:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9148,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4255:4:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4261:4:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9150,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4261:4:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9152,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4254:12:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9145,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "4237:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4237:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4237:30:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "4193:74:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9155,
                  "nodeType": "ExpressionStatement",
                  "src": "4193:74:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9156,
                      "name": "offsetMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9134,
                      "src": "4277:14:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "3634",
                        "id": 9157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4294:2:46",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_64_by_1",
                          "typeString": "int_const 64"
                        },
                        "value": "64"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9158,
                        "name": "lenDestinationRecipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9128,
                        "src": "4299:30:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4294:35:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4277:52:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9161,
                  "nodeType": "ExpressionStatement",
                  "src": "4277:52:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9162,
                      "name": "destinationRecipientAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9131,
                      "src": "4339:27:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9165,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9118,
                            "src": "4375:4:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "argumentTypes": null,
                            "id": 9167,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9134,
                            "src": "4383:14:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "4375:23:46",
                          "startExpression": {
                            "argumentTypes": null,
                            "hexValue": "3634",
                            "id": 9166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4380:2:46",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 9164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4369:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 9163,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4369:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4369:30:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "4339:60:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 9171,
                  "nodeType": "ExpressionStatement",
                  "src": "4339:60:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9172,
                      "name": "lenMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9137,
                      "src": "4409:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9175,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9118,
                            "src": "4434:4:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": null,
                          "id": 9177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "4434:21:46",
                          "startExpression": {
                            "argumentTypes": null,
                            "id": 9176,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9134,
                            "src": "4439:14:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4458:4:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9178,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4458:4:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9180,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4457:6:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9173,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "4423:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9174,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4423:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4423:41:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4409:55:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9183,
                  "nodeType": "ExpressionStatement",
                  "src": "4409:55:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9184,
                      "name": "metaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9140,
                      "src": "4474:8:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9187,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9118,
                            "src": "4491:4:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 9191,
                                "name": "offsetMetaData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9134,
                                "src": "4516:14:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 9192,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4533:2:46",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "4516:19:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 9194,
                              "name": "lenMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9137,
                              "src": "4538:11:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4516:33:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "4491:59:46",
                          "startExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 9188,
                              "name": "offsetMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9134,
                              "src": "4496:14:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 9189,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4513:2:46",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "src": "4496:19:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 9186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4485:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 9185,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4485:5:46",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4485:66:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "4474:77:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 9199,
                  "nodeType": "ExpressionStatement",
                  "src": "4474:77:46"
                },
                {
                  "assignments": [
                    9201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9201,
                      "mutability": "mutable",
                      "name": "recipientAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4562:24:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 9200,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "4562:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9202,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4562:24:46"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "4606:89:46",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "4620:65:46",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "destinationRecipientAddress",
                                  "nodeType": "YulIdentifier",
                                  "src": "4650:27:46"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4679:4:46",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4646:3:46"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4646:38:46"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "4640:5:46"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4640:45:46"
                        },
                        "variableNames": [
                          {
                            "name": "recipientAddress",
                            "nodeType": "YulIdentifier",
                            "src": "4620:16:46"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 9131,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4650:27:46",
                      "valueSize": 1
                    },
                    {
                      "declaration": 9201,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4620:16:46",
                      "valueSize": 1
                    }
                  ],
                  "id": 9203,
                  "nodeType": "InlineAssembly",
                  "src": "4597:98:46"
                },
                {
                  "assignments": [
                    9205
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9205,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9249,
                      "src": "4705:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9204,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4705:7:46",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9209,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9206,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9656,
                      "src": "4728:33:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 9208,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9207,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9116,
                      "src": "4762:10:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4728:45:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4705:68:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 9211,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9664,
                          "src": "4791:18:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 9216,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9214,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9205,
                              "src": "4818:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4810:7:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 9212,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4810:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4810:21:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4791:41:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                        "id": 9217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4834:42:46",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        },
                        "value": "provided tokenAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                          "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                        }
                      ],
                      "id": 9210,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4783:7:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4783:94:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9219,
                  "nodeType": "ExpressionStatement",
                  "src": "4783:94:46"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9220,
                      "name": "_burnList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9668,
                      "src": "4892:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 9222,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9221,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9205,
                      "src": "4902:12:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4892:23:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 9247,
                    "nodeType": "Block",
                    "src": "5018:103:46",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9235,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9205,
                              "src": "5046:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 9238,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "5068:4:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 9237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5060:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9236,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5060:7:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 9239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5060:13:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 9242,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9201,
                                  "src": "5083:16:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 9241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5075:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9240,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5075:7:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 9243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5075:25:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9244,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9125,
                              "src": "5102:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9234,
                            "name": "releaseERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7963,
                            "src": "5032:13:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 9245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5032:78:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9246,
                        "nodeType": "ExpressionStatement",
                        "src": "5032:78:46"
                      }
                    ]
                  },
                  "id": 9248,
                  "nodeType": "IfStatement",
                  "src": "4888:233:46",
                  "trueBody": {
                    "id": 9233,
                    "nodeType": "Block",
                    "src": "4917:95:46",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9224,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9205,
                              "src": "4942:12:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 9227,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9201,
                                  "src": "4964:16:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 9226,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4956:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9225,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4956:7:46",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 9228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4956:25:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9229,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9125,
                              "src": "4983:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9230,
                              "name": "metaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9140,
                              "src": "4992:8:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 9223,
                            "name": "mintERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7993,
                            "src": "4931:10:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 9231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4931:70:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9232,
                        "nodeType": "ExpressionStatement",
                        "src": "4931:70:46"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 9114,
              "nodeType": "StructuredDocumentation",
              "src": "2852:995:46",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n{destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
            },
            "functionSelector": "e248cff2",
            "id": 9250,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9122,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9121,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "3936:10:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3936:10:46"
              }
            ],
            "name": "executeProposal",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9120,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3927:8:46"
            },
            "parameters": {
              "id": 9119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9116,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9250,
                  "src": "3877:18:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9115,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3877:7:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9118,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9250,
                  "src": "3897:19:46",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9117,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3897:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3876:41:46"
            },
            "returnParameters": {
              "id": 9123,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3947:0:46"
            },
            "scope": 9297,
            "src": "3852:1275:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9736
            ],
            "body": {
              "id": 9295,
              "nodeType": "Block",
              "src": "5687:249:46",
              "statements": [
                {
                  "assignments": [
                    9260
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9260,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9295,
                      "src": "5697:20:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9259,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5697:7:46",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9261,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5697:20:46"
                },
                {
                  "assignments": [
                    9263
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9263,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9295,
                      "src": "5727:17:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9262,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5727:7:46",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9264,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5727:17:46"
                },
                {
                  "assignments": [
                    9266
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9266,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9295,
                      "src": "5754:12:46",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9265,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5754:4:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9267,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5754:12:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 9268,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9260,
                          "src": "5778:12:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 9269,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9263,
                          "src": "5792:9:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 9270,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9266,
                          "src": "5803:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 9271,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "5777:34:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9274,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9253,
                          "src": "5825:4:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5832:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9275,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5832:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5841:7:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9277,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5841:7:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5850:4:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9279,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "5850:4:46",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9281,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5831:24:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9272,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "5814:3:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5814:10:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5814:42:46",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "5777:79:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9284,
                  "nodeType": "ExpressionStatement",
                  "src": "5777:79:46"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9286,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9260,
                        "src": "5881:12:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9289,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "5903:4:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                              "typeString": "contract ERC721Handler"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                              "typeString": "contract ERC721Handler"
                            }
                          ],
                          "id": 9288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5895:7:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 9287,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5895:7:46",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 9290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5895:13:46",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9291,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9263,
                        "src": "5910:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9292,
                        "name": "tokenID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9266,
                        "src": "5921:7:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9285,
                      "name": "releaseERC721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7963,
                      "src": "5867:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 9293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5867:62:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9294,
                  "nodeType": "ExpressionStatement",
                  "src": "5867:62:46"
                }
              ]
            },
            "documentation": {
              "id": 9251,
              "nodeType": "StructuredDocumentation",
              "src": "5133:483:46",
              "text": "@notice Used to manually release ERC721 tokens from ERC721Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\ntokenID                                uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 9296,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9257,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9256,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "5676:10:46",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5676:10:46"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9255,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5667:8:46"
            },
            "parameters": {
              "id": 9254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9253,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9296,
                  "src": "5639:17:46",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9252,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5639:5:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5638:19:46"
            },
            "returnParameters": {
              "id": 9258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5687:0:46"
            },
            "scope": 9297,
            "src": "5621:315:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 9298,
        "src": "512:5426:46"
      }
    ],
    "src": "42:5897:46"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/handlers/ERC721Handler.sol",
      "exportedSymbols": {
        "ERC721Handler": [
          9297
        ]
      },
      "license": "LGPL-3.0-only"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".12"
          ]
        },
        "id": 8998,
        "name": "PragmaDirective",
        "src": "42:23:46"
      },
      {
        "attributes": {
          "literals": [
            "experimental",
            "ABIEncoderV2"
          ]
        },
        "id": 8999,
        "name": "PragmaDirective",
        "src": "66:33:46"
      },
      {
        "attributes": {
          "SourceUnit": 9817,
          "absolutePath": "project:/contracts/interfaces/IDepositExecute.sol",
          "file": "../interfaces/IDepositExecute.sol",
          "scope": 9298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9000,
        "name": "ImportDirective",
        "src": "101:43:46"
      },
      {
        "attributes": {
          "SourceUnit": 9783,
          "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
          "file": "./HandlerHelpers.sol",
          "scope": 9298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9001,
        "name": "ImportDirective",
        "src": "145:30:46"
      },
      {
        "attributes": {
          "SourceUnit": 8016,
          "absolutePath": "project:/contracts/ERC721Safe.sol",
          "file": "../ERC721Safe.sol",
          "scope": 9298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9002,
        "name": "ImportDirective",
        "src": "176:27:46"
      },
      {
        "attributes": {
          "SourceUnit": 571,
          "absolutePath": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
          "file": "@openzeppelin/contracts/introspection/ERC165Checker.sol",
          "scope": 9298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9003,
        "name": "ImportDirective",
        "src": "204:65:46"
      },
      {
        "attributes": {
          "SourceUnit": 4505,
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
          "file": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
          "scope": 9298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9004,
        "name": "ImportDirective",
        "src": "270:66:46"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            8015,
            9782,
            9816,
            9840
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            9297,
            8015,
            9782,
            9840,
            9816
          ],
          "name": "ERC721Handler",
          "scope": 9298
        },
        "children": [
          {
            "attributes": {
              "text": "@title Handles ERC721 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
            },
            "id": 9005,
            "name": "StructuredDocumentation",
            "src": "339:172:46"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IDepositExecute",
                  "referencedDeclaration": 9816,
                  "type": "contract IDepositExecute"
                },
                "id": 9006,
                "name": "UserDefinedTypeName",
                "src": "538:15:46"
              }
            ],
            "id": 9007,
            "name": "InheritanceSpecifier",
            "src": "538:15:46"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "HandlerHelpers",
                  "referencedDeclaration": 9782,
                  "type": "contract HandlerHelpers"
                },
                "id": 9008,
                "name": "UserDefinedTypeName",
                "src": "555:14:46"
              }
            ],
            "id": 9009,
            "name": "InheritanceSpecifier",
            "src": "555:14:46"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ERC721Safe",
                  "referencedDeclaration": 8015,
                  "type": "contract ERC721Safe"
                },
                "id": 9010,
                "name": "UserDefinedTypeName",
                "src": "571:10:46"
              }
            ],
            "id": 9011,
            "name": "InheritanceSpecifier",
            "src": "571:10:46"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ERC165Checker",
                  "referencedDeclaration": 570,
                  "type": "library ERC165Checker"
                },
                "id": 9012,
                "name": "UserDefinedTypeName",
                "src": "594:13:46"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 9013,
                "name": "ElementaryTypeName",
                "src": "612:7:46"
              }
            ],
            "id": 9014,
            "name": "UsingForDirective",
            "src": "588:32:46"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ERC721_METADATA",
              "overrides": null,
              "scope": 9297,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 9015,
                "name": "ElementaryTypeName",
                "src": "626:6:46"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "30783562356531333966",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 1532892063",
                  "value": "0x5b5e139f"
                },
                "id": 9016,
                "name": "Literal",
                "src": "679:10:46"
              }
            ],
            "id": 9017,
            "name": "VariableDeclaration",
            "src": "626:63:46"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "overrides": null,
              "scope": 9297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@param bridgeAddress Contract address of previously deployed Bridge."
                },
                "id": 9018,
                "name": "StructuredDocumentation",
                "src": "696:88:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "bridgeAddress",
                      "overrides": null,
                      "scope": 9027,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9019,
                        "name": "ElementaryTypeName",
                        "src": "810:7:46"
                      }
                    ],
                    "id": 9020,
                    "name": "VariableDeclaration",
                    "src": "810:21:46"
                  }
                ],
                "id": 9021,
                "name": "ParameterList",
                "src": "800:37:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9025,
                "name": "ParameterList",
                "src": "875:0:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9782,
                      "type": "type(contract HandlerHelpers)",
                      "value": "HandlerHelpers"
                    },
                    "id": 9022,
                    "name": "Identifier",
                    "src": "845:14:46"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9020,
                      "type": "address",
                      "value": "bridgeAddress"
                    },
                    "id": 9023,
                    "name": "Identifier",
                    "src": "860:13:46"
                  }
                ],
                "id": 9024,
                "name": "ModifierInvocation",
                "src": "845:29:46"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 9026,
                "name": "Block",
                "src": "875:7:46"
              }
            ],
            "id": 9027,
            "name": "FunctionDefinition",
            "src": "789:93:46"
          },
          {
            "attributes": {
              "baseFunctions": [
                9807
              ],
              "functionSelector": "b07e54bb",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "deposit",
              "scope": 9297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositer Address of account making the deposit in the Bridge contract.\n@param data Consists of {tokenID} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\n@notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\nthen {metaData} will be set according to the {tokenURI} method in the token contract.\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.\n@return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
                },
                "id": 9028,
                "name": "StructuredDocumentation",
                "src": "888:1015:46"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9036,
                "name": "OverrideSpecifier",
                "src": "2068:8:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9113,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9029,
                        "name": "ElementaryTypeName",
                        "src": "1925:7:46"
                      }
                    ],
                    "id": 9030,
                    "name": "VariableDeclaration",
                    "src": "1925:21:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositer",
                      "overrides": null,
                      "scope": 9113,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9031,
                        "name": "ElementaryTypeName",
                        "src": "1968:7:46"
                      }
                    ],
                    "id": 9032,
                    "name": "VariableDeclaration",
                    "src": "1968:21:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9113,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9033,
                        "name": "ElementaryTypeName",
                        "src": "2011:5:46"
                      }
                    ],
                    "id": 9034,
                    "name": "VariableDeclaration",
                    "src": "2011:25:46"
                  }
                ],
                "id": 9035,
                "name": "ParameterList",
                "src": "1924:134:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "metaData",
                      "overrides": null,
                      "scope": 9113,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9039,
                        "name": "ElementaryTypeName",
                        "src": "2097:5:46"
                      }
                    ],
                    "id": 9040,
                    "name": "VariableDeclaration",
                    "src": "2097:21:46"
                  }
                ],
                "id": 9041,
                "name": "ParameterList",
                "src": "2096:23:46"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9037,
                    "name": "Identifier",
                    "src": "2077:10:46"
                  }
                ],
                "id": 9038,
                "name": "ModifierInvocation",
                "src": "2077:10:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        9043
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenID",
                          "overrides": null,
                          "scope": 9112,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9042,
                            "name": "ElementaryTypeName",
                            "src": "2130:4:46"
                          }
                        ],
                        "id": 9043,
                        "name": "VariableDeclaration",
                        "src": "2130:20:46"
                      }
                    ],
                    "id": 9044,
                    "name": "VariableDeclarationStatement",
                    "src": "2130:20:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9043,
                                  "type": "uint256",
                                  "value": "tokenID"
                                },
                                "id": 9045,
                                "name": "Identifier",
                                "src": "2162:7:46"
                              }
                            ],
                            "id": 9046,
                            "name": "TupleExpression",
                            "src": "2161:9:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9047,
                                    "name": "Identifier",
                                    "src": "2173:3:46"
                                  }
                                ],
                                "id": 9048,
                                "name": "MemberAccess",
                                "src": "2173:10:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9034,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 9049,
                                "name": "Identifier",
                                "src": "2184:4:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 9050,
                                        "name": "ElementaryTypeName",
                                        "src": "2191:4:46"
                                      }
                                    ],
                                    "id": 9051,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2191:4:46"
                                  }
                                ],
                                "id": 9052,
                                "name": "TupleExpression",
                                "src": "2190:6:46"
                              }
                            ],
                            "id": 9053,
                            "name": "FunctionCall",
                            "src": "2173:24:46"
                          }
                        ],
                        "id": 9054,
                        "name": "Assignment",
                        "src": "2161:36:46"
                      }
                    ],
                    "id": 9055,
                    "name": "ExpressionStatement",
                    "src": "2161:36:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9057
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 9112,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9056,
                            "name": "ElementaryTypeName",
                            "src": "2208:7:46"
                          }
                        ],
                        "id": 9057,
                        "name": "VariableDeclaration",
                        "src": "2208:20:46"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9656,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToTokenContractAddress"
                            },
                            "id": 9058,
                            "name": "Identifier",
                            "src": "2231:33:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9030,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9059,
                            "name": "Identifier",
                            "src": "2265:10:46"
                          }
                        ],
                        "id": 9060,
                        "name": "IndexAccess",
                        "src": "2231:45:46"
                      }
                    ],
                    "id": 9061,
                    "name": "VariableDeclarationStatement",
                    "src": "2208:68:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                                  "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9062,
                            "name": "Identifier",
                            "src": "2286:7:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9063,
                                "name": "Identifier",
                                "src": "2294:18:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9057,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 9064,
                                "name": "Identifier",
                                "src": "2313:12:46"
                              }
                            ],
                            "id": 9065,
                            "name": "IndexAccess",
                            "src": "2294:32:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided tokenAddress is not whitelisted\"",
                              "value": "provided tokenAddress is not whitelisted"
                            },
                            "id": 9066,
                            "name": "Literal",
                            "src": "2328:42:46"
                          }
                        ],
                        "id": 9067,
                        "name": "FunctionCall",
                        "src": "2286:85:46"
                      }
                    ],
                    "id": 9068,
                    "name": "ExpressionStatement",
                    "src": "2286:85:46"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "supportsInterface",
                              "referencedDeclaration": 391,
                              "type": "function (address,bytes4) view returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9057,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 9069,
                                "name": "Identifier",
                                "src": "2458:12:46"
                              }
                            ],
                            "id": 9070,
                            "name": "MemberAccess",
                            "src": "2458:30:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9017,
                              "type": "bytes4",
                              "value": "_INTERFACE_ERC721_METADATA"
                            },
                            "id": 9071,
                            "name": "Identifier",
                            "src": "2489:26:46"
                          }
                        ],
                        "id": 9072,
                        "name": "FunctionCall",
                        "src": "2458:58:46"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                9074
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "erc721",
                                  "overrides": null,
                                  "scope": 9089,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "contract IERC721Metadata",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "contractScope": null,
                                      "name": "IERC721Metadata",
                                      "referencedDeclaration": 4504,
                                      "type": "contract IERC721Metadata"
                                    },
                                    "id": 9073,
                                    "name": "UserDefinedTypeName",
                                    "src": "2532:15:46"
                                  }
                                ],
                                "id": 9074,
                                "name": "VariableDeclaration",
                                "src": "2532:22:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IERC721Metadata",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4504,
                                      "type": "type(contract IERC721Metadata)",
                                      "value": "IERC721Metadata"
                                    },
                                    "id": 9075,
                                    "name": "Identifier",
                                    "src": "2557:15:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9057,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9076,
                                    "name": "Identifier",
                                    "src": "2573:12:46"
                                  }
                                ],
                                "id": 9077,
                                "name": "FunctionCall",
                                "src": "2557:29:46"
                              }
                            ],
                            "id": 9078,
                            "name": "VariableDeclarationStatement",
                            "src": "2532:54:46"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9040,
                                      "type": "bytes memory",
                                      "value": "metaData"
                                    },
                                    "id": 9079,
                                    "name": "Identifier",
                                    "src": "2600:8:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bytes memory",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_memory_ptr",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes storage pointer)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "bytes",
                                              "type": null
                                            },
                                            "id": 9080,
                                            "name": "ElementaryTypeName",
                                            "src": "2611:5:46"
                                          }
                                        ],
                                        "id": 9081,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "2611:5:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "string memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "tokenURI",
                                              "referencedDeclaration": 4503,
                                              "type": "function (uint256) view external returns (string memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 9074,
                                                  "type": "contract IERC721Metadata",
                                                  "value": "erc721"
                                                },
                                                "id": 9082,
                                                "name": "Identifier",
                                                "src": "2617:6:46"
                                              }
                                            ],
                                            "id": 9083,
                                            "name": "MemberAccess",
                                            "src": "2617:15:46"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 9043,
                                              "type": "uint256",
                                              "value": "tokenID"
                                            },
                                            "id": 9084,
                                            "name": "Identifier",
                                            "src": "2633:7:46"
                                          }
                                        ],
                                        "id": 9085,
                                        "name": "FunctionCall",
                                        "src": "2617:24:46"
                                      }
                                    ],
                                    "id": 9086,
                                    "name": "FunctionCall",
                                    "src": "2611:31:46"
                                  }
                                ],
                                "id": 9087,
                                "name": "Assignment",
                                "src": "2600:42:46"
                              }
                            ],
                            "id": 9088,
                            "name": "ExpressionStatement",
                            "src": "2600:42:46"
                          }
                        ],
                        "id": 9089,
                        "name": "Block",
                        "src": "2518:135:46"
                      }
                    ],
                    "id": 9090,
                    "name": "IfStatement",
                    "src": "2454:199:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9668,
                              "type": "mapping(address => bool)",
                              "value": "_burnList"
                            },
                            "id": 9091,
                            "name": "Identifier",
                            "src": "2667:9:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9057,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 9092,
                            "name": "Identifier",
                            "src": "2677:12:46"
                          }
                        ],
                        "id": 9093,
                        "name": "IndexAccess",
                        "src": "2667:23:46"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8014,
                                      "type": "function (address,uint256)",
                                      "value": "burnERC721"
                                    },
                                    "id": 9094,
                                    "name": "Identifier",
                                    "src": "2706:10:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9057,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9095,
                                    "name": "Identifier",
                                    "src": "2717:12:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9043,
                                      "type": "uint256",
                                      "value": "tokenID"
                                    },
                                    "id": 9096,
                                    "name": "Identifier",
                                    "src": "2731:7:46"
                                  }
                                ],
                                "id": 9097,
                                "name": "FunctionCall",
                                "src": "2706:33:46"
                              }
                            ],
                            "id": 9098,
                            "name": "ExpressionStatement",
                            "src": "2706:33:46"
                          }
                        ],
                        "id": 9099,
                        "name": "Block",
                        "src": "2692:58:46"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7936,
                                      "type": "function (address,address,address,uint256)",
                                      "value": "lockERC721"
                                    },
                                    "id": 9100,
                                    "name": "Identifier",
                                    "src": "2770:10:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9057,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9101,
                                    "name": "Identifier",
                                    "src": "2781:12:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9032,
                                      "type": "address",
                                      "value": "depositer"
                                    },
                                    "id": 9102,
                                    "name": "Identifier",
                                    "src": "2795:9:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                              "typeString": "contract ERC721Handler"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 9103,
                                            "name": "ElementaryTypeName",
                                            "src": "2806:7:46"
                                          }
                                        ],
                                        "id": 9104,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "2806:7:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract ERC721Handler",
                                          "value": "this"
                                        },
                                        "id": 9105,
                                        "name": "Identifier",
                                        "src": "2814:4:46"
                                      }
                                    ],
                                    "id": 9106,
                                    "name": "FunctionCall",
                                    "src": "2806:13:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9043,
                                      "type": "uint256",
                                      "value": "tokenID"
                                    },
                                    "id": 9107,
                                    "name": "Identifier",
                                    "src": "2821:7:46"
                                  }
                                ],
                                "id": 9108,
                                "name": "FunctionCall",
                                "src": "2770:59:46"
                              }
                            ],
                            "id": 9109,
                            "name": "ExpressionStatement",
                            "src": "2770:59:46"
                          }
                        ],
                        "id": 9110,
                        "name": "Block",
                        "src": "2756:84:46"
                      }
                    ],
                    "id": 9111,
                    "name": "IfStatement",
                    "src": "2663:177:46"
                  }
                ],
                "id": 9112,
                "name": "Block",
                "src": "2120:726:46"
              }
            ],
            "id": 9113,
            "name": "FunctionDefinition",
            "src": "1908:938:46"
          },
          {
            "attributes": {
              "baseFunctions": [
                9815
              ],
              "functionSelector": "e248cff2",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "executeProposal",
              "scope": 9297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n{destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
                },
                "id": 9114,
                "name": "StructuredDocumentation",
                "src": "2852:995:46"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9120,
                "name": "OverrideSpecifier",
                "src": "3927:8:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9250,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9115,
                        "name": "ElementaryTypeName",
                        "src": "3877:7:46"
                      }
                    ],
                    "id": 9116,
                    "name": "VariableDeclaration",
                    "src": "3877:18:46"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9250,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9117,
                        "name": "ElementaryTypeName",
                        "src": "3897:5:46"
                      }
                    ],
                    "id": 9118,
                    "name": "VariableDeclaration",
                    "src": "3897:19:46"
                  }
                ],
                "id": 9119,
                "name": "ParameterList",
                "src": "3876:41:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9123,
                "name": "ParameterList",
                "src": "3947:0:46"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9121,
                    "name": "Identifier",
                    "src": "3936:10:46"
                  }
                ],
                "id": 9122,
                "name": "ModifierInvocation",
                "src": "3936:10:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        9125
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenID",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9124,
                            "name": "ElementaryTypeName",
                            "src": "3957:4:46"
                          }
                        ],
                        "id": 9125,
                        "name": "VariableDeclaration",
                        "src": "3957:20:46"
                      }
                    ],
                    "id": 9126,
                    "name": "VariableDeclarationStatement",
                    "src": "3957:20:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9128
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lenDestinationRecipientAddress",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9127,
                            "name": "ElementaryTypeName",
                            "src": "3987:4:46"
                          }
                        ],
                        "id": 9128,
                        "name": "VariableDeclaration",
                        "src": "3987:43:46"
                      }
                    ],
                    "id": 9129,
                    "name": "VariableDeclarationStatement",
                    "src": "3987:43:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9131
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "destinationRecipientAddress",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 9130,
                            "name": "ElementaryTypeName",
                            "src": "4040:5:46"
                          }
                        ],
                        "id": 9131,
                        "name": "VariableDeclaration",
                        "src": "4040:40:46"
                      }
                    ],
                    "id": 9132,
                    "name": "VariableDeclarationStatement",
                    "src": "4040:40:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9134
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "offsetMetaData",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9133,
                            "name": "ElementaryTypeName",
                            "src": "4090:4:46"
                          }
                        ],
                        "id": 9134,
                        "name": "VariableDeclaration",
                        "src": "4090:27:46"
                      }
                    ],
                    "id": 9135,
                    "name": "VariableDeclarationStatement",
                    "src": "4090:27:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9137
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lenMetaData",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9136,
                            "name": "ElementaryTypeName",
                            "src": "4127:4:46"
                          }
                        ],
                        "id": 9137,
                        "name": "VariableDeclaration",
                        "src": "4127:24:46"
                      }
                    ],
                    "id": 9138,
                    "name": "VariableDeclarationStatement",
                    "src": "4127:24:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9140
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "metaData",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 9139,
                            "name": "ElementaryTypeName",
                            "src": "4161:5:46"
                          }
                        ],
                        "id": 9140,
                        "name": "VariableDeclaration",
                        "src": "4161:21:46"
                      }
                    ],
                    "id": 9141,
                    "name": "VariableDeclarationStatement",
                    "src": "4161:21:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9125,
                                  "type": "uint256",
                                  "value": "tokenID"
                                },
                                "id": 9142,
                                "name": "Identifier",
                                "src": "4194:7:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9128,
                                  "type": "uint256",
                                  "value": "lenDestinationRecipientAddress"
                                },
                                "id": 9143,
                                "name": "Identifier",
                                "src": "4203:30:46"
                              }
                            ],
                            "id": 9144,
                            "name": "TupleExpression",
                            "src": "4193:41:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                      "typeString": "tuple(type(uint256),type(uint256))"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9145,
                                    "name": "Identifier",
                                    "src": "4237:3:46"
                                  }
                                ],
                                "id": 9146,
                                "name": "MemberAccess",
                                "src": "4237:10:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9118,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 9147,
                                "name": "Identifier",
                                "src": "4248:4:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "tuple(type(uint256),type(uint256))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 9148,
                                        "name": "ElementaryTypeName",
                                        "src": "4255:4:46"
                                      }
                                    ],
                                    "id": 9149,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4255:4:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 9150,
                                        "name": "ElementaryTypeName",
                                        "src": "4261:4:46"
                                      }
                                    ],
                                    "id": 9151,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4261:4:46"
                                  }
                                ],
                                "id": 9152,
                                "name": "TupleExpression",
                                "src": "4254:12:46"
                              }
                            ],
                            "id": 9153,
                            "name": "FunctionCall",
                            "src": "4237:30:46"
                          }
                        ],
                        "id": 9154,
                        "name": "Assignment",
                        "src": "4193:74:46"
                      }
                    ],
                    "id": 9155,
                    "name": "ExpressionStatement",
                    "src": "4193:74:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9134,
                              "type": "uint256",
                              "value": "offsetMetaData"
                            },
                            "id": 9156,
                            "name": "Identifier",
                            "src": "4277:14:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3634",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 64",
                                  "value": "64"
                                },
                                "id": 9157,
                                "name": "Literal",
                                "src": "4294:2:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9128,
                                  "type": "uint256",
                                  "value": "lenDestinationRecipientAddress"
                                },
                                "id": 9158,
                                "name": "Identifier",
                                "src": "4299:30:46"
                              }
                            ],
                            "id": 9159,
                            "name": "BinaryOperation",
                            "src": "4294:35:46"
                          }
                        ],
                        "id": 9160,
                        "name": "Assignment",
                        "src": "4277:52:46"
                      }
                    ],
                    "id": 9161,
                    "name": "ExpressionStatement",
                    "src": "4277:52:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9131,
                              "type": "bytes memory",
                              "value": "destinationRecipientAddress"
                            },
                            "id": 9162,
                            "name": "Identifier",
                            "src": "4339:27:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes storage pointer)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": null
                                    },
                                    "id": 9163,
                                    "name": "ElementaryTypeName",
                                    "src": "4369:5:46"
                                  }
                                ],
                                "id": 9164,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4369:5:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9118,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 9165,
                                    "name": "Identifier",
                                    "src": "4375:4:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3634",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 64",
                                      "value": "64"
                                    },
                                    "id": 9166,
                                    "name": "Literal",
                                    "src": "4380:2:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9134,
                                      "type": "uint256",
                                      "value": "offsetMetaData"
                                    },
                                    "id": 9167,
                                    "name": "Identifier",
                                    "src": "4383:14:46"
                                  }
                                ],
                                "id": 9168,
                                "name": "IndexRangeAccess",
                                "src": "4375:23:46"
                              }
                            ],
                            "id": 9169,
                            "name": "FunctionCall",
                            "src": "4369:30:46"
                          }
                        ],
                        "id": 9170,
                        "name": "Assignment",
                        "src": "4339:60:46"
                      }
                    ],
                    "id": 9171,
                    "name": "ExpressionStatement",
                    "src": "4339:60:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9137,
                              "type": "uint256",
                              "value": "lenMetaData"
                            },
                            "id": 9172,
                            "name": "Identifier",
                            "src": "4409:11:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9173,
                                    "name": "Identifier",
                                    "src": "4423:3:46"
                                  }
                                ],
                                "id": 9174,
                                "name": "MemberAccess",
                                "src": "4423:10:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "endExpression": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9118,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 9175,
                                    "name": "Identifier",
                                    "src": "4434:4:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9134,
                                      "type": "uint256",
                                      "value": "offsetMetaData"
                                    },
                                    "id": 9176,
                                    "name": "Identifier",
                                    "src": "4439:14:46"
                                  }
                                ],
                                "id": 9177,
                                "name": "IndexRangeAccess",
                                "src": "4434:21:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 9178,
                                        "name": "ElementaryTypeName",
                                        "src": "4458:4:46"
                                      }
                                    ],
                                    "id": 9179,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4458:4:46"
                                  }
                                ],
                                "id": 9180,
                                "name": "TupleExpression",
                                "src": "4457:6:46"
                              }
                            ],
                            "id": 9181,
                            "name": "FunctionCall",
                            "src": "4423:41:46"
                          }
                        ],
                        "id": 9182,
                        "name": "Assignment",
                        "src": "4409:55:46"
                      }
                    ],
                    "id": 9183,
                    "name": "ExpressionStatement",
                    "src": "4409:55:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9140,
                              "type": "bytes memory",
                              "value": "metaData"
                            },
                            "id": 9184,
                            "name": "Identifier",
                            "src": "4474:8:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes storage pointer)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": null
                                    },
                                    "id": 9185,
                                    "name": "ElementaryTypeName",
                                    "src": "4485:5:46"
                                  }
                                ],
                                "id": 9186,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4485:5:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9118,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 9187,
                                    "name": "Identifier",
                                    "src": "4491:4:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9134,
                                          "type": "uint256",
                                          "value": "offsetMetaData"
                                        },
                                        "id": 9188,
                                        "name": "Identifier",
                                        "src": "4496:14:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3332",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 32",
                                          "value": "32"
                                        },
                                        "id": 9189,
                                        "name": "Literal",
                                        "src": "4513:2:46"
                                      }
                                    ],
                                    "id": 9190,
                                    "name": "BinaryOperation",
                                    "src": "4496:19:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 9134,
                                              "type": "uint256",
                                              "value": "offsetMetaData"
                                            },
                                            "id": 9191,
                                            "name": "Identifier",
                                            "src": "4516:14:46"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "3332",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 32",
                                              "value": "32"
                                            },
                                            "id": 9192,
                                            "name": "Literal",
                                            "src": "4533:2:46"
                                          }
                                        ],
                                        "id": 9193,
                                        "name": "BinaryOperation",
                                        "src": "4516:19:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9137,
                                          "type": "uint256",
                                          "value": "lenMetaData"
                                        },
                                        "id": 9194,
                                        "name": "Identifier",
                                        "src": "4538:11:46"
                                      }
                                    ],
                                    "id": 9195,
                                    "name": "BinaryOperation",
                                    "src": "4516:33:46"
                                  }
                                ],
                                "id": 9196,
                                "name": "IndexRangeAccess",
                                "src": "4491:59:46"
                              }
                            ],
                            "id": 9197,
                            "name": "FunctionCall",
                            "src": "4485:66:46"
                          }
                        ],
                        "id": 9198,
                        "name": "Assignment",
                        "src": "4474:77:46"
                      }
                    ],
                    "id": 9199,
                    "name": "ExpressionStatement",
                    "src": "4474:77:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9201
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "recipientAddress",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes20",
                              "type": "bytes20"
                            },
                            "id": 9200,
                            "name": "ElementaryTypeName",
                            "src": "4562:7:46"
                          }
                        ],
                        "id": 9201,
                        "name": "VariableDeclaration",
                        "src": "4562:24:46"
                      }
                    ],
                    "id": 9202,
                    "name": "VariableDeclarationStatement",
                    "src": "4562:24:46"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 9131,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "4650:27:46",
                          "valueSize": 1
                        },
                        {
                          "declaration": 9201,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "4620:16:46",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    recipientAddress := mload(add(destinationRecipientAddress, 0x20))\n}"
                    },
                    "children": [],
                    "id": 9203,
                    "name": "InlineAssembly",
                    "src": "4597:98:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9205
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 9249,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9204,
                            "name": "ElementaryTypeName",
                            "src": "4705:7:46"
                          }
                        ],
                        "id": 9205,
                        "name": "VariableDeclaration",
                        "src": "4705:20:46"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9656,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToTokenContractAddress"
                            },
                            "id": 9206,
                            "name": "Identifier",
                            "src": "4728:33:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9116,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9207,
                            "name": "Identifier",
                            "src": "4762:10:46"
                          }
                        ],
                        "id": 9208,
                        "name": "IndexAccess",
                        "src": "4728:45:46"
                      }
                    ],
                    "id": 9209,
                    "name": "VariableDeclarationStatement",
                    "src": "4705:68:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d6f36190bb0602e32e72016fc9d55735c428c14ee06e9999974578d6c009c7ad",
                                  "typeString": "literal_string \"provided tokenAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9210,
                            "name": "Identifier",
                            "src": "4783:7:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9211,
                                "name": "Identifier",
                                "src": "4791:18:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 9212,
                                        "name": "ElementaryTypeName",
                                        "src": "4810:7:46"
                                      }
                                    ],
                                    "id": 9213,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4810:7:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9205,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9214,
                                    "name": "Identifier",
                                    "src": "4818:12:46"
                                  }
                                ],
                                "id": 9215,
                                "name": "FunctionCall",
                                "src": "4810:21:46"
                              }
                            ],
                            "id": 9216,
                            "name": "IndexAccess",
                            "src": "4791:41:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420746f6b656e41646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided tokenAddress is not whitelisted\"",
                              "value": "provided tokenAddress is not whitelisted"
                            },
                            "id": 9217,
                            "name": "Literal",
                            "src": "4834:42:46"
                          }
                        ],
                        "id": 9218,
                        "name": "FunctionCall",
                        "src": "4783:94:46"
                      }
                    ],
                    "id": 9219,
                    "name": "ExpressionStatement",
                    "src": "4783:94:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9668,
                              "type": "mapping(address => bool)",
                              "value": "_burnList"
                            },
                            "id": 9220,
                            "name": "Identifier",
                            "src": "4892:9:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9205,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 9221,
                            "name": "Identifier",
                            "src": "4902:12:46"
                          }
                        ],
                        "id": 9222,
                        "name": "IndexAccess",
                        "src": "4892:23:46"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7993,
                                      "type": "function (address,address,uint256,bytes memory)",
                                      "value": "mintERC721"
                                    },
                                    "id": 9223,
                                    "name": "Identifier",
                                    "src": "4931:10:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9205,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9224,
                                    "name": "Identifier",
                                    "src": "4942:12:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes20",
                                              "typeString": "bytes20"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 9225,
                                            "name": "ElementaryTypeName",
                                            "src": "4956:7:46"
                                          }
                                        ],
                                        "id": 9226,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4956:7:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9201,
                                          "type": "bytes20",
                                          "value": "recipientAddress"
                                        },
                                        "id": 9227,
                                        "name": "Identifier",
                                        "src": "4964:16:46"
                                      }
                                    ],
                                    "id": 9228,
                                    "name": "FunctionCall",
                                    "src": "4956:25:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9125,
                                      "type": "uint256",
                                      "value": "tokenID"
                                    },
                                    "id": 9229,
                                    "name": "Identifier",
                                    "src": "4983:7:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9140,
                                      "type": "bytes memory",
                                      "value": "metaData"
                                    },
                                    "id": 9230,
                                    "name": "Identifier",
                                    "src": "4992:8:46"
                                  }
                                ],
                                "id": 9231,
                                "name": "FunctionCall",
                                "src": "4931:70:46"
                              }
                            ],
                            "id": 9232,
                            "name": "ExpressionStatement",
                            "src": "4931:70:46"
                          }
                        ],
                        "id": 9233,
                        "name": "Block",
                        "src": "4917:95:46"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7963,
                                      "type": "function (address,address,address,uint256)",
                                      "value": "releaseERC721"
                                    },
                                    "id": 9234,
                                    "name": "Identifier",
                                    "src": "5032:13:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9205,
                                      "type": "address",
                                      "value": "tokenAddress"
                                    },
                                    "id": 9235,
                                    "name": "Identifier",
                                    "src": "5046:12:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                              "typeString": "contract ERC721Handler"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 9236,
                                            "name": "ElementaryTypeName",
                                            "src": "5060:7:46"
                                          }
                                        ],
                                        "id": 9237,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "5060:7:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract ERC721Handler",
                                          "value": "this"
                                        },
                                        "id": 9238,
                                        "name": "Identifier",
                                        "src": "5068:4:46"
                                      }
                                    ],
                                    "id": 9239,
                                    "name": "FunctionCall",
                                    "src": "5060:13:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes20",
                                              "typeString": "bytes20"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 9240,
                                            "name": "ElementaryTypeName",
                                            "src": "5075:7:46"
                                          }
                                        ],
                                        "id": 9241,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "5075:7:46"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9201,
                                          "type": "bytes20",
                                          "value": "recipientAddress"
                                        },
                                        "id": 9242,
                                        "name": "Identifier",
                                        "src": "5083:16:46"
                                      }
                                    ],
                                    "id": 9243,
                                    "name": "FunctionCall",
                                    "src": "5075:25:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9125,
                                      "type": "uint256",
                                      "value": "tokenID"
                                    },
                                    "id": 9244,
                                    "name": "Identifier",
                                    "src": "5102:7:46"
                                  }
                                ],
                                "id": 9245,
                                "name": "FunctionCall",
                                "src": "5032:78:46"
                              }
                            ],
                            "id": 9246,
                            "name": "ExpressionStatement",
                            "src": "5032:78:46"
                          }
                        ],
                        "id": 9247,
                        "name": "Block",
                        "src": "5018:103:46"
                      }
                    ],
                    "id": 9248,
                    "name": "IfStatement",
                    "src": "4888:233:46"
                  }
                ],
                "id": 9249,
                "name": "Block",
                "src": "3947:1180:46"
              }
            ],
            "id": 9250,
            "name": "FunctionDefinition",
            "src": "3852:1275:46"
          },
          {
            "attributes": {
              "baseFunctions": [
                9736
              ],
              "functionSelector": "0968f264",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "withdraw",
              "scope": 9297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Used to manually release ERC721 tokens from ERC721Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\ntokenID                                uint        bytes  64 - 96"
                },
                "id": 9251,
                "name": "StructuredDocumentation",
                "src": "5133:483:46"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9255,
                "name": "OverrideSpecifier",
                "src": "5667:8:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9296,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9252,
                        "name": "ElementaryTypeName",
                        "src": "5639:5:46"
                      }
                    ],
                    "id": 9253,
                    "name": "VariableDeclaration",
                    "src": "5639:17:46"
                  }
                ],
                "id": 9254,
                "name": "ParameterList",
                "src": "5638:19:46"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9258,
                "name": "ParameterList",
                "src": "5687:0:46"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9256,
                    "name": "Identifier",
                    "src": "5676:10:46"
                  }
                ],
                "id": 9257,
                "name": "ModifierInvocation",
                "src": "5676:10:46"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        9260
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenAddress",
                          "overrides": null,
                          "scope": 9295,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9259,
                            "name": "ElementaryTypeName",
                            "src": "5697:7:46"
                          }
                        ],
                        "id": 9260,
                        "name": "VariableDeclaration",
                        "src": "5697:20:46"
                      }
                    ],
                    "id": 9261,
                    "name": "VariableDeclarationStatement",
                    "src": "5697:20:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9263
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "recipient",
                          "overrides": null,
                          "scope": 9295,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9262,
                            "name": "ElementaryTypeName",
                            "src": "5727:7:46"
                          }
                        ],
                        "id": 9263,
                        "name": "VariableDeclaration",
                        "src": "5727:17:46"
                      }
                    ],
                    "id": 9264,
                    "name": "VariableDeclarationStatement",
                    "src": "5727:17:46"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9266
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenID",
                          "overrides": null,
                          "scope": 9295,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 9265,
                            "name": "ElementaryTypeName",
                            "src": "5754:4:46"
                          }
                        ],
                        "id": 9266,
                        "name": "VariableDeclaration",
                        "src": "5754:12:46"
                      }
                    ],
                    "id": 9267,
                    "name": "VariableDeclarationStatement",
                    "src": "5754:12:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9260,
                                  "type": "address",
                                  "value": "tokenAddress"
                                },
                                "id": 9268,
                                "name": "Identifier",
                                "src": "5778:12:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9263,
                                  "type": "address",
                                  "value": "recipient"
                                },
                                "id": 9269,
                                "name": "Identifier",
                                "src": "5792:9:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9266,
                                  "type": "uint256",
                                  "value": "tokenID"
                                },
                                "id": 9270,
                                "name": "Identifier",
                                "src": "5803:7:46"
                              }
                            ],
                            "id": 9271,
                            "name": "TupleExpression",
                            "src": "5777:34:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(address payable,address payable,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                      "typeString": "tuple(type(address),type(address),type(uint256))"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9272,
                                    "name": "Identifier",
                                    "src": "5814:3:46"
                                  }
                                ],
                                "id": 9273,
                                "name": "MemberAccess",
                                "src": "5814:10:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9253,
                                  "type": "bytes memory",
                                  "value": "data"
                                },
                                "id": 9274,
                                "name": "Identifier",
                                "src": "5825:4:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "tuple(type(address),type(address),type(uint256))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 9275,
                                        "name": "ElementaryTypeName",
                                        "src": "5832:7:46"
                                      }
                                    ],
                                    "id": 9276,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5832:7:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 9277,
                                        "name": "ElementaryTypeName",
                                        "src": "5841:7:46"
                                      }
                                    ],
                                    "id": 9278,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5841:7:46"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint",
                                          "type": null
                                        },
                                        "id": 9279,
                                        "name": "ElementaryTypeName",
                                        "src": "5850:4:46"
                                      }
                                    ],
                                    "id": 9280,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5850:4:46"
                                  }
                                ],
                                "id": 9281,
                                "name": "TupleExpression",
                                "src": "5831:24:46"
                              }
                            ],
                            "id": 9282,
                            "name": "FunctionCall",
                            "src": "5814:42:46"
                          }
                        ],
                        "id": 9283,
                        "name": "Assignment",
                        "src": "5777:79:46"
                      }
                    ],
                    "id": 9284,
                    "name": "ExpressionStatement",
                    "src": "5777:79:46"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7963,
                              "type": "function (address,address,address,uint256)",
                              "value": "releaseERC721"
                            },
                            "id": 9285,
                            "name": "Identifier",
                            "src": "5867:13:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9260,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 9286,
                            "name": "Identifier",
                            "src": "5881:12:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ERC721Handler_$9297",
                                      "typeString": "contract ERC721Handler"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 9287,
                                    "name": "ElementaryTypeName",
                                    "src": "5895:7:46"
                                  }
                                ],
                                "id": 9288,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5895:7:46"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract ERC721Handler",
                                  "value": "this"
                                },
                                "id": 9289,
                                "name": "Identifier",
                                "src": "5903:4:46"
                              }
                            ],
                            "id": 9290,
                            "name": "FunctionCall",
                            "src": "5895:13:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9263,
                              "type": "address",
                              "value": "recipient"
                            },
                            "id": 9291,
                            "name": "Identifier",
                            "src": "5910:9:46"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9266,
                              "type": "uint256",
                              "value": "tokenID"
                            },
                            "id": 9292,
                            "name": "Identifier",
                            "src": "5921:7:46"
                          }
                        ],
                        "id": 9293,
                        "name": "FunctionCall",
                        "src": "5867:62:46"
                      }
                    ],
                    "id": 9294,
                    "name": "ExpressionStatement",
                    "src": "5867:62:46"
                  }
                ],
                "id": 9295,
                "name": "Block",
                "src": "5687:249:46"
              }
            ],
            "id": 9296,
            "name": "FunctionDefinition",
            "src": "5621:315:46"
          }
        ],
        "id": 9297,
        "name": "ContractDefinition",
        "src": "512:5426:46"
      }
    ],
    "id": 9298,
    "name": "SourceUnit",
    "src": "42:5897:46"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.267Z",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge."
        }
      },
      "deposit(bytes32,address,bytes)": {
        "details": "Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_burnList}, deposited tokens will be burned, if not, they will be locked.",
        "params": {
          "data": "Consists of {tokenID} padded to 32 bytes.",
          "depositer": "Address of account making the deposit in the Bridge contract.",
          "resourceID": "ResourceID used to find address of token to be used for deposit."
        },
        "returns": {
          "metaData": ": the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
        }
      },
      "executeProposal(bytes32,bytes)": {
        "params": {
          "data": "Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress}, {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes."
        }
      },
      "setBurnable(address)": {
        "params": {
          "contractAddress": "Address of contract to be used when making or executing deposits."
        }
      },
      "setResource(bytes32,address)": {
        "params": {
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "withdraw(bytes)": {
        "params": {
          "data": "Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes."
        }
      }
    },
    "title": "Handles ERC721 deposits and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deposit(bytes32,address,bytes)": {
        "notice": "A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA}, then {metaData} will be set according to the {tokenURI} method in the token contract."
      },
      "executeProposal(bytes32,bytes)": {
        "notice": "Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
      },
      "setBurnable(address)": {
        "notice": "First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true."
      },
      "setResource(bytes32,address)": {
        "notice": "First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}."
      },
      "withdraw(bytes)": {
        "notice": "Used to manually release ERC721 tokens from ERC721Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 tokenID                                uint        bytes  64 - 96"
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}