{
  "contractName": "ERC1155Mock",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_uri",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC1155-isApprovedForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"uri(uint256)\":{\"details\":\"See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\\\{id\\\\}` substring with the actual token type ID.\"}},\"title\":\"ERC1155Mock This mock just allows minting for testing purposes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/user/Projects/future-contracts/contracts/test/ERC1155Mock.sol\":\"ERC1155Mock\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0x7dcdf324fd4d2dec68846958865ae833956cb4ad80cd83cf6f107e7c33500bf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cddf52afd931cbf983100a0415f04e6646aa90d100fd91437d2a75e3b241206\",\"dweb:/ipfs/QmXXJ2qoC1rSsKdg5s87m3BPQ3RFGw2rNrNv7KygzGJ9zQ\"]},\"/home/user/Projects/future-contracts/contracts/test/ERC1155Mock.sol\":{\"keccak256\":\"0xb23beece63b1a3a658142731e6bf2edc69b1f0fc7b5c683ecf5b0e9c24c1d8ea\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://a56ea7b94c1f6a580b3a636cb190fac0e098493f8597ae8a84310426fddb4545\",\"dweb:/ipfs/QmeeKU6ASuKpK3w1auH1wS3eVsKtNN1nMuYEAXmhh316Ws\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xd6b90e604fb2eb2d641c7110c72440bf2dc999ec6ab8ff60f200e71ca75d1d90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b92d8ab83b21ff984b1f0d6d66897d5afb1f2052004cbcb133cea023e0ae468\",\"dweb:/ipfs/QmTarypkQrFp4UMjTh7Zzhz2nZLz5uPS4nJQtHDEuwBVe6\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x61321d2c86346045bf394885ee3afeecc65f9daad2694bc19110967588fd7b5d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1703b877203e0447ede72dcf73f1c4f2089b415bd1c44877904128a64fafed5b\",\"dweb:/ipfs/QmaZoYDo2FWtKcwCc9zuabU6zri8KV9xJrhU614d93sLid\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol\":{\"keccak256\":\"0xd918cca1b659f588a6d12d05fd7196179a8b1eac9133d7f77da7ef3133e13256\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c75d578f42e2e2e427b934e6c41cc759be2d0a52155868308e915328c8feb2b\",\"dweb:/ipfs/QmbFNHtWAoNhe82Hy6yKTePWJRczqzp1APSBfLS9XfAN6e\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8148c99452b6793ac9599abdc8bdaf4eeb47f34590beea8aa01089be14e2990c\",\"dweb:/ipfs/QmNdenmZ4EDfH9TuBas3pHeGuZvDNo2rsfgUj6ka8vuH37\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200200e3803806200200e833981810160405260208110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052508291506200010290506301ffc9a760e01b62000139565b6200010d81620001be565b6200011f636cdb3d1360e11b62000139565b620001316303a24d0760e21b62000139565b505062000283565b6001600160e01b0319808216141562000199576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b8051620001d3906003906020840190620001d7565b5050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200020f57600085556200025a565b82601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b5b808211156200026857600081556001016200026d565b611d7b80620002936000396000f3fe608060405234801561001057600080fd5b50600436106100a25760003560e01c80634e1273f411610076578063a22cb4651161005b578063a22cb465146105f3578063e985e9c51461062e578063f242432a14610669576100a2565b80634e1273f4146103ad578063731133e914610524576100a2565b8062fdd58e146100a757806301ffc9a7146100f25780630e89341c146101455780632eb2c2d6146101d7575b600080fd5b6100e0600480360360408110156100bd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610741565b60408051918252519081900360200190f35b6101316004803603602081101561010857600080fd5b50357fffffffff00000000000000000000000000000000000000000000000000000000166107e4565b604080519115158252519081900360200190f35b6101626004803603602081101561015b57600080fd5b503561081b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019c578181015183820152602001610184565b50505050905090810190601f1680156101c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103ab600480360360a08110156101ed57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184602083028401116401000000008311171561026257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156102b257600080fd5b8201836020820111156102c457600080fd5b803590602001918460208302840111640100000000831117156102e657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561033657600080fd5b82018360208201111561034857600080fd5b8035906020019184600183028401116401000000008311171561036a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506108d1945050505050565b005b6104d4600480360360408110156103c357600080fd5b8101906020810181356401000000008111156103de57600080fd5b8201836020820111156103f057600080fd5b8035906020019184602083028401116401000000008311171561041257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561046257600080fd5b82018360208201111561047457600080fd5b8035906020019184602083028401116401000000008311171561049657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9f945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105105781810151838201526020016104f8565b505050509050019250505060405180910390f35b6103ab6004803603608081101561053a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135916040820135919081019060808101606082013564010000000081111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460018302840111640100000000831117156105b257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e85945050505050565b6103ab6004803603604081101561060957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610e97565b6101316004803603604081101561064457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff2565b6103ab600480360360a081101561067f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106cc57600080fd5b8201836020820111156106de57600080fd5b8035906020019184600183028401116401000000008311171561070057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061102d945050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166107af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611ba5602b913960400191505060405180910390fd5b50600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b50505050509050919050565b815183511461092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611cfd6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610997576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c2a6025913960400191505060405180910390fd5b61099f61127a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e4856109df61127a565b610ff2565b610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611c4f6032913960400191505060405180910390fd5b6000610a4361127a565b9050610a53818787878787610c97565b60005b8451811015610b88576000858281518110610a6d57fe5b602002602001015190506000858381518110610a8557fe5b60200260200101519050610b0c816040518060600160405280602a8152602001611c81602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127f9092919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320939093558a1681522054610b509082611330565b600092835260016020818152604080862073ffffffffffffffffffffffffffffffffffffffff8d168752909152909320555001610a56565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610c35578181015183820152602001610c1d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610c74578181015183820152602001610c5c565b5050505090500194505050505060405180910390a4610c978187878787876113ab565b505050505050565b60608151835114610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611cd46029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015610d1557600080fd5b50604051908082528060200260200182016040528015610d3f578160200160208202803683370190505b50905060005b8451811015610e7d57600073ffffffffffffffffffffffffffffffffffffffff16858281518110610d7257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611bd06031913960400191505060405180910390fd5b60016000858381518110610df757fe5b602002602001015181526020019081526020016000206000868381518110610e1b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610e6a57fe5b6020908102919091010152600101610d45565b509392505050565b610e91848484846116dd565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff16610eb661127a565b73ffffffffffffffffffffffffffffffffffffffff161415610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611cab6029913960400191505060405180910390fd5b8060026000610f3061127a565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610f9f61127a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8416611099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c2a6025913960400191505060405180910390fd5b6110a161127a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110e157506110e1856109df61127a565b611136576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611c016029913960400191505060405180910390fd5b600061114061127a565b905061116081878761115188611826565b61115a88611826565b87610c97565b6111b4836040518060600160405280602a8152602001611c81602a9139600087815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d168452909152902054919061127f565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b811685529252808320939093558716815220546111f89084611330565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b168086529184529382902094909455805188815291820187905280518a8416938616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c9781878787878761186b565b335b90565b60008184841115611328576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112ed5781810151838201526020016112d5565b50505050905090810190601f16801561131a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156113a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6113ca8473ffffffffffffffffffffffffffffffffffffffff16611a5b565b15610c97578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561147f578181015183820152602001611467565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156114be5781810151838201526020016114a6565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156114fa5781810151838201526020016114e2565b50505050905090810190601f1680156115275780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561154c57600080fd5b505af192505050801561157157506040513d602081101561156c57600080fd5b505160015b61163a5761157d611a67565b8061158857506115e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156112ed5781810151838201526020016112d5565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180611b496034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611b7d6028913960400191505060405180910390fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416611749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611d256021913960400191505060405180910390fd5b600061175361127a565b90506117658160008761115188611826565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845290915290205461179f9084611330565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520959095558151898152928301889052815190948616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a461181f8160008787878761186b565b5050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061185a57fe5b602090810291909101015292915050565b61188a8473ffffffffffffffffffffffffffffffffffffffff16611a5b565b15610c97578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611940578181015183820152602001611928565b50505050905090810190601f16801561196d5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561199057600080fd5b505af19250505080156119b557506040513d60208110156119b057600080fd5b505160015b6119c15761157d611a67565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611b7d6028913960400191505060405180910390fd5b3b151590565b60e01c90565b600060443d1015611a775761127c565b600481823e6308c379a0611a8b8251611a61565b14611a955761127c565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715611ae3575050505061127c565b82840192508251915080821115611afd575050505061127c565b503d83016020828401011115611b155750505061127c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220c0dbf78e684d69acdc3a8c4b5d213f7b50265bc66355bacde16c7a115c6adf7264736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a25760003560e01c80634e1273f411610076578063a22cb4651161005b578063a22cb465146105f3578063e985e9c51461062e578063f242432a14610669576100a2565b80634e1273f4146103ad578063731133e914610524576100a2565b8062fdd58e146100a757806301ffc9a7146100f25780630e89341c146101455780632eb2c2d6146101d7575b600080fd5b6100e0600480360360408110156100bd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610741565b60408051918252519081900360200190f35b6101316004803603602081101561010857600080fd5b50357fffffffff00000000000000000000000000000000000000000000000000000000166107e4565b604080519115158252519081900360200190f35b6101626004803603602081101561015b57600080fd5b503561081b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019c578181015183820152602001610184565b50505050905090810190601f1680156101c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103ab600480360360a08110156101ed57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184602083028401116401000000008311171561026257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156102b257600080fd5b8201836020820111156102c457600080fd5b803590602001918460208302840111640100000000831117156102e657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561033657600080fd5b82018360208201111561034857600080fd5b8035906020019184600183028401116401000000008311171561036a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506108d1945050505050565b005b6104d4600480360360408110156103c357600080fd5b8101906020810181356401000000008111156103de57600080fd5b8201836020820111156103f057600080fd5b8035906020019184602083028401116401000000008311171561041257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561046257600080fd5b82018360208201111561047457600080fd5b8035906020019184602083028401116401000000008311171561049657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9f945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105105781810151838201526020016104f8565b505050509050019250505060405180910390f35b6103ab6004803603608081101561053a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135916040820135919081019060808101606082013564010000000081111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460018302840111640100000000831117156105b257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e85945050505050565b6103ab6004803603604081101561060957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610e97565b6101316004803603604081101561064457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff2565b6103ab600480360360a081101561067f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156106cc57600080fd5b8201836020820111156106de57600080fd5b8035906020019184600183028401116401000000008311171561070057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061102d945050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166107af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611ba5602b913960400191505060405180910390fd5b50600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b50505050509050919050565b815183511461092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611cfd6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610997576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c2a6025913960400191505060405180910390fd5b61099f61127a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e4856109df61127a565b610ff2565b610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611c4f6032913960400191505060405180910390fd5b6000610a4361127a565b9050610a53818787878787610c97565b60005b8451811015610b88576000858281518110610a6d57fe5b602002602001015190506000858381518110610a8557fe5b60200260200101519050610b0c816040518060600160405280602a8152602001611c81602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127f9092919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e811685529252808320939093558a1681522054610b509082611330565b600092835260016020818152604080862073ffffffffffffffffffffffffffffffffffffffff8d168752909152909320555001610a56565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610c35578181015183820152602001610c1d565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610c74578181015183820152602001610c5c565b5050505090500194505050505060405180910390a4610c978187878787876113ab565b505050505050565b60608151835114610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611cd46029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015610d1557600080fd5b50604051908082528060200260200182016040528015610d3f578160200160208202803683370190505b50905060005b8451811015610e7d57600073ffffffffffffffffffffffffffffffffffffffff16858281518110610d7257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611bd06031913960400191505060405180910390fd5b60016000858381518110610df757fe5b602002602001015181526020019081526020016000206000868381518110610e1b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610e6a57fe5b6020908102919091010152600101610d45565b509392505050565b610e91848484846116dd565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff16610eb661127a565b73ffffffffffffffffffffffffffffffffffffffff161415610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611cab6029913960400191505060405180910390fd5b8060026000610f3061127a565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610f9f61127a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8416611099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c2a6025913960400191505060405180910390fd5b6110a161127a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110e157506110e1856109df61127a565b611136576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611c016029913960400191505060405180910390fd5b600061114061127a565b905061116081878761115188611826565b61115a88611826565b87610c97565b6111b4836040518060600160405280602a8152602001611c81602a9139600087815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d168452909152902054919061127f565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b811685529252808320939093558716815220546111f89084611330565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b168086529184529382902094909455805188815291820187905280518a8416938616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c9781878787878761186b565b335b90565b60008184841115611328576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112ed5781810151838201526020016112d5565b50505050905090810190601f16801561131a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156113a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6113ca8473ffffffffffffffffffffffffffffffffffffffff16611a5b565b15610c97578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561147f578181015183820152602001611467565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156114be5781810151838201526020016114a6565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156114fa5781810151838201526020016114e2565b50505050905090810190601f1680156115275780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561154c57600080fd5b505af192505050801561157157506040513d602081101561156c57600080fd5b505160015b61163a5761157d611a67565b8061158857506115e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156112ed5781810151838201526020016112d5565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180611b496034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c8100000000000000000000000000000000000000000000000000000000146116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611b7d6028913960400191505060405180910390fd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416611749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611d256021913960400191505060405180910390fd5b600061175361127a565b90506117658160008761115188611826565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845290915290205461179f9084611330565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff808b16808652918452828520959095558151898152928301889052815190948616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a461181f8160008787878761186b565b5050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061185a57fe5b602090810291909101015292915050565b61188a8473ffffffffffffffffffffffffffffffffffffffff16611a5b565b15610c97578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611940578181015183820152602001611928565b50505050905090810190601f16801561196d5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561199057600080fd5b505af19250505080156119b557506040513d60208110156119b057600080fd5b505160015b6119c15761157d611a67565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180611b7d6028913960400191505060405180910390fd5b3b151590565b60e01c90565b600060443d1015611a775761127c565b600481823e6308c379a0611a8b8251611a61565b14611a955761127c565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715611ae3575050505061127c565b82840192508251915080821115611afd575050505061127c565b503d83016020828401011115611b155750505061127c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220c0dbf78e684d69acdc3a8c4b5d213f7b50265bc66355bacde16c7a115c6adf7264736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:992:39",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:39",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "71:31:39",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:27:39",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "89:3:39",
                        "type": "",
                        "value": "224"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "94:5:39"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "85:3:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "85:15:39"
                  },
                  "variableNames": [
                    {
                      "name": "newValue",
                      "nodeType": "YulIdentifier",
                      "src": "73:8:39"
                    }
                  ]
                }
              ]
            },
            "name": "shift_right_224_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:39",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "newValue",
                "nodeType": "YulTypedName",
                "src": "58:8:39",
                "type": ""
              }
            ],
            "src": "14:88:39"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "154:836:39",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "194:9:39",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "196:5:39"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [],
                        "functionName": {
                          "name": "returndatasize",
                          "nodeType": "YulIdentifier",
                          "src": "170:14:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "170:16:39"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "188:4:39",
                        "type": "",
                        "value": "0x44"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "167:2:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:26:39"
                  },
                  "nodeType": "YulIf",
                  "src": "164:2:39"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "227:3:39"
                      },
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "232:3:39"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "237:1:39",
                        "type": "",
                        "value": "4"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "212:14:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "212:27:39"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "212:27:39"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "312:9:39",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "314:5:39"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "ret",
                                    "nodeType": "YulIdentifier",
                                    "src": "292:3:39"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "286:5:39"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "286:10:39"
                              }
                            ],
                            "functionName": {
                              "name": "shift_right_224_unsigned",
                              "nodeType": "YulIdentifier",
                              "src": "261:24:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "261:36:39"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "299:10:39",
                            "type": "",
                            "value": "0x08c379a0"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "258:2:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "258:52:39"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "251:6:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "251:60:39"
                  },
                  "nodeType": "YulIf",
                  "src": "248:2:39"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "330:21:39",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "348:2:39",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "342:5:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "342:9:39"
                  },
                  "variables": [
                    {
                      "name": "data",
                      "nodeType": "YulTypedName",
                      "src": "334:4:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "375:4:39"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "381:1:39",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "388:14:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "388:16:39"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "406:66:39",
                            "type": "",
                            "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "384:3:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "384:89:39"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "360:14:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "360:114:39"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "360:114:39"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "483:25:39",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "503:4:39"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "497:5:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "497:11:39"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "487:6:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "517:26:39",
                  "value": {
                    "arguments": [],
                    "functionName": {
                      "name": "returndatasize",
                      "nodeType": "YulIdentifier",
                      "src": "527:14:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "527:16:39"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "521:2:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "552:28:39",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "562:18:39",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "556:2:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "638:9:39",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "640:5:39"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "598:6:39"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "606:2:39"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "595:2:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "595:14:39"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "618:6:39"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "626:4:39",
                                "type": "",
                                "value": "0x24"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "614:3:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "614:17:39"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "633:2:39"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "611:2:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "611:25:39"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "592:2:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "592:45:39"
                  },
                  "nodeType": "YulIf",
                  "src": "589:2:39"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "656:28:39",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "671:4:39"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "677:6:39"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "667:3:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "667:17:39"
                  },
                  "variables": [
                    {
                      "name": "msg",
                      "nodeType": "YulTypedName",
                      "src": "660:3:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "693:24:39",
                  "value": {
                    "arguments": [
                      {
                        "name": "msg",
                        "nodeType": "YulIdentifier",
                        "src": "713:3:39"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "707:5:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "707:10:39"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "697:6:39",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "744:9:39",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "746:5:39"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "732:6:39"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "740:2:39"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "729:2:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "729:14:39"
                  },
                  "nodeType": "YulIf",
                  "src": "726:2:39"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "826:9:39",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "828:5:39"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "776:3:39"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "781:6:39"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "772:3:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "772:16:39"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "790:4:39",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "768:3:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "768:27:39"
                      },
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nodeType": "YulIdentifier",
                            "src": "801:4:39"
                          },
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "807:14:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "807:16:39"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "797:3:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "797:27:39"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "765:2:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "765:60:39"
                  },
                  "nodeType": "YulIf",
                  "src": "762:2:39"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "851:2:39",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "863:3:39"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "876:6:39"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "884:2:39",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "872:3:39"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "872:15:39"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "889:66:39",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "868:3:39"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "868:88:39"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "859:3:39"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "859:98:39"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "959:4:39",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "855:3:39"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "855:109:39"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "844:6:39"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "844:121:39"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "844:121:39"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "974:10:39",
                  "value": {
                    "name": "msg",
                    "nodeType": "YulIdentifier",
                    "src": "981:3:39"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "974:3:39"
                    }
                  ]
                }
              ]
            },
            "name": "try_decode_error_message",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "146:3:39",
                "type": ""
              }
            ],
            "src": "107:883:39"
          }
        ]
      },
      "contents": "{\n    { }\n    function shift_right_224_unsigned(value) -> newValue\n    { newValue := shr(224, value) }\n    function try_decode_error_message() -> ret\n    {\n        if lt(returndatasize(), 0x44) { leave }\n        returndatacopy(ret, ret, 4)\n        if iszero(eq(shift_right_224_unsigned(mload(ret)), 0x08c379a0)) { leave }\n        let data := mload(64)\n        returndatacopy(data, 4, add(returndatasize(), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc))\n        let offset := mload(data)\n        let _1 := returndatasize()\n        let _2 := 0xffffffffffffffff\n        if or(gt(offset, _2), gt(add(offset, 0x24), _1)) { leave }\n        let msg := add(data, offset)\n        let length := mload(msg)\n        if gt(length, _2) { leave }\n        if gt(add(add(msg, length), 0x20), add(data, returndatasize())) { leave }\n        mstore(64, add(add(msg, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20))\n        ret := msg\n    }\n}",
      "id": 39,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "206:217:15:-:0;;;244:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;244:49:15;;;;;;;;;;-1:-1:-1;244:49:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;244:49:15;;-1:-1:-1;284:4:15;;-1:-1:-1;768:40:18;;-1:-1:-1;;;;768:18:18;:40::i;:::-;2199:13:5;2207:4;2199:7;:13::i;:::-;2301:41;-1:-1:-1;;;2301:18:5;:41::i;:::-;2442:54;-1:-1:-1;;;2442:18:5;:54::i;:::-;2156:347;244:49:15;206:217;;1499:198:18;-1:-1:-1;;;;;;1582:25:18;;;;;1574:66;;;;;-1:-1:-1;;;1574:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1650:33:18;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1650:40:18;1686:4;1650:40;;;1499:198::o;7807:86:5:-;7873:13;;;;:4;;:13;;;;;:::i;:::-;;7807:86;:::o;206:217:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;206:217:15;;;-1:-1:-1;206:217:15;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "206:217:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:228:5;;;;;;;;;;;;;;;;-1:-1:-1;3141:228:5;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;965:140:18;;;;;;;;;;;;;;;;-1:-1:-1;965:140:18;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2902:97:5;;;;;;;;;;;;;;;;-1:-1:-1;2902:97:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5800:1184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5800:1184:5;;;;;;;;-1:-1:-1;5800:1184:5;;-1:-1:-1;;5800:1184:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5800:1184:5;;;;;;;;-1:-1:-1;5800:1184:5;;-1:-1:-1;;5800:1184:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5800:1184:5;;-1:-1:-1;5800:1184:5;;-1:-1:-1;;;;;5800:1184:5:i;:::-;;3526:631;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:5;;;;;;;;-1:-1:-1;3526:631:5;;-1:-1:-1;;3526:631:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:5;;-1:-1:-1;3526:631:5;;-1:-1:-1;;;;;3526:631:5:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;299:122:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;299:122:15;;-1:-1:-1;299:122:15;;-1:-1:-1;;;;;299:122:15:i;4225:306:5:-;;;;;;;;;;;;;;;;-1:-1:-1;4225:306:5;;;;;;;;;;;:::i;4598:166::-;;;;;;;;;;;;;;;;-1:-1:-1;4598:166:5;;;;;;;;;;;:::i;4831:897::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4831:897:5;;-1:-1:-1;4831:897:5;;-1:-1:-1;;;;;4831:897:5:i;3141:228::-;3227:7;3254:21;;;3246:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3340:13:5;;;;:9;:13;;;;;;;;:22;;;;;;;;;;;;;3141:228::o;965:140:18:-;1065:33;;1042:4;1065:33;;;;;;;;;;;;;;965:140::o;2902:97:5:-;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2956:13;;2981:11;;2988:4;;2981:11;;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2902:97;;;:::o;5800:1184::-;6054:7;:14;6040:3;:10;:28;6032:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6131:16;;;6123:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6228:12;:10;:12::i;:::-;6220:20;;:4;:20;;;:60;;;;6244:36;6261:4;6267:12;:10;:12::i;:::-;6244:16;:36::i;:::-;6199:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6367:16;6386:12;:10;:12::i;:::-;6367:31;;6409:60;6430:8;6440:4;6446:2;6450:3;6455:7;6464:4;6409:20;:60::i;:::-;6485:9;6480:349;6504:3;:10;6500:1;:14;6480:349;;;6535:10;6548:3;6552:1;6548:6;;;;;;;;;;;;;;6535:19;;6568:14;6585:7;6593:1;6585:10;;;;;;;;;;;;;;6568:27;;6632:123;6673:6;6632:123;;;;;;;;;;;;;;;;;:9;:13;6642:2;6632:13;;;;;;;;;;;:19;6646:4;6632:19;;;;;;;;;;;;;;;;:23;;:123;;;;;:::i;:::-;6610:13;;;;:9;:13;;;;;;;;:19;;;;;;;;;;;:145;;;;6789:17;;;;;;:29;;6811:6;6789:21;:29::i;:::-;6769:13;;;;:9;:13;;;;;;;;:17;;;;;;;;;;;:49;-1:-1:-1;6516:3:5;6480:349;;;;6874:2;6844:47;;6868:4;6844:47;;6858:8;6844:47;;;6878:3;6883:7;6844:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6902:75;6938:8;6948:4;6954:2;6958:3;6963:7;6972:4;6902:35;:75::i;:::-;5800:1184;;;;;;:::o;3526:631::-;3699:16;3758:3;:10;3739:8;:15;:29;3731:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3825:30;3872:8;:15;3858:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3858:30:5;;3825:63;;3904:9;3899:221;3923:8;:15;3919:1;:19;3899:221;;;3990:1;3967:25;;:8;3976:1;3967:11;;;;;;;;;;;;;;:25;;;;3959:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4079:9;:17;4089:3;4093:1;4089:6;;;;;;;;;;;;;;4079:17;;;;;;;;;;;:30;4097:8;4106:1;4097:11;;;;;;;;;;;;;;4079:30;;;;;;;;;;;;;;;;4060:13;4074:1;4060:16;;;;;;;;;;;;;;;;;:49;3940:3;;3899:221;;;-1:-1:-1;4137:13:5;3526:631;-1:-1:-1;;;3526:631:5:o;299:122:15:-;388:26;394:2;398;402:5;409:4;388:5;:26::i;:::-;299:122;;;;:::o;4225:306:5:-;4343:8;4327:24;;:12;:10;:12::i;:::-;:24;;;;4319:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4453:8;4408:18;:32;4427:12;:10;:12::i;:::-;4408:32;;;;;;;;;;;;;;;;;;-1:-1:-1;4408:32:5;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;4491:12;:10;:12::i;:::-;4476:48;;;4515:8;4476:48;;;;;;;;;;;;;;;;;;;;4225:306;;:::o;4598:166::-;4720:27;;;;4697:4;4720:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;4598:166::o;4831:897::-;5046:16;;;5038:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5143:12;:10;:12::i;:::-;5135:20;;:4;:20;;;:60;;;;5159:36;5176:4;5182:12;:10;:12::i;5159:36::-;5114:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5273:16;5292:12;:10;:12::i;:::-;5273:31;;5315:96;5336:8;5346:4;5352:2;5356:21;5374:2;5356:17;:21::i;:::-;5379:25;5397:6;5379:17;:25::i;:::-;5406:4;5315:20;:96::i;:::-;5444:77;5468:6;5444:77;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;:19;;;;;;;;;;;;:77;:23;:77::i;:::-;5422:13;;;;:9;:13;;;;;;;;:19;;;;;;;;;;;:99;;;;5551:17;;;;;;:29;;5573:6;5551:21;:29::i;:::-;5531:13;;;;:9;:13;;;;;;;;:17;;;;;;;;;;;;;;:49;;;;5596:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5653:68;5684:8;5694:4;5700:2;5704;5708:6;5716:4;5653:30;:68::i;598:104:17:-;685:10;598:104;;:::o;1754:187:20:-;1840:7;1875:12;1867:6;;;;1859:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1910:5:20;;;1754:187::o;882:176::-;940:7;971:5;;;994:6;;;;986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:1;882:176;-1:-1:-1;;;882:176:20:o;13494:779:5:-;13739:15;:2;:13;;;:15::i;:::-;13735:532;;;13791:2;13774:43;;;13818:8;13828:4;13834:3;13839:7;13848:4;13774:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13774:79:5;;;13770:487;;;;:::i;:::-;;;;;;;;14126:14;;;;;;;;;;;;;;;;;;;;14133:6;;14126:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;14180:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;13902:64;;;13914:52;13902:64;13898:161;;13990:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13898:161;13854:219;13494:779;;;;;;:::o;8276:572::-;8390:21;;;8382:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8460:16;8479:12;:10;:12::i;:::-;8460:31;;8502:107;8523:8;8541:1;8545:7;8554:21;8572:2;8554:17;:21::i;8502:107::-;8645:13;;;;:9;:13;;;;;;;;:22;;;;;;;;;;;:34;;8672:6;8645:26;:34::i;:::-;8620:13;;;;:9;:13;;;;;;;;:22;;;;;;;;;;;;;:59;;;;8694:57;;;;;;;;;;;;;8620:22;;8694:57;;;;;;;;;;;;8762:79;8793:8;8811:1;8815:7;8824:2;8828:6;8836:4;8762:30;:79::i;:::-;8276:572;;;;;:::o;14279:193::-;14398:16;;;14412:1;14398:16;;;;;;;;;14345;;14373:22;;14398:16;;;;;;;;;;;;-1:-1:-1;14398:16:5;14373:41;;14435:7;14424:5;14430:1;14424:8;;;;;;;;;;;;;;;;;:18;14460:5;14279:193;-1:-1:-1;;14279:193:5:o;12746:742::-;12966:15;:2;:13;;;:15::i;:::-;12962:520;;;13018:2;13001:38;;;13040:8;13050:4;13056:2;13060:6;13068:4;13001:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13001:72:5;;;12997:475;;;;:::i;:::-;13122:59;;;13134:47;13122:59;13118:156;;13205:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:413:34;1086:20;1124:8;;;726:413::o;14:88:39:-;89:3;85:15;;71:31::o;107:883::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;406:66;388:16;384:89;381:1;375:4;360:114;503:4;497:11;527:16;562:18;633:2;626:4;618:6;614:17;611:25;606:2;598:6;595:14;592:45;589:2;;;640:5;;;;;;589:2;677:6;671:4;667:17;656:28;;713:3;707:10;693:24;;740:2;732:6;729:14;726:2;;;746:5;;;;;;726:2;;807:16;801:4;797:27;790:4;781:6;776:3;772:16;768:27;765:60;762:2;;;828:5;;;;;762:2;884;872:15;889:66;868:88;859:98;;959:4;855:109;851:2;844:121;863:3;-1:-1:-1;;154:836:39;:::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-or-later\npragma solidity ^0.7.1;\n\nimport { ERC1155 } from \"../ERC1155/ERC1155.sol\";\n\n/**\n * @title ERC1155Mock\n * This mock just allows minting for testing purposes\n */\ncontract ERC1155Mock is ERC1155 {\n    constructor(string memory _uri) ERC1155(_uri) { }\n\n    function mint(address to, uint256 id, uint256 value, bytes memory data) public {\n        _mint(to, id, value, data);\n    }\n}\n",
  "sourcePath": "/home/user/Projects/future-contracts/contracts/test/ERC1155Mock.sol",
  "ast": {
    "absolutePath": "/home/user/Projects/future-contracts/contracts/test/ERC1155Mock.sol",
    "exportedSymbols": {
      "ERC1155": [
        3296
      ],
      "ERC1155Mock": [
        4270
      ]
    },
    "id": 4271,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4236,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:15"
      },
      {
        "absolutePath": "/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155.sol",
        "file": "../ERC1155/ERC1155.sol",
        "id": 4238,
        "nodeType": "ImportDirective",
        "scope": 4271,
        "sourceUnit": 3297,
        "src": "71:49:15",
        "symbolAliases": [
          {
            "foreign": {
              "id": 4237,
              "name": "ERC1155",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "80:7:15",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 4240,
              "name": "ERC1155",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3296,
              "src": "230:7:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC1155_$3296",
                "typeString": "contract ERC1155"
              }
            },
            "id": 4241,
            "nodeType": "InheritanceSpecifier",
            "src": "230:7:15"
          }
        ],
        "contractDependencies": [
          3296,
          4324,
          4381,
          4393,
          4790,
          4805
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4239,
          "nodeType": "StructuredDocumentation",
          "src": "122:83:15",
          "text": " @title ERC1155Mock\n This mock just allows minting for testing purposes"
        },
        "fullyImplemented": true,
        "id": 4270,
        "linearizedBaseContracts": [
          4270,
          3296,
          4805,
          4790,
          4381,
          4393,
          4324
        ],
        "name": "ERC1155Mock",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4249,
              "nodeType": "Block",
              "src": "290:3:15",
              "statements": []
            },
            "id": 4250,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 4246,
                    "name": "_uri",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4243,
                    "src": "284:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 4247,
                "modifierName": {
                  "id": 4245,
                  "name": "ERC1155",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3296,
                  "src": "276:7:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ERC1155_$3296_$",
                    "typeString": "type(contract ERC1155)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "276:13:15"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4243,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 4250,
                  "src": "256:18:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4242,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "256:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "255:20:15"
            },
            "returnParameters": {
              "id": 4248,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "290:0:15"
            },
            "scope": 4270,
            "src": "244:49:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4268,
              "nodeType": "Block",
              "src": "378:43:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4262,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4252,
                        "src": "394:2:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4263,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4254,
                        "src": "398:2:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4264,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4256,
                        "src": "402:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4265,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4258,
                        "src": "409:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4261,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2844,
                      "src": "388:5:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 4266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "388:26:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4267,
                  "nodeType": "ExpressionStatement",
                  "src": "388:26:15"
                }
              ]
            },
            "functionSelector": "731133e9",
            "id": 4269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4252,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "313:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4251,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "313:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4254,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "325:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "325:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4256,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "337:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "337:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4258,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "352:17:15",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4257,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "352:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "312:58:15"
            },
            "returnParameters": {
              "id": 4260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "378:0:15"
            },
            "scope": 4270,
            "src": "299:122:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 4271,
        "src": "206:217:15"
      }
    ],
    "src": "46:378:15"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/user/Projects/future-contracts/contracts/test/ERC1155Mock.sol",
      "exportedSymbols": {
        "ERC1155": [
          3296
        ],
        "ERC1155Mock": [
          4270
        ]
      },
      "license": "LGPL-3.0-or-later"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".1"
          ]
        },
        "id": 4236,
        "name": "PragmaDirective",
        "src": "46:23:15"
      },
      {
        "attributes": {
          "SourceUnit": 3297,
          "absolutePath": "/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155.sol",
          "file": "../ERC1155/ERC1155.sol",
          "scope": 4271,
          "symbolAliases": [
            {
              "foreign": {
                "attributes": {
                  "overloadedDeclarations": [
                    null
                  ],
                  "value": "ERC1155"
                },
                "id": 4237,
                "name": "Identifier",
                "src": "80:7:15"
              }
            }
          ],
          "unitAlias": ""
        },
        "id": 4238,
        "name": "ImportDirective",
        "src": "71:49:15"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            3296,
            4324,
            4381,
            4393,
            4790,
            4805
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4270,
            3296,
            4805,
            4790,
            4381,
            4393,
            4324
          ],
          "name": "ERC1155Mock",
          "scope": 4271
        },
        "children": [
          {
            "attributes": {
              "text": " @title ERC1155Mock\n This mock just allows minting for testing purposes"
            },
            "id": 4239,
            "name": "StructuredDocumentation",
            "src": "122:83:15"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "ERC1155",
                  "referencedDeclaration": 3296,
                  "type": "contract ERC1155"
                },
                "id": 4240,
                "name": "UserDefinedTypeName",
                "src": "230:7:15"
              }
            ],
            "id": 4241,
            "name": "InheritanceSpecifier",
            "src": "230:7:15"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 4270,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_uri",
                      "scope": 4250,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 4242,
                        "name": "ElementaryTypeName",
                        "src": "256:6:15"
                      }
                    ],
                    "id": 4243,
                    "name": "VariableDeclaration",
                    "src": "256:18:15"
                  }
                ],
                "id": 4244,
                "name": "ParameterList",
                "src": "255:20:15"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4248,
                "name": "ParameterList",
                "src": "290:0:15"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3296,
                      "type": "type(contract ERC1155)",
                      "value": "ERC1155"
                    },
                    "id": 4245,
                    "name": "Identifier",
                    "src": "276:7:15"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4243,
                      "type": "string memory",
                      "value": "_uri"
                    },
                    "id": 4246,
                    "name": "Identifier",
                    "src": "284:4:15"
                  }
                ],
                "id": 4247,
                "name": "ModifierInvocation",
                "src": "276:13:15"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 4249,
                "name": "Block",
                "src": "290:3:15"
              }
            ],
            "id": 4250,
            "name": "FunctionDefinition",
            "src": "244:49:15"
          },
          {
            "attributes": {
              "functionSelector": "731133e9",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "mint",
              "scope": 4270,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4251,
                        "name": "ElementaryTypeName",
                        "src": "313:7:15"
                      }
                    ],
                    "id": 4252,
                    "name": "VariableDeclaration",
                    "src": "313:10:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "id",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4253,
                        "name": "ElementaryTypeName",
                        "src": "325:7:15"
                      }
                    ],
                    "id": 4254,
                    "name": "VariableDeclaration",
                    "src": "325:10:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "value",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4255,
                        "name": "ElementaryTypeName",
                        "src": "337:7:15"
                      }
                    ],
                    "id": 4256,
                    "name": "VariableDeclaration",
                    "src": "337:13:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4257,
                        "name": "ElementaryTypeName",
                        "src": "352:5:15"
                      }
                    ],
                    "id": 4258,
                    "name": "VariableDeclaration",
                    "src": "352:17:15"
                  }
                ],
                "id": 4259,
                "name": "ParameterList",
                "src": "312:58:15"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4260,
                "name": "ParameterList",
                "src": "378:0:15"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "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"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2844,
                              "type": "function (address,uint256,uint256,bytes memory)",
                              "value": "_mint"
                            },
                            "id": 4261,
                            "name": "Identifier",
                            "src": "388:5:15"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4252,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 4262,
                            "name": "Identifier",
                            "src": "394:2:15"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4254,
                              "type": "uint256",
                              "value": "id"
                            },
                            "id": 4263,
                            "name": "Identifier",
                            "src": "398:2:15"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4256,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 4264,
                            "name": "Identifier",
                            "src": "402:5:15"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4258,
                              "type": "bytes memory",
                              "value": "data"
                            },
                            "id": 4265,
                            "name": "Identifier",
                            "src": "409:4:15"
                          }
                        ],
                        "id": 4266,
                        "name": "FunctionCall",
                        "src": "388:26:15"
                      }
                    ],
                    "id": 4267,
                    "name": "ExpressionStatement",
                    "src": "388:26:15"
                  }
                ],
                "id": 4268,
                "name": "Block",
                "src": "378:43:15"
              }
            ],
            "id": 4269,
            "name": "FunctionDefinition",
            "src": "299:122:15"
          }
        ],
        "id": 4270,
        "name": "ContractDefinition",
        "src": "206:217:15"
      }
    ],
    "id": 4271,
    "name": "SourceUnit",
    "src": "46:378:15"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-06-03T23:56:22.324Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "balanceOf(address,uint256)": {
        "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address."
      },
      "balanceOfBatch(address[],uint256[])": {
        "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length."
      },
      "isApprovedForAll(address,address)": {
        "details": "See {IERC1155-isApprovedForAll}."
      },
      "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
        "details": "See {IERC1155-safeBatchTransferFrom}."
      },
      "safeTransferFrom(address,address,uint256,uint256,bytes)": {
        "details": "See {IERC1155-safeTransferFrom}."
      },
      "setApprovalForAll(address,bool)": {
        "details": "See {IERC1155-setApprovalForAll}."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas."
      },
      "uri(uint256)": {
        "details": "See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\{id\\}` substring with the actual token type ID."
      }
    },
    "title": "ERC1155Mock This mock just allows minting for testing purposes",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}