@gnosis.pm/conditional-tokens-contracts
Version:
Collection of smart contracts for the conditional tokens
1 lines • 52.9 kB
JSON
{"contractName":"ERC1155","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"ids","type":"uint256[]"},{"indexed":false,"name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Get the specified address' balance for token with specified ID.\",\"params\":{\"id\":\"ID of the token\",\"owner\":\"The address of the token holder\"},\"return\":\"The owner's balance of the token type requested\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"Get the balance of multiple account/token pairs\",\"params\":{\"ids\":\"IDs of the tokens\",\"owners\":\"The addresses of the token holders\"},\"return\":\"Balances for each owner and token id pair\"},\"isApprovedForAll(address,address)\":{\"params\":{\"operator\":\"Address of authorized operator\",\"owner\":\"The owner of the Tokens\"},\"return\":\"True if the operator is approved, false if not\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155BatchReceived` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"ids\":\"IDs of each token type\",\"to\":\"Target address\",\"values\":\"Transfer amounts per token type\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers `value` amount of an `id` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"id\":\"ID of the token type\",\"to\":\"Target address\",\"value\":\"Transfer amount\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf\",\"params\":{\"approved\":\"representing the status of the approval to be set\",\"operator\":\"address to set the approval\"}},\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}},\"title\":\"Standard ERC1155 token\"},\"userdoc\":{\"methods\":{\"isApprovedForAll(address,address)\":{\"notice\":\"Queries the approval status of an operator for a given owner.\"}}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":\"ERC1155\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0xd8e6583f45a98380ff10a5656a7ae7ba6a275e0d051043e5842f0d541abd7caa\",\"urls\":[\"bzzr://978cc82d056d10d8cc14b02f35801b10c0c2f87b0adbf6c41bbd622e20ab8cee\",\"dweb:/ipfs/QmYWqCK6moph6oeBEUc1nDaGz4GRdGXmykwKD5rykVbhcU\"]},\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzzr://f7f6da60a184233fd666ac44e6fb2bd51ca6ebdc4867a310d368049aa4e62786\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}","bytecode":"0x608060405234801561001057600080fd5b506100437f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b6100757fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b610148565b7fffffffff00000000000000000000000000000000000000000000000000000000808216141561010b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b611239806101576000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611083602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e81526020018061116e602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cdc90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d3d92505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e815260200180611140602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b815260040180806020018281038252603481526020018061110c6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cdc565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f1a92505050565b505050505050565b600082821115610cd6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610d36576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610d4f846001600160a01b031661107c565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610ddb578181015183820152602001610dc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610e1a578181015183820152602001610e02565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e56578181015183820152602001610e3e565b50505050905090810190601f168015610e835780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d6020811015610ed257600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806110d66036913960400191505060405180910390fd5b610f2c846001600160a01b031661107c565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610fba578181015183820152602001610fa2565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806111d46031913960400191505060405180910390fd5b3b15159056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a7230582002ae027ab626f56c02ce5d2e8c54bc42f5b888dfb0c10facd47509c02241597f64736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611083602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e81526020018061116e602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cdc90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d3d92505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e815260200180611140602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b815260040180806020018281038252603481526020018061110c6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cdc565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f1a92505050565b505050505050565b600082821115610cd6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610d36576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610d4f846001600160a01b031661107c565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610ddb578181015183820152602001610dc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610e1a578181015183820152602001610e02565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e56578181015183820152602001610e3e565b50505050905090810190601f168015610e835780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d6020811015610ed257600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806110d66036913960400191505060405180910390fd5b610f2c846001600160a01b031661107c565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610fba578181015183820152602001610fa2565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806111d46031913960400191505060405180910390fd5b3b15159056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a7230582002ae027ab626f56c02ce5d2e8c54bc42f5b888dfb0c10facd47509c02241597f64736f6c634300050a0032","sourceMap":"497:9626:2:-;;;851:380;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;718:40:7;737:20;-1:-1:-1;;;;;718:18:7;:40;:::i;:::-;894:330:2;926:288;-1:-1:-1;;;;;894:18:2;:330;:::i;:::-;497:9626;;1442:190:7;1517:25;;;;;;1509:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1585:33;;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1585:40:7;1621:4;1585:40;;;1442:190::o;497:9626:2:-;;;;;;;","deployedSourceMap":"497:9626:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;497:9626:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:205;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1481:205:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;915:133:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;915:133:7;-1:-1:-1;;;;;;915:133:7;;:::i;:::-;;;;;;;;;;;;;;;;;;5265:971:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;5265:971:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5265:971:2;;-1:-1:-1;5265:971:2;-1:-1:-1;5265:971:2;:::i;:::-;;1921:594;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1921:594:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;;;;;;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;1921:594:2:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1921:594:2;;;;;;;;;;;;;;;;;2804:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2804:198:2;;;;;;;;;;:::i;3279:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3279:147:2;;;;;;;;;;:::i;3980:696::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3980:696:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3980:696:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3980:696:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3980:696:2;;-1:-1:-1;3980:696:2;-1:-1:-1;3980:696:2;:::i;1481:205::-;1548:7;-1:-1:-1;;;;;1575:19:2;;1567:75;;;;-1:-1:-1;;;1567:75:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1659:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;1659:20:2;;;;;;;;;;;;1481:205::o;915:133:7:-;-1:-1:-1;;;;;;1008:33:7;985:4;1008:33;;;;;;;;;;;;;;915:133::o;5265:971:2:-;5479:27;;;5471:86;;;;-1:-1:-1;;;5471:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5575:16:2;;5567:69;;;;-1:-1:-1;;;5567:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5667:18:2;;5675:10;5667:18;;:66;;-1:-1:-1;;;;;;5689:24:2;;;;;;:18;:24;;;;;;;;5714:10;5689:36;;;;;;;;;;:44;;:36;:44;5667:66;5646:169;;;;-1:-1:-1;;;5646:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5831:9;5826:253;5846:14;;;5826:253;;;5881:10;5894:3;;5898:1;5894:6;;;;;;;;;;;;;5881:19;;5914:13;5930:6;;5937:1;5930:9;;;;;;;;;;;;;5914:25;;5976:30;6000:5;5976:9;:13;5986:2;5976:13;;;;;;;;;;;:19;5990:4;-1:-1:-1;;;;;5976:19:2;-1:-1:-1;;;;;5976:19:2;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;5954:9;:13;5964:2;5954:13;;;;;;;;;;;:19;5968:4;-1:-1:-1;;;;;5954:19:2;-1:-1:-1;;;;;5954:19:2;;;;;;;;;;;;:52;;;;6040:28;6050:9;:13;6060:2;6050:13;;;;;;;;;;;:17;6064:2;-1:-1:-1;;;;;6050:17:2;-1:-1:-1;;;;;6050:17:2;;;;;;;;;;;;;6040:5;:9;;:28;;;;:::i;:::-;6020:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6020:17:2;;;;;;;;;;:48;-1:-1:-1;5862:3:2;5826:253;;;;6126:2;-1:-1:-1;;;;;6094:48:2;6120:4;-1:-1:-1;;;;;6094:48:2;6108:10;-1:-1:-1;;;;;6094:48:2;;6130:3;;6135:6;;6094:48;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;6094:48:2;;;;;;;;;;;;;-1:-1:-1;6094:48:2;;;;;;;1:33:-1;99:1;81:16;;;74:27;6094:48:2;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6094:48:2;;;;-1:-1:-1;6094:48:2;;-1:-1:-1;;;;;;;6094:48:2;6153:76;6189:10;6201:4;6207:2;6211:3;;6153:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6216:6:2;;-1:-1:-1;6216:6:2;;;;6153:76;;;6216:6;;6153:76;6216:6;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;137:4:-1;6153:76:2;;;;;;;;;;;;;;;;;;-1:-1:-1;6224:4:2;;-1:-1:-1;6224:4:2;;;;6153:76;;6224:4;;;;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6153:35:2;;-1:-1:-1;;;6153:76:2:i;:::-;5265:971;;;;;;;;:::o;1921:594::-;2059:16;2116:3;:10;2099:6;:13;:27;2091:86;;;;-1:-1:-1;;;2091:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:30;2235:6;:13;2221:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2221:28:2;-1:-1:-1;2188:61:2;-1:-1:-1;2265:9:2;2260:218;2284:6;:13;2280:1;:17;2260:218;;;2347:1;-1:-1:-1;;;;;2326:23:2;:6;2333:1;2326:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:23:2;;;2318:88;;;;-1:-1:-1;;;2318:88:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:9;:17;2449:3;2453:1;2449:6;;;;;;;;;;;;;;2439:17;;;;;;;;;;;:28;2457:6;2464:1;2457:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2439:28:2;-1:-1:-1;;;;;2439:28:2;;;;;;;;;;;;;2420:13;2434:1;2420:16;;;;;;;;;;;;;;;;;:47;2299:3;;2260:218;;;-1:-1:-1;2495:13:2;1921:594;-1:-1:-1;;;1921:594:2:o;2804:198::-;2902:10;2883:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;2883:40:2;;;;;;;;;;;;:51;;-1:-1:-1;;2883:51:2;;;;;;;;;;2949:46;;;;;;;2883:40;;2902:10;2949:46;;;;;;;;;;;2804:198;;:::o;3279:147::-;-1:-1:-1;;;;;3384:25:2;;;3361:4;3384:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3279:147::o;3980:696::-;-1:-1:-1;;;;;4165:16:2;;4157:69;;;;-1:-1:-1;;;4157:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4257:18:2;;4265:10;4257:18;;:66;;-1:-1:-1;;;;;;4279:24:2;;;;;;:18;:24;;;;;;;;4304:10;4279:36;;;;;;;;;;:44;;:36;:44;4257:66;4236:169;;;;-1:-1:-1;;;4236:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4438:19:2;;;;;;;;;;:30;;4462:5;4438:30;:23;:30;:::i;:::-;4416:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4416:19:2;;;;;;;;;;:52;;;;4508:17;;;;;;4498:28;;:5;;:9;:28::i;:::-;4478:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4478:17:2;;;;;;;;;;;;;:48;;;;4542:47;;;;;;;;;;;;;;;;;4557:10;;4542:47;;;;;;;;;4600:69;4631:10;4643:4;4649:2;4653;4657:5;4664:4;;4600:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4600:30:2;;-1:-1:-1;;;4600:69:2:i;:::-;3980:696;;;;;;:::o;1274:179:9:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:9;;;1274:179::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:9:o;9573:548:2:-;9816:15;:2;-1:-1:-1;;;;;9816:13:2;;:15::i;:::-;9813:302;;;9872:83;;-1:-1:-1;;;9872:83:2;;;-1:-1:-1;;;;;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:57;;:48;;;;;;9921:8;;9931:4;;9937:3;;9942:6;;9950:4;;9872:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9872:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9872:83:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9872:83:2;-1:-1:-1;;;;;;9872:144:2;;9847:257;;;;-1:-1:-1;;;9847:257:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9041:526;9259:15;:2;-1:-1:-1;;;;;9259:13:2;;:15::i;:::-;9256:305;;;9315:76;;-1:-1:-1;;;9315:76:2;;;-1:-1:-1;;;;;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9415:52;;:43;;;;;;9359:8;;9369:4;;9375:2;;9379:5;;9386:4;;9315:76;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9315:76:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9315:76:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9315:76:2;-1:-1:-1;;;;;;9315:152:2;;9290:260;;;;-1:-1:-1;;;9290:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:413:11;902:20;940:8;;;542:413::o","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155TokenReceiver.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/utils/Address.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\n/**\n * @title Standard ERC1155 token\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n */\ncontract ERC1155 is ERC165, IERC1155\n{\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to owner balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n constructor()\n public\n {\n _registerInterface(\n ERC1155(0).safeTransferFrom.selector ^\n ERC1155(0).safeBatchTransferFrom.selector ^\n ERC1155(0).balanceOf.selector ^\n ERC1155(0).balanceOfBatch.selector ^\n ERC1155(0).setApprovalForAll.selector ^\n ERC1155(0).isApprovedForAll.selector\n );\n }\n\n /**\n @dev Get the specified address' balance for token with specified ID.\n @param owner The address of the token holder\n @param id ID of the token\n @return The owner's balance of the token type requested\n */\n function balanceOf(address owner, uint256 id) public view returns (uint256) {\n require(owner != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][owner];\n }\n\n /**\n @dev Get the balance of multiple account/token pairs\n @param owners The addresses of the token holders\n @param ids IDs of the tokens\n @return Balances for each owner and token id pair\n */\n function balanceOfBatch(\n address[] memory owners,\n uint256[] memory ids\n )\n public\n view\n returns (uint256[] memory)\n {\n require(owners.length == ids.length, \"ERC1155: owners and IDs must have same lengths\");\n\n uint256[] memory batchBalances = new uint256[](owners.length);\n\n for (uint256 i = 0; i < owners.length; ++i) {\n require(owners[i] != address(0), \"ERC1155: some address in batch balance query is zero\");\n batchBalances[i] = _balances[ids[i]][owners[i]];\n }\n\n return batchBalances;\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * An operator is allowed to transfer all tokens of the sender on their behalf\n * @param operator address to set the approval\n * @param approved representing the status of the approval to be set\n */\n function setApprovalForAll(address operator, bool approved) external {\n _operatorApprovals[msg.sender][operator] = approved;\n emit ApprovalForAll(msg.sender, operator, approved);\n }\n\n /**\n @notice Queries the approval status of an operator for a given owner.\n @param owner The owner of the Tokens\n @param operator Address of authorized operator\n @return True if the operator is approved, false if not\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n @dev Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\n Caller must be approved to manage the tokens being transferred out of the `from` account.\n If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param id ID of the token type\n @param value Transfer amount\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n {\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n\n emit TransferSingle(msg.sender, from, to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, value, data);\n }\n\n /**\n @dev Transfers `values` amount(s) of `ids` from the `from` address to the\n `to` address specified. Caller must be approved to manage the tokens being\n transferred out of the `from` account. If `to` is a smart contract, will\n call `onERC1155BatchReceived` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param ids IDs of each token type\n @param values Transfer amounts per token type\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 value = values[i];\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n }\n\n emit TransferBatch(msg.sender, from, to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, from, to, ids, values, data);\n }\n\n /**\n * @dev Internal function to mint an amount of a token with the given ID\n * @param to The address that will own the minted token\n * @param id ID of the token to be minted\n * @param value Amount of the token to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _mint(address to, uint256 id, uint256 value, bytes memory data) internal {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n\n _balances[id][to] = value.add(_balances[id][to]);\n emit TransferSingle(msg.sender, address(0), to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, address(0), to, id, value, data);\n }\n\n /**\n * @dev Internal function to batch mint amounts of tokens with the given IDs\n * @param to The address that will own the minted token\n * @param ids IDs of the tokens to be minted\n * @param values Amounts of the tokens to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _batchMint(address to, uint256[] memory ids, uint256[] memory values, bytes memory data) internal {\n require(to != address(0), \"ERC1155: batch mint to the zero address\");\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = values[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(msg.sender, address(0), to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, address(0), to, ids, values, data);\n }\n\n /**\n * @dev Internal function to burn an amount of a token with the given ID\n * @param owner Account which owns the token to be burnt\n * @param id ID of the token to be burnt\n * @param value Amount of the token to be burnt\n */\n function _burn(address owner, uint256 id, uint256 value) internal {\n _balances[id][owner] = _balances[id][owner].sub(value);\n emit TransferSingle(msg.sender, owner, address(0), id, value);\n }\n\n /**\n * @dev Internal function to batch burn an amounts of tokens with the given IDs\n * @param owner Account which owns the token to be burnt\n * @param ids IDs of the tokens to be burnt\n * @param values Amounts of the tokens to be burnt\n */\n function _batchBurn(address owner, uint256[] memory ids, uint256[] memory values) internal {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][owner] = _balances[ids[i]][owner].sub(values[i]);\n }\n\n emit TransferBatch(msg.sender, owner, address(0), ids, values);\n }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155Received(operator, from, id, value, data) ==\n IERC1155TokenReceiver(to).onERC1155Received.selector,\n \"ERC1155: got unknown value from onERC1155Received\"\n );\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory values,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155BatchReceived(operator, from, ids, values, data) == IER