UNPKG

@credenza-web3/contracts

Version:

Credenza Contracts

584 lines (583 loc) 44.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "TokenEscrowMilestonesContract", "sourceName": "contracts/TokenEscrowMilestoneContract.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "approver", "type": "address" } ], "name": "ApproverAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "milestoneCount", "type": "uint256" } ], "name": "FundsLoaded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "milestone", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MilestoneReleased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "approver", "type": "address" } ], "name": "PaymentApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "RecipientDeclared", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "canceller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "returnedAmount", "type": "uint256" } ], "name": "TransactionCancelled", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_approver", "type": "address" } ], "name": "addApprover", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "addOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "approvalsCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "approvePayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "approvers", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelTransaction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "clearOwners", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentMilestone", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_approvers", "type": "address[]" } ], "name": "declareApprovers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "declareRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundsLoaded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDescription", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwners", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTrustedForwarder", "outputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "hasApproved", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprover", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_milestones", "type": "uint256" } ], "name": "loadEscrowFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "milestoneAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "milestoneCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "recipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "removeOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "retrieveApproverStatus", "outputs": [ { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "retrieveApprovers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "retrieveCurrentMilestone", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "retrieveLoadedAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "retrieveMilestoneCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "description", "type": "string" } ], "name": "setDescription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_forwarder", "type": "address" } ], "name": "setTrustedForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalApprovers", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a060405234801561000f575f80fd5b5060405161204638038061204683398101604081905261002e91610044565b60016004556001600160a01b0316608052610071565b5f60208284031215610054575f80fd5b81516001600160a01b038116811461006a575f80fd5b9392505050565b608051611f9a6100ac5f395f818161045d0152818161064001528181610928015281816109ad0152818161166701526116ec0152611f9a5ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806396fd340911610114578063c7c4ff46116100a9578063e02160c411610079578063e02160c414610434578063f4a4c0a714610447578063fa2c689e1461044f578063fc0c546a14610458578063fc99981d1461047f575f80fd5b8063c7c4ff46146103ea578063ce1b815f146103fd578063d3650fb81461040e578063da74222814610421575f80fd5b8063b646c194116100e4578063b646c19414610398578063c2e395a7146103ab578063c6d7ef03146103c0578063c73992e4146103c8575f80fd5b806396fd3409146103655780639e2af36c1461036d578063a0e67e2b1461037a578063b03048131461038f575f80fd5b80635260f5e6116101955780636d218e48116101655780636d218e481461030b5780637065cb481461032d57806374b25b8e1461034057806390c3f38f14610349578063941cf4151461035c575f80fd5b80635260f5e6146102ae578063572b6c05146102b65780635c8cf750146102d857806366d003ac146102e0575f80fd5b80631a39d8ef116101d05780631a39d8ef1461025a5780632a45ba0c146102635780632f54bf6e1461026b5780633acdcc30146102a6575f80fd5b80630681ca5514610201578063126b00251461021d578063173825d9146102325780631a09254114610245575b5f80fd5b61020a60085481565b6040519081526020015b60405180910390f35b61023061022b366004611a75565b610492565b005b610230610240366004611a95565b6106bb565b61024d610780565b6040516102149190611ae4565b61020a60075481565b60095461020a565b610296610279366004611a95565b6001600160a01b03165f9081526020819052604090205460ff1690565b6040519015158152602001610214565b60085461020a565b610230610810565b6102966102c4366004611a95565b6003546001600160a01b0391821691161490565b6102306108b6565b6006546102f3906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b610296610319366004611a95565b600d6020525f908152604090205460ff1681565b61023061033b366004611a95565b610a33565b61020a600f5481565b610230610357366004611b2a565b610ae5565b61020a600a5481565b610230610b22565b600b546102969060ff1681565b610382610ce8565b6040516102149190611bd5565b61020a60095481565b6102306103a6366004611a95565b610d47565b6103b3610ede565b6040516102149190611c21565b60075461020a565b6102966103d6366004611a95565b600e6020525f908152604090205460ff1681565b6005546102f3906001600160a01b031681565b6003546001600160a01b03166102f3565b6102f361041c366004611c5a565b610fb2565b61023061042f366004611a95565b610fda565b610230610442366004611c71565b611029565b6103826111bd565b61020a60105481565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b61023061048d366004611a95565b61121b565b61049a611306565b600b5460ff16156104eb5760405162461bcd60e51b8152602060048201526016602482015275115cd8dc9bddce88185b1c9958591e481b1bd859195960521b60448201526064015b60405180910390fd5b5f821161052e5760405162461bcd60e51b81526020600482015260116024820152700457363726f773a20616d6f756e74203e3607c1b60448201526064016104e2565b5f81116105755760405162461bcd60e51b81526020600482015260156024820152740457363726f773a206d696c6573746f6e6573203e3605c1b60448201526064016104e2565b5f61057e61135f565b600580546001600160a01b0319166001600160a01b03831617905590506105a481610a33565b6007839055600882905560016009556105bd8284611cf4565b600a55600b8054600160ff1991821681179092556001600160a01b038381165f818152600d6020526040812080549094168517909355600c8054808601825593527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b031916909217909155600f91909155610668907f000000000000000000000000000000000000000000000000000000000000000016823086611392565b60408051848152602081018490526001600160a01b038316917f678baa9d122c97ce15b38e6821a28eec692a0e95dbd47338865f5d218150eaed910160405180910390a2506106b76001600455565b5050565b60015415806106d057506106d061027961135f565b6106ec5760405162461bcd60e51b81526004016104e290611d13565b6001600160a01b0381165f9081526020819052604090205460ff166107535760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e6572000060448201526064016104e2565b6001600160a01b0381165f908152602081905260409020805460ff1916905561077d600182611403565b50565b60606002805461078f90611d55565b80601f01602080910402602001604051908101604052809291908181526020018280546107bb90611d55565b80156108065780601f106107dd57610100808354040283529160200191610806565b820191905f5260205f20905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b6001541580610825575061082561027961135f565b6108415760405162461bcd60e51b81526004016104e290611d13565b5f5b6001548110156108a8575f805f6001848154811061086357610863611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806108a081611d9b565b915050610843565b506108b460015f611a47565b565b60015415806108cb57506108cb61027961135f565b6108e75760405162461bcd60e51b81526004016104e290611d13565b6108ef611306565b600b5460ff166109115760405162461bcd60e51b81526004016104e290611db3565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109999190611ddd565b6005549091506109d6906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611502565b6109de61135f565b6001600160a01b03167fdceb09d55d6cf1424fafc2f14ad2b30c9e2cae7d1b5f28ef953c630ffef6659e82604051610a1891815260200190565b60405180910390a2610a28611532565b506108b46001600455565b6001541580610a485750610a4861027961135f565b610a645760405162461bcd60e51b81526004016104e290611d13565b6001600160a01b0381165f9081526020819052604090205460ff1661077d576001600160a01b03165f818152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055565b6001541580610afa5750610afa61027961135f565b610b165760405162461bcd60e51b81526004016104e290611d13565b60026106b78282611e41565b610b2a611306565b5f610b3361135f565b600b5490915060ff16610b585760405162461bcd60e51b81526004016104e290611db3565b6006546001600160a01b0316610ba75760405162461bcd60e51b8152602060048201526014602482015273115cd8dc9bddce881b9bc81c9958da5c1a595b9d60621b60448201526064016104e2565b6001600160a01b0381165f908152600d602052604090205460ff16610c055760405162461bcd60e51b815260206004820152601460248201527322b9b1b937bb9d103737ba1030b8383937bb32b960611b60448201526064016104e2565b6001600160a01b0381165f908152600e602052604090205460ff1615610c6d5760405162461bcd60e51b815260206004820152601860248201527f457363726f773a20616c726561647920617070726f766564000000000000000060448201526064016104e2565b6001600160a01b0381165f908152600e60205260408120805460ff191660011790556010805491610c9d83611d9b565b90915550506040516001600160a01b038216907ff38e0318caadc897596ef4a074a12afea95ec5bce6c8c27e54120e5b6da26fb8905f90a2600f5460105403610a2857610a2861163e565b6060600180548060200260200160405190810160405280929190818152602001828054801561080657602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d20575050505050905090565b6001541580610d5c5750610d5c61027961135f565b610d785760405162461bcd60e51b81526004016104e290611d13565b600b5460ff16610dc45760405162461bcd60e51b8152602060048201526017602482015276115cd8dc9bddce881b9bc8199d5b991cc81b1bd8591959604a1b60448201526064016104e2565b6001600160a01b038116610e125760405162461bcd60e51b815260206004820152601560248201527422b9b1b937bb9d103d32b9379030b8383937bb32b960591b60448201526064016104e2565b6001600160a01b0381165f908152600d602052604090205460ff1661077d576001600160a01b0381165f818152600d60205260408120805460ff19166001908117909155600c8054918201815582527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b031916909217909155600f805491610ea383611d9b565b90915550506040516001600160a01b038216907f835bddf1ceee4956e4329af9edf018523c1191238187a597453f6020bcadb042905f90a250565b600c546060905f9067ffffffffffffffff811115610efe57610efe611b16565b604051908082528060200260200182016040528015610f27578160200160208202803683370190505b5090505f5b600c54811015610fac57600e5f600c8381548110610f4c57610f4c611d87565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054825160ff90911690839083908110610f8a57610f8a611d87565b9115156020928302919091019091015280610fa481611d9b565b915050610f2c565b50919050565b600c8181548110610fc1575f80fd5b5f918252602090912001546001600160a01b0316905081565b6001541580610fef5750610fef61027961135f565b61100b5760405162461bcd60e51b81526004016104e290611d13565b600380546001600160a01b0319166001600160a01b03831617905550565b600154158061103e575061103e61027961135f565b61105a5760405162461bcd60e51b81526004016104e290611d13565b600b5460ff166110a65760405162461bcd60e51b8152602060048201526017602482015276115cd8dc9bddce881b9bc8199d5b991cc81b1bd8591959604a1b60448201526064016104e2565b5f5b818110156111b8575f8383838181106110c3576110c3611d87565b90506020020160208101906110d89190611a95565b6001600160a01b0381165f908152600d602052604090205490915060ff166111a5576001600160a01b0381165f818152600d60205260408120805460ff19166001908117909155600c8054918201815582527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b031916909217909155600f80549161116c83611d9b565b90915550506040516001600160a01b038216907f835bddf1ceee4956e4329af9edf018523c1191238187a597453f6020bcadb042905f90a25b50806111b081611d9b565b9150506110a8565b505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801561080657602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d20575050505050905090565b6001541580611230575061123061027961135f565b61124c5760405162461bcd60e51b81526004016104e290611d13565b600b5460ff1661126e5760405162461bcd60e51b81526004016104e290611db3565b6001600160a01b0381166112bd5760405162461bcd60e51b8152602060048201526016602482015275115cd8dc9bddce881e995c9bc81c9958da5c1a595b9d60521b60448201526064016104e2565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f9026684f979adf409a07ab388368302b05b5c18fae3dbf3c0a6f4cb5be333d05905f90a250565b6002600454036113585760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e2565b6002600455565b5f6014361080159061137b57506003546001600160a01b031633145b1561138d575060131936013560601c90565b503390565b6040516001600160a01b03808516602483015283166044820152606481018290526113fd9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261177b565b50505050565b5f5b82548110156111b857816001600160a01b031683828154811061142a5761142a611d87565b5f918252602090912001546001600160a01b0316036114f0578254839061145390600190611efd565b8154811061146357611463611d87565b905f5260205f20015f9054906101000a90046001600160a01b031683828154811061149057611490611d87565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806114cb576114cb611f16565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b806114fa81611d9b565b915050611405565b6040516001600160a01b0383166024820152604481018290526111b890849063a9059cbb60e01b906064016113c6565b5f5b600c548110156115e7575f600d5f600c848154811061155557611555611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191692151592909217909155600c8054600e918391859081106115a2576115a2611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806115df81611d9b565b915050611534565b506115f3600c5f611a47565b5f600781905560088190556009819055600a8190556010819055600f55600b805460ff19169055600680546001600160a01b03199081169091556005805490911690556108b4610810565b5f6008546009541461165257600a546116d8565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190611ddd565b600654909150611715906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611502565b6009546040518281527f9e069181c12760c2cd0078ed4facdbe1f3614543b0fbff5dbcac3cbc61a0b64e9060200160405180910390a260098054905f61175a83611d9b565b919050555061176761184e565b600854600954111561077d5761077d611532565b5f6117cf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118bd9092919063ffffffff16565b905080515f14806117ef5750808060200190518101906117ef9190611f2a565b6111b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104e2565b5f5b600c548110156118b6575f600e5f600c848154811061187157611871611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806118ae81611d9b565b915050611850565b505f601055565b60606118cb84845f856118d3565b949350505050565b6060824710156119345760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104e2565b5f80866001600160a01b0316858760405161194f9190611f49565b5f6040518083038185875af1925050503d805f8114611989576040519150601f19603f3d011682016040523d82523d5f602084013e61198e565b606091505b509150915061199f878383876119aa565b979650505050505050565b60608315611a185782515f03611a11576001600160a01b0385163b611a115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104e2565b50816118cb565b6118cb8383815115611a2d5781518083602001fd5b8060405162461bcd60e51b81526004016104e29190611ae4565b5080545f8255905f5260205f209081019061077d91905b80821115611a71575f8155600101611a5e565b5090565b5f8060408385031215611a86575f80fd5b50508035926020909101359150565b5f60208284031215611aa5575f80fd5b81356001600160a01b0381168114611abb575f80fd5b9392505050565b5f5b83811015611adc578181015183820152602001611ac4565b50505f910152565b602081525f8251806020840152611b02816040850160208701611ac2565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611b3a575f80fd5b813567ffffffffffffffff80821115611b51575f80fd5b818401915084601f830112611b64575f80fd5b813581811115611b7657611b76611b16565b604051601f8201601f19908116603f01168101908382118183101715611b9e57611b9e611b16565b81604052828152876020848701011115611bb6575f80fd5b826020860160208301375f928101602001929092525095945050505050565b602080825282518282018190525f9190848201906040850190845b81811015611c155783516001600160a01b031683529284019291840191600101611bf0565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b81811015611c15578351151583529284019291840191600101611c3c565b5f60208284031215611c6a575f80fd5b5035919050565b5f8060208385031215611c82575f80fd5b823567ffffffffffffffff80821115611c99575f80fd5b818501915085601f830112611cac575f80fd5b813581811115611cba575f80fd5b8660208260051b8501011115611cce575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52601160045260245ffd5b5f82611d0e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b600181811c90821680611d6957607f821691505b602082108103610fac57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201611dac57611dac611ce0565b5060010190565b60208082526010908201526f457363726f773a206e6f2066756e647360801b604082015260600190565b5f60208284031215611ded575f80fd5b5051919050565b601f8211156111b8575f81815260208120601f850160051c81016020861015611e1a5750805b601f850160051c820191505b81811015611e3957828155600101611e26565b505050505050565b815167ffffffffffffffff811115611e5b57611e5b611b16565b611e6f81611e698454611d55565b84611df4565b602080601f831160018114611ea2575f8415611e8b5750858301515b5f19600386901b1c1916600185901b178555611e39565b5f85815260208120601f198616915b82811015611ed057888601518255948401946001909101908401611eb1565b5085821015611eed57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115611f1057611f10611ce0565b92915050565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611f3a575f80fd5b81518015158114611abb575f80fd5b5f8251611f5a818460208701611ac2565b919091019291505056fea26469706673582212200421a4a15466188e400e0f4156608089bafb106f07b784585596933290651c8964736f6c63430008140033", "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806396fd340911610114578063c7c4ff46116100a9578063e02160c411610079578063e02160c414610434578063f4a4c0a714610447578063fa2c689e1461044f578063fc0c546a14610458578063fc99981d1461047f575f80fd5b8063c7c4ff46146103ea578063ce1b815f146103fd578063d3650fb81461040e578063da74222814610421575f80fd5b8063b646c194116100e4578063b646c19414610398578063c2e395a7146103ab578063c6d7ef03146103c0578063c73992e4146103c8575f80fd5b806396fd3409146103655780639e2af36c1461036d578063a0e67e2b1461037a578063b03048131461038f575f80fd5b80635260f5e6116101955780636d218e48116101655780636d218e481461030b5780637065cb481461032d57806374b25b8e1461034057806390c3f38f14610349578063941cf4151461035c575f80fd5b80635260f5e6146102ae578063572b6c05146102b65780635c8cf750146102d857806366d003ac146102e0575f80fd5b80631a39d8ef116101d05780631a39d8ef1461025a5780632a45ba0c146102635780632f54bf6e1461026b5780633acdcc30146102a6575f80fd5b80630681ca5514610201578063126b00251461021d578063173825d9146102325780631a09254114610245575b5f80fd5b61020a60085481565b6040519081526020015b60405180910390f35b61023061022b366004611a75565b610492565b005b610230610240366004611a95565b6106bb565b61024d610780565b6040516102149190611ae4565b61020a60075481565b60095461020a565b610296610279366004611a95565b6001600160a01b03165f9081526020819052604090205460ff1690565b6040519015158152602001610214565b60085461020a565b610230610810565b6102966102c4366004611a95565b6003546001600160a01b0391821691161490565b6102306108b6565b6006546102f3906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b610296610319366004611a95565b600d6020525f908152604090205460ff1681565b61023061033b366004611a95565b610a33565b61020a600f5481565b610230610357366004611b2a565b610ae5565b61020a600a5481565b610230610b22565b600b546102969060ff1681565b610382610ce8565b6040516102149190611bd5565b61020a60095481565b6102306103a6366004611a95565b610d47565b6103b3610ede565b6040516102149190611c21565b60075461020a565b6102966103d6366004611a95565b600e6020525f908152604090205460ff1681565b6005546102f3906001600160a01b031681565b6003546001600160a01b03166102f3565b6102f361041c366004611c5a565b610fb2565b61023061042f366004611a95565b610fda565b610230610442366004611c71565b611029565b6103826111bd565b61020a60105481565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b61023061048d366004611a95565b61121b565b61049a611306565b600b5460ff16156104eb5760405162461bcd60e51b8152602060048201526016602482015275115cd8dc9bddce88185b1c9958591e481b1bd859195960521b60448201526064015b60405180910390fd5b5f821161052e5760405162461bcd60e51b81526020600482015260116024820152700457363726f773a20616d6f756e74203e3607c1b60448201526064016104e2565b5f81116105755760405162461bcd60e51b81526020600482015260156024820152740457363726f773a206d696c6573746f6e6573203e3605c1b60448201526064016104e2565b5f61057e61135f565b600580546001600160a01b0319166001600160a01b03831617905590506105a481610a33565b6007839055600882905560016009556105bd8284611cf4565b600a55600b8054600160ff1991821681179092556001600160a01b038381165f818152600d6020526040812080549094168517909355600c8054808601825593527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790920180546001600160a01b031916909217909155600f91909155610668907f000000000000000000000000000000000000000000000000000000000000000016823086611392565b60408051848152602081018490526001600160a01b038316917f678baa9d122c97ce15b38e6821a28eec692a0e95dbd47338865f5d218150eaed910160405180910390a2506106b76001600455565b5050565b60015415806106d057506106d061027961135f565b6106ec5760405162461bcd60e51b81526004016104e290611d13565b6001600160a01b0381165f9081526020819052604090205460ff166107535760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e6572000060448201526064016104e2565b6001600160a01b0381165f908152602081905260409020805460ff1916905561077d600182611403565b50565b60606002805461078f90611d55565b80601f01602080910402602001604051908101604052809291908181526020018280546107bb90611d55565b80156108065780601f106107dd57610100808354040283529160200191610806565b820191905f5260205f20905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b6001541580610825575061082561027961135f565b6108415760405162461bcd60e51b81526004016104e290611d13565b5f5b6001548110156108a8575f805f6001848154811061086357610863611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806108a081611d9b565b915050610843565b506108b460015f611a47565b565b60015415806108cb57506108cb61027961135f565b6108e75760405162461bcd60e51b81526004016104e290611d13565b6108ef611306565b600b5460ff166109115760405162461bcd60e51b81526004016104e290611db3565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109999190611ddd565b6005549091506109d6906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611502565b6109de61135f565b6001600160a01b03167fdceb09d55d6cf1424fafc2f14ad2b30c9e2cae7d1b5f28ef953c630ffef6659e82604051610a1891815260200190565b60405180910390a2610a28611532565b506108b46001600455565b6001541580610a485750610a4861027961135f565b610a645760405162461bcd60e51b81526004016104e290611d13565b6001600160a01b0381165f9081526020819052604090205460ff1661077d576001600160a01b03165f818152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055565b6001541580610afa5750610afa61027961135f565b610b165760405162461bcd60e51b81526004016104e290611d13565b60026106b78282611e41565b610b2a611306565b5f610b3361135f565b600b5490915060ff16610b585760405162461bcd60e51b81526004016104e290611db3565b6006546001600160a01b0316610ba75760405162461bcd60e51b8152602060048201526014602482015273115cd8dc9bddce881b9bc81c9958da5c1a595b9d60621b60448201526064016104e2565b6001600160a01b0381165f908152600d602052604090205460ff16610c055760405162461bcd60e51b815260206004820152601460248201527322b9b1b937bb9d103737ba1030b8383937bb32b960611b60448201526064016104e2565b6001600160a01b0381165f908152600e602052604090205460ff1615610c6d5760405162461bcd60e51b815260206004820152601860248201527f457363726f773a20616c726561647920617070726f766564000000000000000060448201526064016104e2565b6001600160a01b0381165f908152600e60205260408120805460ff191660011790556010805491610c9d83611d9b565b90915550506040516001600160a01b038216907ff38e0318caadc897596ef4a074a12afea95ec5bce6c8c27e54120e5b6da26fb8905f90a2600f5460105403610a2857610a2861163e565b6060600180548060200260200160405190810160405280929190818152602001828054801561080657602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d20575050505050905090565b6001541580610d5c5750610d5c61027961135f565b610d785760405162461bcd60e51b81526004016104e290611d13565b600b5460ff16610dc45760405162461bcd60e51b8152602060048201526017602482015276115cd8dc9bddce881b9bc8199d5b991cc81b1bd8591959604a1b60448201526064016104e2565b6001600160a01b038116610e125760405162461bcd60e51b815260206004820152601560248201527422b9b1b937bb9d103d32b9379030b8383937bb32b960591b60448201526064016104e2565b6001600160a01b0381165f908152600d602052604090205460ff1661077d576001600160a01b0381165f818152600d60205260408120805460ff19166001908117909155600c8054918201815582527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b031916909217909155600f805491610ea383611d9b565b90915550506040516001600160a01b038216907f835bddf1ceee4956e4329af9edf018523c1191238187a597453f6020bcadb042905f90a250565b600c546060905f9067ffffffffffffffff811115610efe57610efe611b16565b604051908082528060200260200182016040528015610f27578160200160208202803683370190505b5090505f5b600c54811015610fac57600e5f600c8381548110610f4c57610f4c611d87565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054825160ff90911690839083908110610f8a57610f8a611d87565b9115156020928302919091019091015280610fa481611d9b565b915050610f2c565b50919050565b600c8181548110610fc1575f80fd5b5f918252602090912001546001600160a01b0316905081565b6001541580610fef5750610fef61027961135f565b61100b5760405162461bcd60e51b81526004016104e290611d13565b600380546001600160a01b0319166001600160a01b03831617905550565b600154158061103e575061103e61027961135f565b61105a5760405162461bcd60e51b81526004016104e290611d13565b600b5460ff166110a65760405162461bcd60e51b8152602060048201526017602482015276115cd8dc9bddce881b9bc8199d5b991cc81b1bd8591959604a1b60448201526064016104e2565b5f5b818110156111b8575f8383838181106110c3576110c3611d87565b90506020020160208101906110d89190611a95565b6001600160a01b0381165f908152600d602052604090205490915060ff166111a5576001600160a01b0381165f818152600d60205260408120805460ff19166001908117909155600c8054918201815582527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b031916909217909155600f80549161116c83611d9b565b90915550506040516001600160a01b038216907f835bddf1ceee4956e4329af9edf018523c1191238187a597453f6020bcadb042905f90a25b50806111b081611d9b565b9150506110a8565b505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801561080657602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d20575050505050905090565b6001541580611230575061123061027961135f565b61124c5760405162461bcd60e51b81526004016104e290611d13565b600b5460ff1661126e5760405162461bcd60e51b81526004016104e290611db3565b6001600160a01b0381166112bd5760405162461bcd60e51b8152602060048201526016602482015275115cd8dc9bddce881e995c9bc81c9958da5c1a595b9d60521b60448201526064016104e2565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f9026684f979adf409a07ab388368302b05b5c18fae3dbf3c0a6f4cb5be333d05905f90a250565b6002600454036113585760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104e2565b6002600455565b5f6014361080159061137b57506003546001600160a01b031633145b1561138d575060131936013560601c90565b503390565b6040516001600160a01b03808516602483015283166044820152606481018290526113fd9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261177b565b50505050565b5f5b82548110156111b857816001600160a01b031683828154811061142a5761142a611d87565b5f918252602090912001546001600160a01b0316036114f0578254839061145390600190611efd565b8154811061146357611463611d87565b905f5260205f20015f9054906101000a90046001600160a01b031683828154811061149057611490611d87565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806114cb576114cb611f16565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b806114fa81611d9b565b915050611405565b6040516001600160a01b0383166024820152604481018290526111b890849063a9059cbb60e01b906064016113c6565b5f5b600c548110156115e7575f600d5f600c848154811061155557611555611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191692151592909217909155600c8054600e918391859081106115a2576115a2611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806115df81611d9b565b915050611534565b506115f3600c5f611a47565b5f600781905560088190556009819055600a8190556010819055600f55600b805460ff19169055600680546001600160a01b03199081169091556005805490911690556108b4610810565b5f6008546009541461165257600a546116d8565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190611ddd565b600654909150611715906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611502565b6009546040518281527f9e069181c12760c2cd0078ed4facdbe1f3614543b0fbff5dbcac3cbc61a0b64e9060200160405180910390a260098054905f61175a83611d9b565b919050555061176761184e565b600854600954111561077d5761077d611532565b5f6117cf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118bd9092919063ffffffff16565b905080515f14806117ef5750808060200190518101906117ef9190611f2a565b6111b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104e2565b5f5b600c548110156118b6575f600e5f600c848154811061187157611871611d87565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806118ae81611d9b565b915050611850565b505f601055565b60606118cb84845f856118d3565b949350505050565b6060824710156119345760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104e2565b5f80866001600160a01b0316858760405161194f9190611f49565b5f6040518083038185875af1925050503d805f8114611989576040519150601f19603f3d011682016040523d82523d5f602084013e61198e565b606091505b509150915061199f878383876119aa565b979650505050505050565b60608315611a185782515f03611a11576001600160a01b0385163b611a115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104e2565b50816118cb565b6118cb8383815115611a2d5781518083602001fd5b8060405162461bcd60e51b81526004016104e29190611ae4565b5080545f8255905f5260205f209081019061077d91905b80821115611a71575f8155600101611a5e565b5090565b5f8060408385031215611a86575f80fd5b50508035926020909101359150565b5f60208284031215611aa5575f80fd5b81356001600160a01b0381168114611abb575f80fd5b9392505050565b5f5b83811015611adc578181015183820152602001611ac4565b50505f910152565b602081525f8251806020840152611b02816040850160208701611ac2565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611b3a575f80fd5b813567ffffffffffffffff80821115611b51575f80fd5b818401915084601f830112611b64575f80fd5b813581811115611b7657611b76611b16565b604051601f8201601f19908116603f01168101908382118183101715611b9e57611b9e611b16565b81604052828152876020848701011115611bb6575f80fd5b826020860160208301375f928101602001929092525095945050505050565b602080825282518282018190525f9190848201906040850190845b81811015611c155783516001600160a01b031683529284019291840191600101611bf0565b50909695505050505050565b602080825282518282018190525f9190848201906040850190845b81811015611c15578351151583529284019291840191600101611c3c565b5f60208284031215611c6a575f80fd5b5035919050565b5f8060208385031215611c82575f80fd5b823567ffffffffffffffff80821115611c99575f80fd5b818501915085601f830112611cac575f80fd5b813581811115611cba575f80fd5b8660208260051b8501011115611cce575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52601160045260245ffd5b5f82611d0e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b600181811c90821680611d6957607f821691505b602082108103610fac57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201611dac57611dac611ce0565b5060010190565b60208082526010908201526f457363726f773a206e6f2066756e647360801b604082015260600190565b5f60208284031215611ded575f80fd5b5051919050565b601f8211156111b8575f81815260208120601f850160051c81016020861015611e1a5750805b601f850160051c820191505b81811015611e3957828155600101611e26565b505050505050565b815167ffffffffffffffff811115611e5b57611e5b611b16565b611e6f81611e698454611d55565b84611df4565b602080601f831160018114611ea2575f8415611e8b5750858301515b5f19600386901b1c1916600185901b178555611e39565b5f85815260208120601f198616915b82811015611ed057888601518255948401946001909101908401611eb1565b5085821015611eed57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115611f1057611f10611ce0565b92915050565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611f3a575f80fd5b81518015158114611abb575f80fd5b5f8251611f5a818460208701611ac2565b919091019291505056fea26469706673582212200421a4a15466188e400e0f4156608089bafb106f07b784585596933290651c8964736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} }