@credenza-web3/contracts
Version:
Credenza Contracts
746 lines • 51.3 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "MetaLedgerContract",
"sourceName": "contracts/MetaLedgerContract.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "meta",
"type": "string"
}
],
"name": "AddPoints",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": true,
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
}
],
"name": "RedeemPoints",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "partnerAddress",
"type": "address"
}
],
"name": "addAuthorizedPartner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
}
],
"internalType": "struct MetaLedgerContract.AddPointsBatchItem[]",
"name": "items",
"type": "tuple[]"
}
],
"name": "addBatchPoints",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
},
{
"internalType": "string",
"name": "metadata",
"type": "string"
}
],
"name": "addMetaPoints",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "addOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
}
],
"name": "addPoints",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "checkLifetimePoints",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "checkPoints",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "clearOwners",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "coinContract",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
}
],
"name": "convertPointsToCoins",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
}
],
"name": "forfeitPoints",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getCoinTransferSourceAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDescription",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "groupId",
"type": "uint256"
}
],
"name": "getGroupManager",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getOwners",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPartners",
"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": "userAddr",
"type": "address"
}
],
"name": "getUserGroup",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVersion",
"outputs": [
{
"internalType": "string",
"name": "version",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "partnerAddress",
"type": "address"
}
],
"name": "isAuthorizedPartner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "userAddress",
"type": "address"
},
{
"internalType": "address",
"name": "partnerAddress",
"type": "address"
}
],
"name": "isBlocked",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "userAddress",
"type": "address"
}
],
"name": "isOptOut",
"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": "recipient",
"type": "address"
}
],
"name": "isPartner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "isPartnerOrOwner",
"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": "address",
"name": "userAddress",
"type": "address"
}
],
"name": "optOut",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "int256",
"name": "amount",
"type": "int256"
},
{
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
}
],
"name": "redeemPoints",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "partnerAddress",
"type": "address"
}
],
"name": "removeAuthorizedPartner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "userAddress",
"type": "address"
}
],
"name": "removeOptOut",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "removeOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "retrieveLogs",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "eventId",
"type": "uint256"
},
{
"internalType": "int256",
"name": "pointsAmount",
"type": "int256"
},
{
"internalType": "string",
"name": "meta",
"type": "string"
}
],
"internalType": "struct MetaLedgerContract.PointsLogItem[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "partnerAddress",
"type": "address"
},
{
"internalType": "bool",
"name": "isBlocked",
"type": "bool"
}
],
"name": "setBlock",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "coinContractAddress",
"type": "address"
}
],
"name": "setCoinContractAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newAddr",
"type": "address"
}
],
"name": "setCoinTransferSourceAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "setDescription",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "groupId",
"type": "uint256"
},
{
"internalType": "address",
"name": "manager",
"type": "address"
}
],
"name": "setGroupManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_forwarder",
"type": "address"
}
],
"name": "setTrustedForwarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "userAddr",
"type": "address"
},
{
"internalType": "uint256",
"name": "groupId",
"type": "uint256"
}
],
"name": "setUserGroup",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801562000010575f80fd5b50620000256200001f62000055565b6200008a565b6200002f62000055565b600580546001600160a01b0319166001600160a01b0392909216919091179055620001a1565b5f601436108015906200007257506003546001600160a01b031633145b1562000085575060131936013560601c90565b503390565b6001541580620000c05750620000c0620000a362000055565b6001600160a01b03165f9081526020819052604090205460ff1690565b6200011c5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604482015261371760f11b606482015260840160405180910390fd5b6001600160a01b0381165f9081526020819052604090205460ff166200019e576001600160a01b0381165f818152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191690911790555b50565b6121bb80620001af5f395ff3fe608060405234801561000f575f80fd5b5060043610610234575f3560e01c806373e29b0d11610135578063ce1b815f116100b4578063e1e610e111610079578063e1e610e114610540578063e9858e3014610553578063ea0f40fe1461057e578063ee28f50114610591578063f617d91d146105b1575f80fd5b8063ce1b815f146104ce578063d4610483146104df578063d4f1205c146104f2578063da74222814610505578063dc79b17614610518575f80fd5b8063954a85b4116100fa578063954a85b414610465578063a0e67e2b1461048d578063a99752c414610495578063ad102b84146104a8578063c75305bc146104bb575f80fd5b806373e29b0d1461042257806386c58d3e146104375780638c0f9aac1461039357806390c3f38f1461044a57806391825dca1461045d575f80fd5b8063356baf0c116101c15780635e9b45e1116101865780635e9b45e114610393578063668ff427146103be5780637065cb48146103d1578063717fbc96146103e457806372dd52e3146103f7575f80fd5b8063356baf0c1461033057806350ee7b69146103435780635260f5e614610356578063572b6c051461035e5780635d0fd6c114610380575f80fd5b80631a092541116102075780631a092541146102be57806327a920dc146102c657806329dd5120146102d95780632f54bf6e146102ec57806334e0ee2e1461030f575f80fd5b80630d8e6e2c146102385780630ef6627a1461028357806315650cac14610298578063173825d9146102ab575b5f80fd5b60408051808201909152601a81527f4d6574614c6564676572436f6e7472616374207620312e302e3000000000000060208201525b60405161027a91906119b1565b60405180910390f35b610296610291366004611abf565b6105c4565b005b6102966102a6366004611b1c565b61078c565b6102966102b9366004611b4c565b6107d2565b61026d610885565b6102966102d4366004611b4c565b610915565b6102966102e7366004611b65565b61095e565b6102ff6102fa366004611b4c565b610a60565b604051901515815260200161027a565b61032261031d366004611b4c565b610a7d565b60405190815260200161027a565b61029661033e366004611c3a565b610ac2565b610296610351366004611c6f565b610b0e565b610296610c0e565b6102ff61036c366004611b4c565b6003546001600160a01b0391821691161490565b6102ff61038e366004611b4c565b610cb4565b6102ff6103a1366004611b4c565b6001600160a01b03165f908152600a602052604090205460ff1690565b6102966103cc366004611b1c565b610ce6565b6102966103df366004611b4c565b610f3b565b6102966103f2366004611ca4565b610fdb565b60045461040a906001600160a01b031681565b6040516001600160a01b03909116815260200161027a565b61042a611039565b60405161027a9190611cce565b6102ff610445366004611d1a565b611098565b610296610458366004611d42565b6110dc565b61040a611119565b61040a610473366004611d7c565b5f908152600860205260409020546001600160a01b031690565b61042a611151565b6102966104a3366004611b4c565b6111af565b6102966104b6366004611c3a565b611245565b6102966104c9366004611b4c565b611330565b6003546001600160a01b031661040a565b6102966104ed366004611b4c565b61138b565b610296610500366004611b4c565b6113d5565b610296610513366004611b4c565b61141e565b610322610526366004611b4c565b6001600160a01b03165f9081526007602052604090205490565b61029661054e366004611c3a565b61146d565b6102ff610561366004611b4c565b6001600160a01b03165f9081526006602052604090205460ff1690565b61032261058c366004611b4c565b61163d565b6105a461059f366004611b4c565b611682565b60405161027a9190611d93565b6102966105bf366004611b4c565b6117c7565b6105cf61038e61180e565b6105f45760405162461bcd60e51b81526004016105eb90611e1c565b60405180910390fd5b6001600160a01b0384165f9081526006602052604090205460ff161561062c5760405162461bcd60e51b81526004016105eb90611e69565b5f831361064b5760405162461bcd60e51b81526004016105eb90611ea0565b6106578461044561180e565b156106745760405162461bcd60e51b81526004016105eb90611ee2565b6001600160a01b0384165f908152600c60205260408120805485929061069b908490611f2d565b90915550506001600160a01b0384165f908152600d6020526040812080548592906106c7908490611f2d565b90915550506001600160a01b0384165f908152600e6020908152604080832081516080810183524281528084018781529281018881526060820187815283546001818101865594885295909620825160049096020194855592519184019190915590516002830155915160038201906107409082611fd9565b5050508183856001600160a01b03167fc28761e64307fa61418bb79e637161c650ab4b9a85197bd2638952532cca519a8460405161077e91906119b1565b60405180910390a450505050565b61079761038e61180e565b6107b35760405162461bcd60e51b81526004016105eb90611e1c565b6107cd83838360405180602001604052805f8152506105c4565b505050565b60015415806107e757506107e76102fa61180e565b6108035760405162461bcd60e51b81526004016105eb90612095565b61080c81610a60565b6108585760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e6572000060448201526064016105eb565b6001600160a01b0381165f908152602081905260409020805460ff19169055610882600182611841565b50565b60606002805461089490611f54565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090611f54565b801561090b5780601f106108e25761010080835404028352916020019161090b565b820191905f5260205f20905b8154815290600101906020018083116108ee57829003601f168201915b5050505050905090565b61092061038e61180e565b61093c5760405162461bcd60e51b81526004016105eb90611e1c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61096961038e61180e565b6109855760405162461bcd60e51b81526004016105eb90611e1c565b5f5b8151811015610a5c5760065f8383815181106109a5576109a56120d7565b602090810291909101810151516001600160a01b031682528101919091526040015f205460ff16156109e95760405162461bcd60e51b81526004016105eb90611e69565b610a4a8282815181106109fe576109fe6120d7565b60200260200101515f0151838381518110610a1b57610a1b6120d7565b602002602001015160200151848481518110610a3957610a396120d7565b60200260200101516040015161078c565b80610a54816120eb565b915050610987565b5050565b6001600160a01b03165f9081526020819052604090205460ff1690565b5f610a8a8261044561180e565b15610aa75760405162461bcd60e51b81526004016105eb90611ee2565b506001600160a01b03165f908152600c602052604090205490565b6001541580610ad75750610ad76102fa61180e565b610af35760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b039091165f90815260076020526040902055565b610b1782610a60565b15610b645760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e206e6f7420626520626c6f636b6564000000000000000060448201526064016105eb565b816001600160a01b0316610b7661180e565b6001600160a01b031603610bc35760405162461bcd60e51b815260206004820152601460248201527321b0b7303a10313637b1b5903cb7bab939b2b63360611b60448201526064016105eb565b8060095f610bcf61180e565b6001600160a01b03908116825260208083019390935260409182015f90812096909116815294909152909220805460ff19169215159290921790915550565b6001541580610c235750610c236102fa61180e565b610c3f5760405162461bcd60e51b81526004016105eb90612095565b5f5b600154811015610ca6575f805f60018481548110610c6157610c616120d7565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610c9e816120eb565b915050610c41565b50610cb260015f611940565b565b5f610cbe82610a60565b80610ce057506001600160a01b0382165f908152600a602052604090205460ff165b92915050565b6001600160a01b0383165f9081526006602052604090205460ff1615610d1e5760405162461bcd60e51b81526004016105eb90611e69565b610d2661180e565b6001600160a01b0316836001600160a01b03161480610d4b5750610d4b61038e61180e565b610d975760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e2072656465656d206f6e6c7920796f757220706f696e74730060448201526064016105eb565b610da38361044561180e565b15610dc05760405162461bcd60e51b81526004016105eb90611ee2565b5f8213610ddf5760405162461bcd60e51b81526004016105eb90611ea0565b6001600160a01b0383165f908152600c6020526040902054821315610e3a5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820706f696e747360781b60448201526064016105eb565b6001600160a01b0383165f908152600c602052604081208054849290610e61908490612103565b90915550506001600160a01b0383165f908152600e60209081526040918290208251608081018452428152918201849052918101610e9e85612129565b815260408051602081810183525f808352938101919091528454600181810187559584529281902084516004909402019283558301519382019390935591810151600283015560608101519091906003820190610efb9082611fd9565b5050508082846001600160a01b03167fee3b1ba81f87423fecc5e13b69a00e5be4d7e9970fb24498122085bbef9b973860405160405180910390a4505050565b6001541580610f505750610f506102fa61180e565b610f6c5760405162461bcd60e51b81526004016105eb90612095565b610f7581610a60565b610882576001600160a01b03165f818152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055565b6001541580610ff05750610ff06102fa61180e565b61100c5760405162461bcd60e51b81526004016105eb90612095565b5f9182526008602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561090b57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611071575050505050905090565b5f6110a282610a60565b156110ae57505f610ce0565b506001600160a01b039182165f90815260096020908152604080832093909416825291909152205460ff1690565b60015415806110f157506110f16102fa61180e565b61110d5760405162461bcd60e51b81526004016105eb90612095565b6002610a5c8282611fd9565b5f61112561038e61180e565b6111415760405162461bcd60e51b81526004016105eb90611e1c565b506005546001600160a01b031690565b6060600180548060200260200160405190810160405280929190818152602001828054801561090b57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611071575050505050905090565b60015415806111c457506111c46102fa61180e565b6111e05760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b03165f818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0382165f9081526006602052604090205460ff161561127d5760405162461bcd60e51b81526004016105eb90611e69565b5f811361129c5760405162461bcd60e51b81526004016105eb90611ea0565b6112a882826001610ce6565b600480546005546040516323b872dd60e01b81526001600160a01b0391821693810193909352848116602484015260448301849052169081906323b872dd906064016020604051808303815f875af1158015611306573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132a9190612143565b50505050565b600154158061134557506113456102fa61180e565b6113615760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b0381165f908152600a60205260409020805460ff19169055610882600b82611841565b61139661038e61180e565b6113b25760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6113e061038e61180e565b6113fc5760405162461bcd60e51b81526004016105eb90611e1c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600154158061143357506114336102fa61180e565b61144f5760405162461bcd60e51b81526004016105eb90612095565b600380546001600160a01b0319166001600160a01b03831617905550565b61147861038e61180e565b6114945760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b0382165f9081526006602052604090205460ff16156114cc5760405162461bcd60e51b81526004016105eb90611e69565b5f81136114eb5760405162461bcd60e51b81526004016105eb90611ea0565b6001600160a01b0382165f908152600c60205260409020548113156115465760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820706f696e747360781b60448201526064016105eb565b6001600160a01b0382165f908152600c60205260408120805483929061156d908490612103565b90915550506001600160a01b0382165f908152600d602052604081208054839290611599908490612103565b90915550506001600160a01b0382165f908152600e602090815260409182902082516080810184524281526002928101929092529181016115d984612129565b815260408051602081810183525f8083529381019190915284546001818101875595845292819020845160049094020192835583015193820193909355918101516002830155606081015190919060038201906116369082611fd9565b5050505050565b5f61164a8261044561180e565b156116675760405162461bcd60e51b81526004016105eb90611ee2565b506001600160a01b03165f908152600d602052604090205490565b60606116908261044561180e565b156116ad5760405162461bcd60e51b81526004016105eb90611ee2565b6001600160a01b0382165f908152600e6020908152604080832080548251818502810185019093528083529193909284015b828210156117bc578382905f5260205f2090600402016040518060800160405290815f8201548152602001600182015481526020016002820154815260200160038201805461172d90611f54565b80601f016020809104026020016040519081016040528092919081815260200182805461175990611f54565b80156117a45780601f1061177b576101008083540402835291602001916117a4565b820191905f5260205f20905b81548152906001019060200180831161178757829003601f168201915b505050505081525050815260200190600101906116df565b505050509050919050565b6117d261038e61180e565b6117ee5760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b03165f908152600660205260409020805460ff19169055565b5f6014361080159061182a57506003546001600160a01b031633145b1561183c575060131936013560601c90565b503390565b5f5b82548110156107cd57816001600160a01b0316838281548110611868576118686120d7565b5f918252602090912001546001600160a01b03160361192e57825483906118919060019061215e565b815481106118a1576118a16120d7565b905f5260205f20015f9054906101000a90046001600160a01b03168382815481106118ce576118ce6120d7565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508280548061190957611909612171565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b80611938816120eb565b915050611843565b5080545f8255905f5260205f209081019061088291905b8082111561196a575f8155600101611957565b5090565b5f81518084525f5b8181101561199257602081850181015186830182015201611976565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6119c3602083018461196e565b9392505050565b80356001600160a01b03811681146119e0575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715611a1c57611a1c6119e5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a4b57611a4b6119e5565b604052919050565b5f82601f830112611a62575f80fd5b813567ffffffffffffffff811115611a7c57611a7c6119e5565b611a8f601f8201601f1916602001611a22565b818152846020838601011115611aa3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611ad2575f80fd5b611adb856119ca565b93506020850135925060408501359150606085013567ffffffffffffffff811115611b04575f80fd5b611b1087828801611a53565b91505092959194509250565b5f805f60608486031215611b2e575f80fd5b611b37846119ca565b95602085013595506040909401359392505050565b5f60208284031215611b5c575f80fd5b6119c3826119ca565b5f6020808385031215611b76575f80fd5b823567ffffffffffffffff80821115611b8d575f80fd5b818501915085601f830112611ba0575f80fd5b813581811115611bb257611bb26119e5565b611bc0848260051b01611a22565b81815284810192506060918202840185019188831115611bde575f80fd5b938501935b82851015611c2e5780858a031215611bfa575f8081fd5b611c026119f9565b611c0b866119ca565b815285870135878201526040808701359082015284529384019392850192611be3565b50979650505050505050565b5f8060408385031215611c4b575f80fd5b611c54836119ca565b946020939093013593505050565b8015158114610882575f80fd5b5f8060408385031215611c80575f80fd5b611c89836119ca565b91506020830135611c9981611c62565b809150509250929050565b5f8060408385031215611cb5575f80fd5b82359150611cc5602084016119ca565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015611d0e5783516001600160a01b031683529284019291840191600101611ce9565b50909695505050505050565b5f8060408385031215611d2b575f80fd5b611d34836119ca565b9150611cc5602084016119ca565b5f60208284031215611d52575f80fd5b813567ffffffffffffffff811115611d68575f80fd5b611d7484828501611a53565b949350505050565b5f60208284031215611d8c575f80fd5b5035919050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015611e0e57888303603f1901855281518051845287810151888501528681015187850152606090810151608091850182905290611dfa8186018361196e565b968901969450505090860190600101611db8565b509098975050505050505050565b6020808252602d908201527f4f6e6c79206f776e6572206f7220706172746e65722063616e2063616c6c207460408201526c3434b990333ab731ba34b7b71760991b606082015260800190565b6020808252601a908201527f546172676574206164647265737320776173206f7074206f7574000000000000604082015260600190565b60208082526022908201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252601e908201527f53656e646572206164647265737320626c6f636b656420627920757365720000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f831280158216821582161715611f4c57611f4c611f19565b505092915050565b600181811c90821680611f6857607f821691505b602082108103611f8657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156107cd575f81815260208120601f850160051c81016020861015611fb25750805b601f850160051c820191505b81811015611fd157828155600101611fbe565b505050505050565b815167ffffffffffffffff811115611ff357611ff36119e5565b612007816120018454611f54565b84611f8c565b602080601f83116001811461203a575f84156120235750858301515b5f19600386901b1c1916600185901b178555611fd1565b5f85815260208120601f198616915b8281101561206857888601518255948401946001909101908401612049565b508582101561208557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526022908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f600182016120fc576120fc611f19565b5060010190565b8181035f83128015838313168383128216171561212257612122611f19565b5092915050565b5f600160ff1b820161213d5761213d611f19565b505f0390565b5f60208284031215612153575f80fd5b81516119c381611c62565b81810381811115610ce057610ce0611f19565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212202ade7a8f4a47373bc32010738e32e322ab37299be88de95525cfc5de64d30af464736f6c63430008140033",
"deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610234575f3560e01c806373e29b0d11610135578063ce1b815f116100b4578063e1e610e111610079578063e1e610e114610540578063e9858e3014610553578063ea0f40fe1461057e578063ee28f50114610591578063f617d91d146105b1575f80fd5b8063ce1b815f146104ce578063d4610483146104df578063d4f1205c146104f2578063da74222814610505578063dc79b17614610518575f80fd5b8063954a85b4116100fa578063954a85b414610465578063a0e67e2b1461048d578063a99752c414610495578063ad102b84146104a8578063c75305bc146104bb575f80fd5b806373e29b0d1461042257806386c58d3e146104375780638c0f9aac1461039357806390c3f38f1461044a57806391825dca1461045d575f80fd5b8063356baf0c116101c15780635e9b45e1116101865780635e9b45e114610393578063668ff427146103be5780637065cb48146103d1578063717fbc96146103e457806372dd52e3146103f7575f80fd5b8063356baf0c1461033057806350ee7b69146103435780635260f5e614610356578063572b6c051461035e5780635d0fd6c114610380575f80fd5b80631a092541116102075780631a092541146102be57806327a920dc146102c657806329dd5120146102d95780632f54bf6e146102ec57806334e0ee2e1461030f575f80fd5b80630d8e6e2c146102385780630ef6627a1461028357806315650cac14610298578063173825d9146102ab575b5f80fd5b60408051808201909152601a81527f4d6574614c6564676572436f6e7472616374207620312e302e3000000000000060208201525b60405161027a91906119b1565b60405180910390f35b610296610291366004611abf565b6105c4565b005b6102966102a6366004611b1c565b61078c565b6102966102b9366004611b4c565b6107d2565b61026d610885565b6102966102d4366004611b4c565b610915565b6102966102e7366004611b65565b61095e565b6102ff6102fa366004611b4c565b610a60565b604051901515815260200161027a565b61032261031d366004611b4c565b610a7d565b60405190815260200161027a565b61029661033e366004611c3a565b610ac2565b610296610351366004611c6f565b610b0e565b610296610c0e565b6102ff61036c366004611b4c565b6003546001600160a01b0391821691161490565b6102ff61038e366004611b4c565b610cb4565b6102ff6103a1366004611b4c565b6001600160a01b03165f908152600a602052604090205460ff1690565b6102966103cc366004611b1c565b610ce6565b6102966103df366004611b4c565b610f3b565b6102966103f2366004611ca4565b610fdb565b60045461040a906001600160a01b031681565b6040516001600160a01b03909116815260200161027a565b61042a611039565b60405161027a9190611cce565b6102ff610445366004611d1a565b611098565b610296610458366004611d42565b6110dc565b61040a611119565b61040a610473366004611d7c565b5f908152600860205260409020546001600160a01b031690565b61042a611151565b6102966104a3366004611b4c565b6111af565b6102966104b6366004611c3a565b611245565b6102966104c9366004611b4c565b611330565b6003546001600160a01b031661040a565b6102966104ed366004611b4c565b61138b565b610296610500366004611b4c565b6113d5565b610296610513366004611b4c565b61141e565b610322610526366004611b4c565b6001600160a01b03165f9081526007602052604090205490565b61029661054e366004611c3a565b61146d565b6102ff610561366004611b4c565b6001600160a01b03165f9081526006602052604090205460ff1690565b61032261058c366004611b4c565b61163d565b6105a461059f366004611b4c565b611682565b60405161027a9190611d93565b6102966105bf366004611b4c565b6117c7565b6105cf61038e61180e565b6105f45760405162461bcd60e51b81526004016105eb90611e1c565b60405180910390fd5b6001600160a01b0384165f9081526006602052604090205460ff161561062c5760405162461bcd60e51b81526004016105eb90611e69565b5f831361064b5760405162461bcd60e51b81526004016105eb90611ea0565b6106578461044561180e565b156106745760405162461bcd60e51b81526004016105eb90611ee2565b6001600160a01b0384165f908152600c60205260408120805485929061069b908490611f2d565b90915550506001600160a01b0384165f908152600d6020526040812080548592906106c7908490611f2d565b90915550506001600160a01b0384165f908152600e6020908152604080832081516080810183524281528084018781529281018881526060820187815283546001818101865594885295909620825160049096020194855592519184019190915590516002830155915160038201906107409082611fd9565b5050508183856001600160a01b03167fc28761e64307fa61418bb79e637161c650ab4b9a85197bd2638952532cca519a8460405161077e91906119b1565b60405180910390a450505050565b61079761038e61180e565b6107b35760405162461bcd60e51b81526004016105eb90611e1c565b6107cd83838360405180602001604052805f8152506105c4565b505050565b60015415806107e757506107e76102fa61180e565b6108035760405162461bcd60e51b81526004016105eb90612095565b61080c81610a60565b6108585760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e6572000060448201526064016105eb565b6001600160a01b0381165f908152602081905260409020805460ff19169055610882600182611841565b50565b60606002805461089490611f54565b80601f01602080910402602001604051908101604052809291908181526020018280546108c090611f54565b801561090b5780601f106108e25761010080835404028352916020019161090b565b820191905f5260205f20905b8154815290600101906020018083116108ee57829003601f168201915b5050505050905090565b61092061038e61180e565b61093c5760405162461bcd60e51b81526004016105eb90611e1c565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61096961038e61180e565b6109855760405162461bcd60e51b81526004016105eb90611e1c565b5f5b8151811015610a5c5760065f8383815181106109a5576109a56120d7565b602090810291909101810151516001600160a01b031682528101919091526040015f205460ff16156109e95760405162461bcd60e51b81526004016105eb90611e69565b610a4a8282815181106109fe576109fe6120d7565b60200260200101515f0151838381518110610a1b57610a1b6120d7565b602002602001015160200151848481518110610a3957610a396120d7565b60200260200101516040015161078c565b80610a54816120eb565b915050610987565b5050565b6001600160a01b03165f9081526020819052604090205460ff1690565b5f610a8a8261044561180e565b15610aa75760405162461bcd60e51b81526004016105eb90611ee2565b506001600160a01b03165f908152600c602052604090205490565b6001541580610ad75750610ad76102fa61180e565b610af35760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b039091165f90815260076020526040902055565b610b1782610a60565b15610b645760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e206e6f7420626520626c6f636b6564000000000000000060448201526064016105eb565b816001600160a01b0316610b7661180e565b6001600160a01b031603610bc35760405162461bcd60e51b815260206004820152601460248201527321b0b7303a10313637b1b5903cb7bab939b2b63360611b60448201526064016105eb565b8060095f610bcf61180e565b6001600160a01b03908116825260208083019390935260409182015f90812096909116815294909152909220805460ff19169215159290921790915550565b6001541580610c235750610c236102fa61180e565b610c3f5760405162461bcd60e51b81526004016105eb90612095565b5f5b600154811015610ca6575f805f60018481548110610c6157610c616120d7565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610c9e816120eb565b915050610c41565b50610cb260015f611940565b565b5f610cbe82610a60565b80610ce057506001600160a01b0382165f908152600a602052604090205460ff165b92915050565b6001600160a01b0383165f9081526006602052604090205460ff1615610d1e5760405162461bcd60e51b81526004016105eb90611e69565b610d2661180e565b6001600160a01b0316836001600160a01b03161480610d4b5750610d4b61038e61180e565b610d975760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e2072656465656d206f6e6c7920796f757220706f696e74730060448201526064016105eb565b610da38361044561180e565b15610dc05760405162461bcd60e51b81526004016105eb90611ee2565b5f8213610ddf5760405162461bcd60e51b81526004016105eb90611ea0565b6001600160a01b0383165f908152600c6020526040902054821315610e3a5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820706f696e747360781b60448201526064016105eb565b6001600160a01b0383165f908152600c602052604081208054849290610e61908490612103565b90915550506001600160a01b0383165f908152600e60209081526040918290208251608081018452428152918201849052918101610e9e85612129565b815260408051602081810183525f808352938101919091528454600181810187559584529281902084516004909402019283558301519382019390935591810151600283015560608101519091906003820190610efb9082611fd9565b5050508082846001600160a01b03167fee3b1ba81f87423fecc5e13b69a00e5be4d7e9970fb24498122085bbef9b973860405160405180910390a4505050565b6001541580610f505750610f506102fa61180e565b610f6c5760405162461bcd60e51b81526004016105eb90612095565b610f7581610a60565b610882576001600160a01b03165f818152602081905260408120805460ff191660019081179091558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055565b6001541580610ff05750610ff06102fa61180e565b61100c5760405162461bcd60e51b81526004016105eb90612095565b5f9182526008602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561090b57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611071575050505050905090565b5f6110a282610a60565b156110ae57505f610ce0565b506001600160a01b039182165f90815260096020908152604080832093909416825291909152205460ff1690565b60015415806110f157506110f16102fa61180e565b61110d5760405162461bcd60e51b81526004016105eb90612095565b6002610a5c8282611fd9565b5f61112561038e61180e565b6111415760405162461bcd60e51b81526004016105eb90611e1c565b506005546001600160a01b031690565b6060600180548060200260200160405190810160405280929190818152602001828054801561090b57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311611071575050505050905090565b60015415806111c457506111c46102fa61180e565b6111e05760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b03165f818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6001600160a01b0382165f9081526006602052604090205460ff161561127d5760405162461bcd60e51b81526004016105eb90611e69565b5f811361129c5760405162461bcd60e51b81526004016105eb90611ea0565b6112a882826001610ce6565b600480546005546040516323b872dd60e01b81526001600160a01b0391821693810193909352848116602484015260448301849052169081906323b872dd906064016020604051808303815f875af1158015611306573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132a9190612143565b50505050565b600154158061134557506113456102fa61180e565b6113615760405162461bcd60e51b81526004016105eb90612095565b6001600160a01b0381165f908152600a60205260409020805460ff19169055610882600b82611841565b61139661038e61180e565b6113b25760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6113e061038e61180e565b6113fc5760405162461bcd60e51b81526004016105eb90611e1c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600154158061143357506114336102fa61180e565b61144f5760405162461bcd60e51b81526004016105eb90612095565b600380546001600160a01b0319166001600160a01b03831617905550565b61147861038e61180e565b6114945760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b0382165f9081526006602052604090205460ff16156114cc5760405162461bcd60e51b81526004016105eb90611e69565b5f81136114eb5760405162461bcd60e51b81526004016105eb90611ea0565b6001600160a01b0382165f908152600c60205260409020548113156115465760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820706f696e747360781b60448201526064016105eb565b6001600160a01b0382165f908152600c60205260408120805483929061156d908490612103565b90915550506001600160a01b0382165f908152600d602052604081208054839290611599908490612103565b90915550506001600160a01b0382165f908152600e602090815260409182902082516080810184524281526002928101929092529181016115d984612129565b815260408051602081810183525f8083529381019190915284546001818101875595845292819020845160049094020192835583015193820193909355918101516002830155606081015190919060038201906116369082611fd9565b5050505050565b5f61164a8261044561180e565b156116675760405162461bcd60e51b81526004016105eb90611ee2565b506001600160a01b03165f908152600d602052604090205490565b60606116908261044561180e565b156116ad5760405162461bcd60e51b81526004016105eb90611ee2565b6001600160a01b0382165f908152600e6020908152604080832080548251818502810185019093528083529193909284015b828210156117bc578382905f5260205f2090600402016040518060800160405290815f8201548152602001600182015481526020016002820154815260200160038201805461172d90611f54565b80601f016020809104026020016040519081016040528092919081815260200182805461175990611f54565b80156117a45780601f1061177b576101008083540402835291602001916117a4565b820191905f5260205f20905b81548152906001019060200180831161178757829003601f168201915b505050505081525050815260200190600101906116df565b505050509050919050565b6117d261038e61180e565b6117ee5760405162461bcd60e51b81526004016105eb90611e1c565b6001600160a01b03165f908152600660205260409020805460ff19169055565b5f6014361080159061182a57506003546001600160a01b031633145b1561183c575060131936013560601c90565b503390565b5f5b82548110156107cd57816001600160a01b0316838281548110611868576118686120d7565b5f918252602090912001546001600160a01b03160361192e57825483906118919060019061215e565b815481106118a1576118a16120d7565b905f5260205f20015f9054906101000a90046001600160a01b03168382815481106118ce576118ce6120d7565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508280548061190957611909612171565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b80611938816120eb565b915050611843565b5080545f8255905f5260205f209081019061088291905b8082111561196a575f8155600101611957565b5090565b5f81518084525f5b8181101561199257602081850181015186830182015201611976565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6119c3602083018461196e565b9392505050565b80356001600160a01b03811681146119e0575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715611a1c57611a1c6119e5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a4b57611a4b6119e5565b604052919050565b5f82601f830112611a62575f80fd5b813567ffffffffffffffff811115611a7c57611a7c6119e5565b611a8f601f8201601f1916602001611a22565b818152846020838601011115611aa3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611ad2575f80fd5b611adb856119ca565b93506020850135925060408501359150606085013567ffffffffffffffff811115611b04575f80fd5b611b1087828801611a53565b91505092959194509250565b5f805f60608486031215611b2e575f80fd5b611b37846119ca565b95602085013595506040909401359392505050565b5f60208284031215611b5c575f80fd5b6119c3826119ca565b5f6020808385031215611b76575f80fd5b823567ffffffffffffffff80821115611b8d575f80fd5b818501915085601f830112611ba0575f80fd5b813581811115611bb257611bb26119e5565b611bc0848260051b01611a22565b81815284810192506060918202840185019188831115611bde575f80fd5b938501935b82851015611c2e5780858a031215611bfa575f8081fd5b611c026119f9565b611c0b866119ca565b815285870135878201526040808701359082015284529384019392850192611be3565b50979650505050505050565b5f8060408385031215611c4b575f80fd5b611c54836119ca565b946020939093013593505050565b8015158114610882575f80fd5b5f8060408385031215611c80575f80fd5b611c89836119ca565b91506020830135611c9981611c62565b809150509250929050565b5f8060408385031215611cb5575f80fd5b82359150611cc5602084016119ca565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015611d0e5783516001600160a01b031683529284019291840191600101611ce9565b50909695505050505050565b5f8060408385031215611d2b575f80fd5b611d34836119ca565b9150611cc5602084016119ca565b5f60208284031215611d52575f80fd5b813567ffffffffffffffff811115611d68575f80fd5b611d7484828501611a53565b949350505050565b5f60208284031215611d8c575f80fd5b5035919050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015611e0e57888303603f1901855281518051845287810151888501528681015187850152606090810151608091850182905290611dfa8186018361196e565b968901969450505090860190600101611db8565b509098975050505050505050565b6020808252602d908201527f4f6e6c79206f776e6572206f7220706172746e65722063616e2063616c6c207460408201526c3434b990333ab731ba34b7b71760991b606082015260800190565b6020808252601a908201527f546172676574206164647265737320776173206f7074206f7574000000000000604082015260600190565b60208082526022908201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252601e908201527f53656e646572206164647265737320626c6f636b656420627920757365720000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f831280158216821582161715611f4c57611f4c611f19565b505092915050565b600181811c90821680611f6857607f821691