UNPKG

openzeppelin-contracts

Version:

Secure Smart Contract library for Solidity

737 lines 92.2 kB
{ "contractName": "ERC1155PresetMinterPauser", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "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": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "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": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b5060405162004e7638038062004e76833981810160405281019062000037919062000506565b80620000506301ffc9a760e01b6200015a60201b60201c565b62000061816200023260201b60201c565b6200007963d9b67a2660e01b6200015a60201b60201c565b62000091630e89341c60e01b6200015a60201b60201c565b506000600560006101000a81548160ff021916908315150217905550620000d16000801b620000c56200024e60201b60201c565b6200025660201b60201c565b620001127f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620001066200024e60201b60201c565b6200025660201b60201c565b620001537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a620001476200024e60201b60201c565b6200025660201b60201c565b50620006f1565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620001c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001bd906200058d565b60405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b80600490805190602001906200024a929190620003e4565b5050565b600033905090565b6200026882826200026c60201b60201c565b5050565b6200029a816000808581526020019081526020016000206000016200030f60201b6200180a1790919060201c565b156200030b57620002b06200024e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200033f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200034760201b60201c565b905092915050565b60006200035b8383620003c160201b60201c565b620003b6578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620003bb565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054620003f2906200065d565b90600052602060002090601f01602090048101928262000416576000855562000462565b82601f106200043157805160ff191683800117855562000462565b8280016001018555821562000462579182015b828111156200046157825182559160200191906001019062000444565b5b50905062000471919062000475565b5090565b5b808211156200049057600081600090555060010162000476565b5090565b6000620004ab620004a584620005e3565b620005af565b905082815260208101848484011115620004c457600080fd5b620004d184828562000627565b509392505050565b600082601f830112620004eb57600080fd5b8151620004fd84826020860162000494565b91505092915050565b6000602082840312156200051957600080fd5b600082015167ffffffffffffffff8111156200053457600080fd5b6200054284828501620004d9565b91505092915050565b60006200055a601c8362000616565b91507f4552433136353a20696e76616c696420696e74657266616365206964000000006000830152602082019050919050565b60006020820190508181036000830152620005a8816200054b565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620005d957620005d8620006c2565b5b8060405250919050565b600067ffffffffffffffff821115620006015762000600620006c2565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620006475780820151818401526020810190506200062a565b8381111562000657576000848401525b50505050565b600060028204905060018216806200067657607f821691505b602082108114156200068d576200068c62000693565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61477580620007016000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063731133e9116100de578063ca15c87311610097578063e63ab1e911610071578063e63ab1e914610445578063e985e9c514610463578063f242432a14610493578063f5298aca146104af57610172565b8063ca15c873146103db578063d53913931461040b578063d547741f1461042957610172565b8063731133e91461031b5780638456cb59146103375780639010d07c1461034157806391d1485414610371578063a217fddf146103a1578063a22cb465146103bf57610172565b80632f2ff15d116101305780632f2ff15d1461026f57806336568abe1461028b5780633f4ba83a146102a75780634e1273f4146102b15780635c975abb146102e15780636b20c454146102ff57610172565b8062fdd58e1461017757806301ffc9a7146101a75780630e89341c146101d75780631f7fdffa14610207578063248a9ca3146102235780632eb2c2d614610253575b600080fd5b610191600480360381019061018c91906131b1565b6104cb565b60405161019e9190614238565b60405180910390f35b6101c160048036038101906101bc91906133c4565b610595565b6040516101ce9190613f20565b60405180910390f35b6101f160048036038101906101ec9190613416565b6105fd565b6040516101fe9190613f56565b60405180910390f35b610221600480360381019061021c91906130ca565b610691565b005b61023d60048036038101906102389190613323565b610713565b60405161024a9190613f3b565b60405180910390f35b61026d60048036038101906102689190612efd565b610732565b005b6102896004803603810190610284919061334c565b610b2b565b005b6102a560048036038101906102a0919061334c565b610b9e565b005b6102af610c21565b005b6102cb60048036038101906102c691906132b7565b610c9b565b6040516102d89190613ec7565b60405180910390f35b6102e9610f43565b6040516102f69190613f20565b60405180910390f35b6103196004803603810190610314919061304b565b610f5a565b005b6103356004803603810190610330919061323c565b610ff7565b005b61033f611079565b005b61035b60048036038101906103569190613388565b6110f3565b6040516103689190613dea565b60405180910390f35b61038b6004803603810190610386919061334c565b611124565b6040516103989190613f20565b60405180910390f35b6103a9611155565b6040516103b69190613f3b565b60405180910390f35b6103d960048036038101906103d49190613175565b61115c565b005b6103f560048036038101906103f09190613323565b6112dd565b6040516104029190614238565b60405180910390f35b610413611303565b6040516104209190613f3b565b60405180910390f35b610443600480360381019061043e919061334c565b611327565b005b61044d61139a565b60405161045a9190613f3b565b60405180910390f35b61047d60048036038101906104789190612ec1565b6113be565b60405161048a9190613f20565b60405180910390f35b6104ad60048036038101906104a89190612fbc565b611452565b005b6104c960048036038101906104c491906131ed565b61176d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390614018565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606004805461060c906144f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610638906144f0565b80156106855780601f1061065a57610100808354040283529160200191610685565b820191906000526020600020905b81548152906001019060200180831161066857829003601f168201915b50505050509050919050565b6106c27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106bd61183a565b611124565b610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890614138565b60405180910390fd5b61070d84848484611842565b50505050565b6000806000838152602001908152602001600020600201549050919050565b8151835114610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d906141d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd906140d8565b60405180910390fd5b6107ee61183a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061083457506108338561082e61183a565b6113be565b5b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a906140f8565b60405180910390fd5b600061087d61183a565b905061088d818787878787611b36565b60005b8451811015610a965760008582815181106108d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610919577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050806002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461097f91906143fc565b6002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806002600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a2f91906143a6565b6002600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505080610a8f90614522565b9050610890565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b0d929190613ee9565b60405180910390a4610b23818787878787611b4c565b505050505050565b610b5160008084815260200190815260200160002060020154610b4c61183a565b611124565b610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790613fd8565b60405180910390fd5b610b9a8282611d1c565b5050565b610ba661183a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a90614218565b60405180910390fd5b610c1d8282611daf565b5050565b610c527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c4d61183a565b611124565b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8890614158565b60405180910390fd5b610c99611e42565b565b60608151835114610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906141b8565b60405180910390fd5b6000835167ffffffffffffffff811115610d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d525781602001602082028036833780820191505090505b50905060005b8451811015610f3857600073ffffffffffffffffffffffffffffffffffffffff16858281518110610db2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890614038565b60405180910390fd5b60026000858381518110610e4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000868381518110610e9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610f3190614522565b9050610d58565b508091505092915050565b6000600560009054906101000a900460ff16905090565b610f6261183a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fa85750610fa783610fa261183a565b6113be565b5b610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614078565b60405180910390fd5b610ff2838383611eec565b505050565b6110287f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661102361183a565b611124565b611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90614138565b60405180910390fd5b611073848484846121df565b50505050565b6110aa7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110a561183a565b611124565b6110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614178565b60405180910390fd5b6110f16123bf565b565b600061111c8260008086815260200190815260200160002060000161246a90919063ffffffff16565b905092915050565b600061114d8260008086815260200190815260200160002060000161248490919063ffffffff16565b905092915050565b6000801b81565b8173ffffffffffffffffffffffffffffffffffffffff1661117b61183a565b73ffffffffffffffffffffffffffffffffffffffff1614156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990614198565b60405180910390fd5b80600360006111df61183a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661128c61183a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112d19190613f20565b60405180910390a35050565b60006112fc6000808481526020019081526020016000206000016124b4565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61134d6000808481526020019081526020016000206002015461134861183a565b611124565b61138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390614098565b60405180910390fd5b6113968282611daf565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b9906140d8565b60405180910390fd5b6114ca61183a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611510575061150f8561150a61183a565b6113be565b5b61154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690614078565b60405180910390fd5b600061155961183a565b905061157981878761156a886124c9565b611573886124c9565b87611b36565b826002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d591906143fc565b6002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168591906143a6565b6002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161174f929190614253565b60405180910390a461176581878787878761258f565b505050505050565b61177561183a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806117bb57506117ba836117b561183a565b6113be565b5b6117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614078565b60405180910390fd5b61180583838361275f565b505050565b6000611832836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61293e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906141f8565b60405180910390fd5b81518351146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed906141d8565b60405180910390fd5b600061190061183a565b905061191181600087878787611b36565b60005b8451811015611aa0576002600086838151811061195a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548482815181106119e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516119f991906143a6565b60026000878481518110611a36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611a9890614522565b915050611914565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b18929190613ee9565b60405180910390a4611b2f81600087878787611b4c565b5050505050565b611b448686868686866129ae565b505050505050565b611b6b8473ffffffffffffffffffffffffffffffffffffffff16612a0c565b15611d14578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611bb1959493929190613e05565b602060405180830381600087803b158015611bcb57600080fd5b505af1925050508015611bfc57506040513d601f19601f82011682018060405250810190611bf991906133ed565b60015b611c8b57611c08614616565b80611c135750611c50565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c479190613f56565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8290613f78565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613fb8565b60405180910390fd5b505b505050505050565b611d438160008085815260200190815260200160002060000161180a90919063ffffffff16565b15611dab57611d5061183a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611dd681600080858152602001908152602001600020600001612a1f90919063ffffffff16565b15611e3e57611de361183a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600560009054906101000a900460ff16611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890613ff8565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ed561183a565b604051611ee29190613dea565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614118565b60405180910390fd5b8051825114611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f97906141d8565b60405180910390fd5b6000611faa61183a565b9050611fca81856000868660405180602001604052806000815250611b36565b60005b83518110156121595782818151811061200f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160026000868481518110612054577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b291906143fc565b600260008684815181106120ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061215190614522565b915050611fcd565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516121d1929190613ee9565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906141f8565b60405180910390fd5b600061225961183a565b905061227a8160008761226b886124c9565b612274886124c9565b87611b36565b826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d691906143a6565b6002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516123a1929190614253565b60405180910390a46123b88160008787878761258f565b5050505050565b600560009054906101000a900460ff161561240f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612406906140b8565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861245361183a565b6040516124609190613dea565b60405180910390a1565b60006124798360000183612a4f565b60001c905092915050565b60006124ac836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ae9565b905092915050565b60006124c282600001612b0c565b9050919050565b60606000600167ffffffffffffffff81111561250e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561253c5781602001602082028036833780820191505090505b509050828160008151811061257a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6125ae8473ffffffffffffffffffffffffffffffffffffffff16612a0c565b15612757578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125f4959493929190613e6d565b602060405180830381600087803b15801561260e57600080fd5b505af192505050801561263f57506040513d601f19601f8201168201806040525081019061263c91906133ed565b60015b6126ce5761264b614616565b806126565750612693565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a9190613f56565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c590613f78565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90613fb8565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690614118565b60405180910390fd5b60006127d961183a565b9050612809818560006127eb876124c9565b6127f4876124c9565b60405180602001604052806000815250611b36565b816002600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286591906143fc565b6002600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051612930929190614253565b60405180910390a450505050565b600061294a8383612ae9565b6129a35782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506129a8565b600090505b92915050565b6129bc868686868686612b1d565b6129c4610f43565b15612a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fb90614058565b60405180910390fd5b505050505050565b600080823b905060008111915050919050565b6000612a47836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b25565b905092915050565b600081836000018054905011612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9190613f98565b60405180910390fd5b826000018281548110612ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b505050505050565b60008083600101600084815260200190815260200160002054905060008114612ca3576000600182612b5791906143fc565b9050600060018660000180549050612b6f91906143fc565b90506000866000018281548110612baf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110612bf9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600183612c1491906143a6565b8760010160008381526020019081526020016000208190555086600001805480612c67577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612ca9565b60009150505b92915050565b6000612cc2612cbd846142ad565b61427c565b90508083825260208201905082856020860282011115612ce157600080fd5b60005b85811015612d115781612cf78882612dc5565b845260208401935060208301925050600181019050612ce4565b5050509392505050565b6000612d2e612d29846142d9565b61427c565b90508083825260208201905082856020860282011115612d4d57600080fd5b60005b85811015612d7d5781612d638882612eac565b845260208401935060208301925050600181019050612d50565b5050509392505050565b6000612d9a612d9584614305565b61427c565b905082815260208101848484011115612db257600080fd5b612dbd8482856144ae565b509392505050565b600081359050612dd4816146cc565b92915050565b600082601f830112612deb57600080fd5b8135612dfb848260208601612caf565b91505092915050565b600082601f830112612e1557600080fd5b8135612e25848260208601612d1b565b91505092915050565b600081359050612e3d816146e3565b92915050565b600081359050612e52816146fa565b92915050565b600081359050612e6781614711565b92915050565b600081519050612e7c81614711565b92915050565b600082601f830112612e9357600080fd5b8135612ea3848260208601612d87565b91505092915050565b600081359050612ebb81614728565b92915050565b60008060408385031215612ed457600080fd5b6000612ee285828601612dc5565b9250506020612ef385828601612dc5565b9150509250929050565b600080600080600060a08688031215612f1557600080fd5b6000612f2388828901612dc5565b9550506020612f3488828901612dc5565b945050604086013567ffffffffffffffff811115612f5157600080fd5b612f5d88828901612e04565b935050606086013567ffffffffffffffff811115612f7a57600080fd5b612f8688828901612e04565b925050608086013567ffffffffffffffff811115612fa357600080fd5b612faf88828901612e82565b9150509295509295909350565b600080600080600060a08688031215612fd457600080fd5b6000612fe288828901612dc5565b9550506020612ff388828901612dc5565b945050604061300488828901612eac565b935050606061301588828901612eac565b925050608086013567ffffffffffffffff81111561303257600080fd5b61303e88828901612e82565b9150509295509295909350565b60008060006060848603121561306057600080fd5b600061306e86828701612dc5565b935050602084013567ffffffffffffffff81111561308b57600080fd5b61309786828701612e04565b925050604084013567ffffffffffffffff8111156130b457600080fd5b6130c086828701612e04565b9150509250925092565b600080600080608085870312156130e057600080fd5b60006130ee87828801612dc5565b945050602085013567ffffffffffffffff81111561310b57600080fd5b61311787828801612e04565b935050604085013567ffffffffffffffff81111561313457600080fd5b61314087828801612e04565b925050606085013567ffffffffffffffff81111561315d57600080fd5b61316987828801612e82565b91505092959194509250565b6000806040838503121561318857600080fd5b600061319685828601612dc5565b92505060206131a785828601612e2e565b9150509250929050565b600080604083850312156131c457600080fd5b60006131d285828601612dc5565b92505060206131e385828601612eac565b9150509250929050565b60008060006060848603121561320257600080fd5b600061321086828701612dc5565b935050602061322186828701612eac565b925050604061323286828701612eac565b9150509250925092565b6000806000806080858703121561325257600080fd5b600061326087828801612dc5565b945050602061327187828801612eac565b935050604061328287828801612eac565b925050606085013567ffffffffffffffff81111561329f57600080fd5b6132ab87828801612e82565b91505092959194509250565b600080604083850312156132ca57600080fd5b600083013567ffffffffffffffff8111156132e457600080fd5b6132f085828601612dda565b925050602083013567ffffffffffffffff81111561330d57600080fd5b61331985828601612e04565b9150509250929050565b60006020828403121561333557600080fd5b600061334384828501612e43565b91505092915050565b6000806040838503121561335f57600080fd5b600061336d85828601612e43565b925050602061337e85828601612dc5565b9150509250929050565b6000806040838503121561339b57600080fd5b60006133a985828601612e43565b92505060206133ba85828601612eac565b9150509250929050565b6000602082840312156133d657600080fd5b60006133e484828501612e58565b91505092915050565b6000602082840312156133ff57600080fd5b600061340d84828501612e6d565b91505092915050565b60006020828403121561342857600080fd5b600061343684828501612eac565b91505092915050565b600061344b8383613dcc565b60208301905092915050565b61346081614430565b82525050565b600061347182614345565b61347b8185614373565b935061348683614335565b8060005b838110156134b757815161349e888261343f565b97506134a983614366565b92505060018101905061348a565b5085935050505092915050565b6134cd81614442565b82525050565b6134dc8161444e565b82525050565b60006134ed82614350565b6134f78185614384565b93506135078185602086016144bd565b613510816145f8565b840191505092915050565b60006135268261435b565b6135308185614395565b93506135408185602086016144bd565b613549816145f8565b840191505092915050565b6000613561603483614395565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b60006135c7602283614395565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061362d602883614395565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613693602f83614395565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f206772616e7400000000000000000000000000000000006020830152604082019050919050565b60006136f9601483614395565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613739602b83614395565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061379f603183614395565b91507f455243313135353a2062617463682062616c616e636520717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b6000613805602c83614395565b91507f455243313135355061757361626c653a20746f6b656e207472616e736665722060008301527f7768696c652070617573656400000000000000000000000000000000000000006020830152604082019050919050565b600061386b602983614395565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b60006138d1603083614395565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f207265766f6b65000000000000000000000000000000006020830152604082019050919050565b6000613937601083614395565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613977602583614395565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139dd603283614395565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613a43602383614395565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa9603883614395565b91507f455243313135355072657365744d696e7465725061757365723a206d7573742060008301527f68617665206d696e74657220726f6c6520746f206d696e7400000000000000006020830152604082019050919050565b6000613b0f603b83614395565b91507f455243313135355072657365744d696e7465725061757365723a206d7573742060008301527f686176652070617573657220726f6c6520746f20756e706175736500000000006020830152604082019050919050565b6000613b75603983614395565b91507f455243313135355072657365744d696e7465725061757365723a206d7573742060008301527f686176652070617573657220726f6c6520746f207061757365000000000000006020830152604082019050919050565b6000613bdb602983614395565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c41602983614395565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600