UNPKG

@lukso/lsp-smart-contracts

Version:

The reference smart contract implementation for the LUKSO LSP standards

693 lines 74.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "LSP0ERC725AccountInit", "sourceName": "@lukso/lsp0-contracts/contracts/LSP0ERC725AccountInit.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC725X_ContractDeploymentFailed", "type": "error" }, { "inputs": [], "name": "ERC725X_CreateOperationsRequireEmptyRecipientAddress", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersEmptyArray", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersLengthMismatch", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "ERC725X_InsufficientBalance", "type": "error" }, { "inputs": [], "name": "ERC725X_MsgValueDisallowedInDelegateCall", "type": "error" }, { "inputs": [], "name": "ERC725X_MsgValueDisallowedInStaticCall", "type": "error" }, { "inputs": [], "name": "ERC725X_NoContractBytecodeProvided", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "operationTypeProvided", "type": "uint256" } ], "name": "ERC725X_UnknownOperationType", "type": "error" }, { "inputs": [], "name": "ERC725Y_DataKeysValuesEmptyArray", "type": "error" }, { "inputs": [], "name": "ERC725Y_DataKeysValuesLengthMismatch", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "LSP14CallerNotPendingOwner", "type": "error" }, { "inputs": [], "name": "LSP14CannotTransferOwnershipToSelf", "type": "error" }, { "inputs": [], "name": "LSP14MustAcceptOwnershipInSeparateTransaction", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "renounceOwnershipStart", "type": "uint256" }, { "internalType": "uint256", "name": "renounceOwnershipEnd", "type": "uint256" } ], "name": "LSP14NotInRenounceOwnershipInterval", "type": "error" }, { "inputs": [ { "internalType": "bool", "name": "postCall", "type": "bool" }, { "internalType": "bytes4", "name": "returnedStatus", "type": "bytes4" } ], "name": "LSP20CallVerificationFailed", "type": "error" }, { "inputs": [ { "internalType": "bool", "name": "postCall", "type": "bool" } ], "name": "LSP20CallingVerifierFailed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "logicVerifier", "type": "address" } ], "name": "LSP20EOACannotVerifyCall", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "functionSelector", "type": "bytes4" } ], "name": "NoExtensionFoundForFunctionSelector", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "contractAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "ContractCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dataKey", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "name": "DataChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "Executed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "OwnershipRenounced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RenounceOwnershipStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "typeId", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "receivedData", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "returnedValue", "type": "bytes" } ], "name": "UniversalReceiver", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "batchCalls", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "operationsType", "type": "uint256[]" }, { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" } ], "name": "executeBatch", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" } ], "name": "getData", "outputs": [ { "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataKeys", "type": "bytes32[]" } ], "name": "getDataBatch", "outputs": [ { "internalType": "bytes[]", "name": "dataValues", "type": "bytes[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "dataHash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "isValidSignature", "outputs": [ { "internalType": "bytes4", "name": "returnedStatus", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" }, { "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "name": "setData", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataKeys", "type": "bytes32[]" }, { "internalType": "bytes[]", "name": "dataValues", "type": "bytes[]" } ], "name": "setDataBatch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingNewOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "typeId", "type": "bytes32" }, { "internalType": "bytes", "name": "receivedData", "type": "bytes" } ], "name": "universalReceiver", "outputs": [ { "internalType": "bytes", "name": "returnedValues", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613a2280620000f36000396000f3fe6080604052600436106101485760003560e01c806379ba5097116100c0578063dedff9c611610074578063ead3fbdf11610059578063ead3fbdf14610239578063f2fde38b14610436578063ffa1ad741461045657610193565b8063dedff9c6146103f8578063e30c39781461041857610193565b80638da5cb5b116100a55780638da5cb5b1461039a57806397902421146103d2578063c4d66de8146103e557610193565b806379ba5097146103725780637f23690c1461038757610193565b806344c028fe116101175780636963d438116100fc5780636963d4381461032a5780636bb56a141461034a578063715018a61461035d57610193565b806344c028fe146102ea57806354f6127f1461030a57610193565b806301bfba611461023957806301ffc9a7146102615780631626ba7e1461029157806331858452146102ca57610193565b366101935734156101915761018f7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b6040518060200160405280600081525061049f565b505b005b6000366060600482101561022157341561020c5761020a7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b5060408051602081019091526000815261022e565b61022b8383610775565b90505b915050805190602001f35b34801561024557600080fd5b5061024e60c881565b6040519081526020015b60405180910390f35b34801561026d57600080fd5b5061028161027c366004612f80565b610951565b6040519015158152602001610258565b34801561029d57600080fd5b506102b16102ac366004613062565b610a3c565b6040516001600160e01b03199091168152602001610258565b6102dd6102d83660046131ca565b610be1565b6040516102589190613322565b6102fd6102f8366004613384565b610cf3565b60405161025891906133d9565b34801561031657600080fd5b506102fd6103253660046133ec565b610ddc565b34801561033657600080fd5b506102dd610345366004613405565b610de7565b6102fd610358366004613062565b61049f565b34801561036957600080fd5b50610191610f43565b34801561037e57600080fd5b506101916110af565b610191610395366004613062565b61123b565b3480156103a657600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b039091168152602001610258565b6101916103e036600461347a565b611324565b6101916103f33660046134d4565b6114fd565b34801561040457600080fd5b506102dd6104133660046134ef565b61161e565b34801561042457600080fd5b506003546001600160a01b03166103ba565b34801561044257600080fd5b506101916104513660046134d4565b6116c9565b34801561046257600080fd5b506102fd6040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b606034158015906104d057507f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d8314155b1561053b576105397f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b60006105667f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b4761187b565b90506060601482511061061757600061057e83613524565b60601c905061059481635122dded60e11b61191d565b1561061557604051635122dded60e11b81526001600160a01b0382169063a245bbda906105cb90339034908b908b90600401613560565b6000604051808303816000875af11580156105ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610612919081019061358e565b91505b505b60006106437f0cfc51aec37c55a4d0b100000000000000000000000000000000000000000000876119a6565b905060006106508261187b565b90506060601482511061070157600061066883613524565b60601c905061067e81635122dded60e11b61191d565b156106ff57604051635122dded60e11b81526001600160a01b0382169063a245bbda906106b590339034908e908e90600401613560565b6000604051808303816000875af11580156106d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106fc919081019061358e565b91505b505b83816040516020016107149291906135fc565b60405160208183030381529060405295508734336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28a8a6040516107629291906135fc565b60405180910390a4505050505092915050565b606060008061078f6000356001600160e01b031916611a0f565b91509150346000141580156107a2575080155b1561080c5761080a7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b6000356001600160e01b03191615801561082d57506001600160a01b038216155b1561084b57604051806020016040528060008152509250505061094b565b6001600160a01b03821661089e576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024015b60405180910390fd5b600080836001600160a01b0316836108b75760006108b9565b345b888833346040516020016108d09493929190613621565b60408051601f19818403018152908290526108ea91613651565b60006040518083038185875af1925050503d8060008114610927576040519150601f19603f3d011682016040523d82523d6000602084013e61092c565b606091505b5091509150811561094257935061094b92505050565b80518060208301fd5b92915050565b60006001600160e01b03198216630b135d3f60e11b148061099b57506001600160e01b031982167f24871b3d00000000000000000000000000000000000000000000000000000000145b806109b657506001600160e01b03198216631aed5a8560e21b145b806109ea57506001600160e01b031982167f94be599900000000000000000000000000000000000000000000000000000000145b80610a1e57506001600160e01b031982167f1a0eb6a500000000000000000000000000000000000000000000000000000000145b80610a2d5750610a2d82611b06565b8061094b575061094b82611b44565b600080546201000090046001600160a01b0316803b15610b6157600080826001600160a01b0316631626ba7e60e01b8787604051602401610a7e92919061366d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610abc9190613651565b600060405180830381855afa9150503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b50915091506000828015610b11575081516020145b8015610b3857508151630b135d3f60e11b90610b369084016020908101908501613686565b145b905080610b4d576001600160e01b0319610b56565b630b135d3f60e11b5b94505050505061094b565b600080610b6e8686611b82565b90925090506000816004811115610b8757610b8761369f565b14610ba057506001600160e01b0319925061094b915050565b826001600160a01b0316826001600160a01b031614610bc7576001600160e01b0319610bd0565b630b135d3f60e11b5b935050505061094b565b5092915050565b60603415610c6c576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610c63916136b5565b60405180910390a45b6000546201000090046001600160a01b031633819003610c9a57610c9286868686611bc7565b915050610ceb565b6000610ca582611d57565b90506000610cb588888888611bc7565b90508115610ce657610ce68382604051602001610cd29190613322565b604051602081830303815290604052611f23565b925050505b949350505050565b60603415610d7e576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610d75916136b5565b60405180910390a45b6000546201000090046001600160a01b031633819003610da457610c9286868686612059565b6000610daf82611d57565b90506000610dbf88888888612059565b90508115610ce657610ce68382604051602001610cd291906133d9565b606061094b8261187b565b60608167ffffffffffffffff811115610e0257610e02612f9d565b604051908082528060200260200182016040528015610e3557816020015b6060815260200190600190039081610e205790505b50905060005b82811015610bda5760008030868685818110610e5957610e596136df565b9050602002810190610e6b91906136f5565b604051610e7992919061373c565b600060405180830381855af49150503d8060008114610eb4576040519150601f19603f3d011682016040523d82523d6000602084013e610eb9565b606091505b509150915081610f1b57805115610ed35780518082602001fd5b60405162461bcd60e51b815260206004820152601960248201527f4c5350303a20626174636843616c6c73207265766572746564000000000000006044820152606401610895565b80848481518110610f2e57610f2e6136df565b60209081029190910101525050600101610e3b565b6000546201000090046001600160a01b031633819003610ff8576000546201000090046001600160a01b0316610f776121af565b6000546201000090046001600160a01b0316610ff457604080516001600160a01b0384166020820152600091810191909152610ff4907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906060015b60408051601f198184030181529190526001600160a01b03841691906122bb565b5050565b600061100382611d57565b905060006110206000546001600160a01b03620100009091041690565b905061102a6121af565b6000546201000090046001600160a01b031661108a57604080516001600160a01b038516602082015260009181019190915261108a907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f81490606001610fd3565b81156110a9576110a98360405180602001604052806000815250611f23565b50505b50565b600354600160a01b900460ff16156110f3576040517f5758dd0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546003546001600160a01b03620100009092048216929116903382146111445761111f82611d57565b905061112a8261234f565b600380546001600160a01b0319169055600060025561114c565b61114c6123e6565b604080516001600160a01b0380861660208301528416918101919091526111b4907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906060015b60408051601f198184030181529190526001600160a01b03861691906122bb565b604080516001600160a01b03808616602083015284169181019190915261121c907fceca317f109c43507871523e82dc2a3cc64dfa18f12da0b6db14f6e23f995538906060015b60408051601f198184030181529190526001600160a01b03851691906122bb565b80156110a9576110a98260405180602001604052806000815250611f23565b34156112c4576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f19818403018152908290526112bb916136b5565b60405180910390a45b6000546201000090046001600160a01b0316338190036112e8576110a9838361244c565b60006112f382611d57565b90506112ff848461244c565b801561131e5761131e8260405180602001604052806000815250611f23565b50505050565b34156113ad576040516001600160e01b03196000351660208201527f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f19818403018152908290526113a4916136b5565b60405180910390a45b80518251146113e8576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003611423576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546201000090046001600160a01b03163381900361148d5760005b835181101561131e5761148584828151811061145e5761145e6136df565b6020026020010151848381518110611478576114786136df565b602002602001015161244c565b600101611440565b600061149882611d57565b905060005b84518110156114dd576114d58582815181106114bb576114bb6136df565b6020026020010151858381518110611478576114786136df565b60010161149d565b50801561131e5761131e8260405180602001604052806000815250611f23565b600054610100900460ff161580801561151d5750600054600160ff909116105b806115375750303b158015611537575060005460ff166001145b6115a95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610895565b6000805460ff1916600117905580156115cc576000805461ff0019166101001790555b6115d5826124a1565b8015610ff4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060815167ffffffffffffffff81111561163a5761163a612f9d565b60405190808252806020026020018201604052801561166d57816020015b60608152602001906001900390816116585790505b50905060005b82518110156116c35761169e838281518110611691576116916136df565b602002602001015161187b565b8282815181106116b0576116b06136df565b6020908102919091010152600101611673565b50919050565b6000546201000090046001600160a01b03163381900361179b576003805460ff60a01b1916600160a01b1790556116ff826125ac565b816001600160a01b0316816001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a3604080516001600160a01b03808416602083015284169181019190915261178a907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac6926906060016111fb565b6003805460ff60a01b191690555050565b60006117a682611d57565b6003805460ff60a01b1916600160a01b17905590506117c4836125ac565b826001600160a01b0316826001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a3604080516001600160a01b03808516602083015285169181019190915261184f907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac692690606001611193565b6003805460ff60a01b1916905580156110a9576110a98260405180602001604052806000815250611f23565b60008181526001602052604090208054606091906118989061374c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c49061374c565b80156119115780601f106118e657610100808354040283529160200191611911565b820191906000526020600020905b8154815290600101906020018083116118f457829003601f168201915b50505050509050919050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d9150600051905082801561198f575060208210155b801561199b5750600081115b979650505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080610ceb90613780565b60008080611a477fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166119a6565b90506000611a548261187b565b9050601481511015611a6d575060009485945092505050565b8051601503611aee5780601481518110611a8957611a896136df565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000003611aee57611adf81613524565b60601c95600195509350505050565b611af781613524565b60601c95600095509350505050565b60006001600160e01b031982167fa918fa6b00000000000000000000000000000000000000000000000000000000148061094b575061094b82612615565b600080611b576301ffc9a760e01b611a0f565b5090506001600160a01b038116611b715750600092915050565b611b7b818461191d565b9392505050565b6000808251604103611bb85760208301516040840151606085015160001a611bac87828585612653565b94509450505050611bc0565b506000905060025b9250929050565b606083518551141580611be8575082518451141580611be857508151835114155b15611c1f576040517f3ff55f4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451600003611c5a576040517fe9ad2b5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000855167ffffffffffffffff811115611c7657611c76612f9d565b604051908082528060200260200182016040528015611ca957816020015b6060815260200190600190039081611c945790505b50905060005b8651811015611d4d57611d28878281518110611ccd57611ccd6136df565b6020026020010151878381518110611ce757611ce76136df565b6020026020010151878481518110611d0157611d016136df565b6020026020010151878581518110611d1b57611d1b6136df565b6020026020010151612059565b828281518110611d3a57611d3a6136df565b6020908102919091010152600101611caf565b5095945050505050565b6000816001600160a01b03163b600003611da8576040517f0c3923010000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610895565b6040517fde928f140000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063de928f1490611df890339030908290349060009036906004016137a4565b6020604051808303816000875af1925050508015611e33575060408051601f3d908101601f19168201909252611e3091810190613801565b60015b611e72573d808015611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b506116c3600082612717565b7fffffff000000000000000000000000000000000000000000000000000000000081167fde928f000000000000000000000000000000000000000000000000000000000014611ee757604051639d6741e360e01b8152600060048201526001600160e01b031982166024820152604401610895565b8060031a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b14915050919050565b919050565b816001600160a01b031663d3fc45d333303334600036604051602001611f4e9695949392919061381e565b60405160208183030381529060405280519060200120836040518363ffffffff1660e01b8152600401611f8292919061366d565b6020604051808303816000875af1925050508015611fbd575060408051601f3d908101601f19168201909252611fba91810190613801565b60015b611ffc573d808015611feb576040519150601f19603f3d011682016040523d82523d6000602084013e611ff0565b606091505b506110a9600182612717565b6001600160e01b031981167fd3fc45d300000000000000000000000000000000000000000000000000000000146110a957604051639d6741e360e01b8152600160048201526001600160e01b031982166024820152604401610895565b6060846120725761206b84848461275d565b9050610ceb565b600185036120ac576001600160a01b038416156120a257604051631820c12560e11b815260040160405180910390fd5b61206b838361288e565b600285036120e6576001600160a01b038416156120dc57604051631820c12560e11b815260040160405180910390fd5b61206b83836129a8565b60038503612130578215612126576040517f72f2bc6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61206b8483612a92565b6004850361217a578215612170576040517f5ac8313500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61206b8483612b96565b6040517f7583b3bc00000000000000000000000000000000000000000000000000000000815260048101869052602401610895565b60025443906000906121c39060c890613884565b905060006121d260c883613884565b9050808311806121e25750600254155b1561222a576002839055600380546001600160a01b03191690556040517f81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e790600090a1505050565b8183101561226e576040517f1b0809420000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610895565b612278600061234f565b60006002819055600380546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1505050565b6122d56001600160a01b038416631aed5a8560e21b61191d565b156110a957604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490612308908590859060040161366d565b6000604051808303816000875af1158015612327573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261131e919081019061358e565b6000546001600160a01b038281166201000090920416146110ac57600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03831662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90911617905550565b6003546001600160a01b0316331461242c576040517f451e4528000000000000000000000000000000000000000000000000000000008152336004820152602401610895565b6124353361234f565b600380546001600160a01b03191690556000600255565b600082815260016020526040902061246482826138e5565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28260405161249591906133d9565b60405180910390a25050565b600054610100900460ff1661251e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610895565b34156125a3577f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b34336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c260405161259a906040808252600090820181905260606020830181905282015260800190565b60405180910390a45b6110ac8161234f565b306001600160a01b038216036125ee576040517fe052a6f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b03929092169190911790556000600255565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061094b575061094b82612c47565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561268a575060009050600361270e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126de573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127075760006001925092505061270e565b9150600090505b94509492505050565b8051156127275780518082602001fd5b6040517f8c6a8ae30000000000000000000000000000000000000000000000000000000081528215156004820152602401610895565b606082471015612789576040516301bf351f60e31b815247600482015260248101849052604401610895565b612792826139a5565b6001600160e01b031916846001600160a01b031660007f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e866040516127d991815260200190565b60405180910390a4600080856001600160a01b031685856040516127fd9190613651565b60006040518083038185875af1925050503d806000811461283a576040519150601f19603f3d011682016040523d82523d6000602084013e61283f565b606091505b509150915061288482826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250612c95565b9695505050505050565b6060824710156128ba576040516301bf351f60e31b815247600482015260248101849052604401610895565b81516000036128dc5760405163b81cd8d960e01b815260040160405180910390fd5b600082516020840185f090506001600160a01b038116612928576040517f0b07489b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b816001600160a01b031660017fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c38760405161296991815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b16602082015260340160405160208183030381529060405291505092915050565b606081516000036129cc5760405163b81cd8d960e01b815260040160405180910390fd5b60006129e583602085516129e091906139d9565b612cae565b90506000612a02846000602087516129fd91906139d9565b612d14565b90506000612a11868484612e3c565b905082816001600160a01b031660027fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c389604051612a5191815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b166020820152603401604051602081830303815290604052935050505092915050565b6060612a9d826139a5565b6001600160e01b031916836001600160a01b031660037f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e6000604051612ae591815260200190565b60405180910390a4600080846001600160a01b031684604051612b089190613651565b600060405180830381855afa9150503d8060008114612b43576040519150601f19603f3d011682016040523d82523d6000602084013e612b48565b606091505b5091509150612b8d82826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250612c95565b95945050505050565b6060612ba1826139a5565b6001600160e01b031916836001600160a01b031660047f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e6000604051612be991815260200190565b60405180910390a4600080846001600160a01b031684604051612c0c9190613651565b600060405180830381855af49150503d8060008114612b43576040519150601f19603f3d011682016040523d82523d6000602084013e612b48565b60006001600160e01b031982167f7545acac00000000000000000000000000000000000000000000000000000000148061094b57506301ffc9a760e01b6001600160e01b031983161461094b565b60608315612ca4575081611b7b565b611b7b8383612f40565b6000612cbb826020613884565b83511015612d0b5760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610895565b50016020015190565b606081612d2281601f613884565b1015612d705760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610895565b612d7a8284613884565b84511015612dca5760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610895565b606082158015612de95760405191506000825260208201604052612e33565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612e22578051835260209283019201612e0a565b5050858452601f01601f1916604052505b50949350505050565b600083471015612e8e5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610895565b8151600003612edf5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610895565b8282516020840186f590506001600160a01b038116611b7b5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610895565b815115612f505781518083602001fd5b8060405162461bcd60e51b815260040161089591906133d9565b6001600160e01b0319811681146110ac57600080fd5b600060208284031215612f9257600080fd5b8135611b7b81612f6a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612fdc57612fdc612f9d565b604052919050565b600067ffffffffffffffff821115612ffe57612ffe612f9d565b50601f01601f191660200190565b600082601f83011261301d57600080fd5b813561303061302b82612fe4565b612fb3565b81815284602083860101111561304557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561307557600080fd5b82359150602083013567ffffffffffffffff81111561309357600080fd5b61309f8582860161300c565b9150509250929050565b600067ffffffffffffffff8211156130c3576130c3612f9d565b5060051b60200190565b600082601f8301126130de57600080fd5b813560206130ee61302b836130a9565b82815260059290921b8401810191818101908684111561310d57600080fd5b8286015b848110156131285780358352918301918301613111565b509695505050505050565b80356001600160a01b0381168114611f1e57600080fd5b600082601f83011261315b57600080fd5b8135602061316b61302b836130a9565b82815260059290921b8401810191818101908684111561318a57600080fd5b8286015b8481101561312857803567ffffffffffffffff8111156131ae5760008081fd5b6131bc8986838b010161300c565b84525091830191830161318e565b600080600080608085870312156131e057600080fd5b843567ffffffffffffffff808211156131f857600080fd5b613204888389016130cd565b955060209150818701358181111561321b57600080fd5b8701601f8101891361322c57600080fd5b803561323a61302b826130a9565b81815260059190911b8201840190848101908b83111561325957600080fd5b928501925b8284101561327e5761326f84613133565b8252928501929085019061325e565b9750505050604087013591508082111561329757600080fd5b6132a3888389016130cd565b935060608701359150808211156132b957600080fd5b506132c68782880161314a565b91505092959194509250565b60005b838110156132ed5781810151838201526020016132d5565b50506000910152565b6000815180845261330e8160208601602086016132d2565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561337757603f198886030184526133658583516132f6565b94509285019290850190600101613349565b5092979650505050505050565b6000806000806080858703121561339a57600080fd5b843593506133aa60208601613133565b925060408501359150606085013567ffffffffffffffff8111156133cd57600080fd5b6132c68782880161300c565b602081526000611b7b60208301846132f6565b6000602082840312156133fe57600080fd5b5035919050565b6000806020838503121561341857600080fd5b823567ffffffffffffffff8082111561343057600080fd5b818501915085601f83011261344457600080fd5b81358181111561345357600080fd5b8660208260051b850101111561346857600080fd5b60209290920196919550909350505050565b6000806040838503121561348d57600080fd5b823567ffffffffffffffff808211156134a557600080fd5b6134b1868387016130cd565b935060208501359150808211156134c757600080fd5b5061309f8582860161314a565b6000602082840312156134e657600080fd5b611b7b82613133565b60006020828403121561350157600080fd5b813567ffffffffffffffff81111561351857600080fd5b610ceb848285016130cd565b805160208201516bffffffffffffffffffffffff1980821692919060148310156135585780818460140360031b1b83161693505b505050919050565b6001600160a01b038516815283602082015282604082015260806060820152600061288460808301846132f6565b6000602082840312156135a057600080fd5b815167ffffffffffffffff8111156135b757600080fd5b8201601f810184136135c857600080fd5b80516135d661302b82612fe4565b8181528560208385010111156135eb57600080fd5b612b8d8260208301602086016132d2565b60408152600061360f60408301856132f6565b8281036020840152612b8d81856132f6565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516136638184602087016132d2565b9190910192915050565b828152604060208201526000610ceb60408301846132f6565b60006020828403121561369857600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b6040815260006136c860408301846132f6565b828103602093840152600081529190910192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261370c57600080fd5b83018035915067ffffffffffffffff82111561372757600080fd5b602001915036819003821315611bc057600080fd5b8183823760009101908152919050565b600181811c9082168061376057607f821691505b6020821081036116c357634e487b7160e01b600052602260045260246000fd5b805160208083015191908110156116c35760001960209190910360031b1b16919050565b60006001600160a01b038089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b60006020828403121561381357600080fd5b8151611b7b81612f6a565b60006bffffffffffffffffffffffff19808960601b168352808860601b166014840152808760601b1660288401525084603c8301528284605c8401375060009101605c0190815295945050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561094b5761094b61386e565b601f8211156110a957600081815260208120601f850160051c810160208610156138be5750805b601f850160051c820191505b818110156138dd578281556001016138ca565b505050505050565b815167ffffffffffffffff8111156138ff576138ff612f9d565b6139138161390d845461374c565b84613897565b602080601f83116001811461394857600084156139305750858301515b600019600386901b1c1916600185901b1785556138dd565b600085815260208120601f198616915b8281101561397757888601518255948401946001909101908401613958565b50858210156139955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000815160208301516001600160e01b0319808216935060048310156135585760049290920360031b82901b161692915050565b8181038181111561094b5761094b61386e56fea264697066735822122034e8835ef4df5509feba590a4f623d3fef5ef48eb5e2cb49a01ffec24afe4aa964736f6c63430008110033", "deployedBytecode": "0x6080604052600436106101485760003560e01c806379ba5097116100c0578063dedff9c611610074578063ead3fbdf11610059578063ead3fbdf14610239578063f2fde38b14610436578063ffa1ad741461045657610193565b8063dedff9c6146103f8578063e30c39781461041857610193565b80638da5cb5b116100a55780638da5cb5b1461039a57806397902421146103d2578063c4d66de8146103e557610193565b806379ba5097146103725780637f23690c1461038757610193565b806344c028fe116101175780636963d438116100fc5780636963d4381461032a5780636bb56a141461034a578063715018a61461035d57610193565b806344c028fe146102ea57806354f6127f1461030a57610193565b806301bfba611461023957806301ffc9a7146102615780631626ba7e1461029157806331858452146102ca57610193565b366101935734156101915761018f7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b6040518060200160405280600081525061049f565b505b005b6000366060600482101561022157341561020c5761020a7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b5060408051602081019091526000815261022e565b61022b8383610775565b90505b915050805190602001f35b34801561024557600080fd5b5061024e60c881565b6040519081526020015b60405180910390f35b34801561026d57600080fd5b5061028161027c366004612f80565b610951565b6040519015158152602001610258565b34801561029d57600080fd5b506102b16102ac366004613062565b610a3c565b6040516001600160e01b03199091168152602001610258565b6102dd6102d83660046131ca565b610be1565b6040516102589190613322565b6102fd6102f8366004613384565b610cf3565b60405161025891906133d9565b34801561031657600080fd5b506102fd6103253660046133ec565b610ddc565b34801561033657600080fd5b506102dd610345366004613405565b610de7565b6102fd610358366004613062565b61049f565b34801561036957600080fd5b50610191610f43565b34801561037e57600080fd5b506101916110af565b610191610395366004613062565b61123b565b3480156103a657600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b039091168152602001610258565b6101916103e036600461347a565b611324565b6101916103f33660046134d4565b6114fd565b34801561040457600080fd5b506102dd6104133660046134ef565b61161e565b34801561042457600080fd5b506003546001600160a01b03166103ba565b34801561044257600080fd5b506101916104513660046134d4565b6116c9565b34801561046257600080fd5b506102fd6040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b606034158015906104d057507f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d8314155b1561053b576105397f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b60006105667f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b4761187b565b90506060601482511061061757600061057e83613524565b60601c905061059481635122dded60e11b61191d565b1561061557604051635122dded60e11b81526001600160a01b0382169063a245bbda906105cb90339034908b908b90600401613560565b6000604051808303816000875af11580156105ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610612919081019061358e565b91505b505b60006106437f0cfc51aec37c55a4d0b100000000000000000000000000000000000000000000876119a6565b905060006106508261187b565b90506060601482511061070157600061066883613524565b60601c905061067e81635122dded60e11b61191d565b156106ff57604051635122dded60e11b81526001600160a01b0382169063a245bbda906106b590339034908e908e90600401613560565b6000604051808303816000875af11580156106d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106fc919081019061358e565b91505b505b83816040516020016107149291906135fc565b60405160208183030381529060405295508734336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28a8a6040516107629291906135fc565b60405180910390a4505050505092915050565b606060008061078f6000356001600160e01b031916611a0f565b91509150346000141580156107a2575080155b1561080c5761080a7f9c4705229491d365fb5434052e12a386d6771d976bea61070a8c694e8affea3d60001b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049f92505050565b505b6000356001600160e01b03191615801561082d57506001600160a01b038216155b1561084b57604051806020016040528060008152509250505061094b565b6001600160a01b03821661089e576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024015b60405180910390fd5b600080836001600160a01b0316836108b75760006108b9565b345b888833346040516020016108d09493929190613621565b60408051601f19818403018152908290526108ea91613651565b60006040518083038185875af1925050503d8060008114610927576040519150601f19603f3d011682016040523d82523d6000602084013e61092c565b606091505b5091509150811561094257935061094b92505050565b80518060208301fd5b92915050565b60006001600160e01b03198216630b135d3f60e11b148061099b57506001600160e01b031982167f24871b3d00000000000000000000000000000000000000000000000000000000145b806109b657506001600160e01b03198216631aed5a8560e21b145b806109ea57506001600160e01b031982167f94be5