[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "indexed": false, "internalType": "address", "name": "ERC20Token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ERC20TokenValue", "type": "uint256" } ], "name": "MerchantPayment", "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": [ { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "PBMTokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "ERC20Token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ERC20TokenValue", "type": "uint256" } ], "name": "PBMrevokeWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "batchMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractExpiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "companyName", "type": "string" }, { "internalType": "address", "name": "spotAddress", "type": "address" }, { "internalType": "uint256", "name": "spotAmount", "type": "uint256" }, { "internalType": "string", "name": "spotType", "type": "string" }, { "internalType": "uint256", "name": "tokenExpiry", "type": "uint256" }, { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "string", "name": "postExpiryURI", "type": "string" } ], "name": "createPBMTokenType", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getSpotAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenDetails", "outputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_expiry", "type": "uint256" }, { "internalType": "address", "name": "_pbmAddressList", "type": "address" }, { "internalType": "address", "name": "_noahPaymentManager", "type": "address" } ], "name": "initialise", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mintUnbackedPBM", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "noahPaymentManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pbmAddressList", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pbmTokenManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "recoverAllERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "string", "name": "sourceReferenceID", "type": "string" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "requestBatchPayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "sourceReferenceID", "type": "string" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "requestPayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revertPayment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "revokePBM", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "postExpiryURI", "type": "string" } ], "name": "updatePostExpiryURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "updateTokenExpiry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "updateTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
6080604052600480546001600160a01b0319908116909155600580549091169055600680546001600160a81b03191690553480156200003d57600080fd5b506040805160208101909152600081526200005881620000c3565b506200006433620000dc565b6003805460ff60a01b191690556040516200007f906200012e565b604051809103906000f0801580156200009c573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b03929092169190911790556200021f565b8051620000d89060029060208401906200013c565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61196880620045e683390190565b8280546200014a90620001e2565b90600052602060002090601f0160209004810192826200016e5760008555620001b9565b82601f106200018957805160ff1916838001178555620001b9565b82800160010185558215620001b9579182015b82811115620001b95782518255916020019190600101906200019c565b50620001c7929150620001cb565b5090565b5b80821115620001c75760008155600101620001cc565b600181811c90821680620001f757607f821691505b602082108114156200021957634e487b7160e01b600052602260045260246000fd5b50919050565b6143b7806200022f6000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c806389aba6421161011a578063caa54c3e116100ad578063e985e9c51161007c578063e985e9c51461046a578063f242432a146104a6578063f2fde38b146104b9578063f551e4e9146102b1578063fb34b201146104cc57600080fd5b8063caa54c3e1461041e578063d383d3e914610431578063d8597f5714610444578063e7d3fe6b1461045757600080fd5b8063a5bfafbe116100e9578063a5bfafbe146103c2578063b054b536146103d5578063b61c95bb146103e8578063c1e03728146103fb57600080fd5b806389aba642146103825780638da5cb5b1461038b5780639308bf651461039c578063a22cb465146103af57600080fd5b80634e1273f41161019d578063715018a61161016c578063715018a61461033957806373e17e76146103415780637d4a96a6146103545780638456cb59146103675780638980f11f1461036f57600080fd5b80634e1273f4146102e157806351e86cf6146103015780635c975abb1461031457806363be47d21461032657600080fd5b806318e97fd1116101d957806318e97fd11461029e5780632eb2c2d6146102b35780633f4ba83a146102c6578063467e67d9146102ce57600080fd5b8062fdd58e1461020a57806301ffc9a71461023057806302b83c8a146102535780630e89341c1461027e575b600080fd5b61021d610218366004613297565b6104df565b6040519081526020015b60405180910390f35b61024361023e3660046132d9565b6105f6565b6040519015158152602001610227565b6102666102613660046132fd565b610646565b6040516001600160a01b039091168152602001610227565b61029161028c3660046132fd565b6106c5565b604051610227919061336e565b6102b16102ac366004613446565b610748565b005b6102b16102c1366004613520565b6107b7565b6102b1610ae3565b6102b16102dc3660046135cd565b610af5565b6102f46102ef366004613699565b610eb7565b6040516102279190613796565b600554610266906001600160a01b031681565b600354600160a01b900460ff16610243565b600454610266906001600160a01b031681565b6102b1610fe0565b6102b161034f3660046132fd565b610ff2565b6102b16103623660046137a9565b6111a9565b6102b16112df565b6102b161037d366004613297565b6112ef565b61021d60075481565b6003546001600160a01b0316610266565b6102b16103aa3660046137e2565b611375565b6102b16103bd366004613827565b611472565b6102b16103d0366004613860565b611481565b6102b16103e3366004613882565b6114bf565b600654610266906001600160a01b031681565b61040e6104093660046132fd565b611585565b604051610227949392919061389f565b6102b161042c3660046138d7565b61161c565b6102b161043f366004613935565b6118a2565b6102b1610452366004613446565b611926565b6102b16104653660046137a9565b61195f565b610243610478366004613a16565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102b16104b4366004613a44565b611c2a565b6102b16104c7366004613882565b611e92565b6102b16104da366004613aac565b611f0b565b60006001600160a01b0383166105505760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b6004546001600160a01b03166348fd09f561056a8461225a565b6040518263ffffffff1660e01b81526004016105869190613796565b60206040518083038186803b15801561059e57600080fd5b505afa1580156105b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d69190613b18565b156105ec576105e583836122a5565b90506105f0565b5060005b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061062757506001600160e01b031982166303a24d0760e21b145b806105f057506301ffc9a760e01b6001600160e01b03198316146105f0565b6004805460405163015c1e4560e11b81529182018390526000916001600160a01b03909116906302b83c8a9060240160206040518083038186803b15801561068d57600080fd5b505afa1580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f09190613b35565b600480546040516303a24d0760e21b81529182018390526060916001600160a01b0390911690630e89341c9060240160006040518083038186803b15801561070c57600080fd5b505afa158015610720573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f09190810190613baa565b610750612336565b600480546040516318e97fd160e01b81526001600160a01b03909116916318e97fd191610781918691869101613be6565b600060405180830381600087803b15801561079b57600080fd5b505af11580156107af573d6000803e3d6000fd5b505050505050565b6107bf612390565b6107c985856123dd565b81518351146107ea5760405162461bcd60e51b815260040161054790613bff565b600554604051631a2f716760e01b81526001600160a01b03868116600483015290911690631a2f716790602401602060405180830381600087803b15801561083157600080fd5b505af1158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190613b18565b15610acf5760008060005b85518110156109b057600086828151811061089157610891613c34565b6020026020010151905060006108a682610646565b9050826108b1578093505b806001600160a01b0316846001600160a01b0316146108e25760405162461bcd60e51b815260040161054790613c4a565b60008784815181106108f6576108f6613c34565b60209081029190910101516004805460405163d10424c760e01b81529182018690529192506000916001600160a01b03169063d10424c79060240160206040518083038186803b15801561094957600080fd5b505afa15801561095d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109819190613cda565b61098b9083613d09565b90506109978188613d28565b96505050505080806109a890613d40565b915050610874565b506109bc8786866124f9565b6004805460405163e21c8b5960e01b81526001600160a01b039091169163e21c8b59916109ed918991899101613d5b565b600060405180830381600087803b158015610a0757600080fd5b505af1158015610a1b573d6000803e3d6000fd5b505060065460405163341bfb8560e01b81526001600160a01b03909116925063341bfb859150610a57908a908a90869088908a90600401613d80565b600060405180830381600087803b158015610a7157600080fd5b505af1158015610a85573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b031660008051602061436283398151915287878587604051610ac09493929190613dc6565b60405180910390a35050610adc565b610adc8585858585612685565b5050505050565b610aeb612336565b610af3612819565b565b610afd612390565b610b0786866123dd565b600554604051631a2f716760e01b81526001600160a01b03878116600483015290911690631a2f716790602401602060405180830381600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190613b18565b610ba25760405162461bcd60e51b815260040161054790613e08565b8251845114610bc35760405162461bcd60e51b815260040161054790613bff565b600554604051631a2f716760e01b81526001600160a01b03878116600483015290911690631a2f716790602401602060405180830381600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c429190613b18565b15610eaa5760008060005b8651811015610d89576000878281518110610c6a57610c6a613c34565b602002602001015190506000610c7f82610646565b905082610c8a578093505b806001600160a01b0316846001600160a01b031614610cbb5760405162461bcd60e51b815260040161054790613c4a565b6000888481518110610ccf57610ccf613c34565b60209081029190910101516004805460405163d10424c760e01b81529182018690529192506000916001600160a01b03169063d10424c79060240160206040518083038186803b158015610d2257600080fd5b505afa158015610d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5a9190613cda565b610d649083613d09565b9050610d708188613d28565b9650505050508080610d8190613d40565b915050610c4d565b50610d958887876124f9565b6004805460405163e21c8b5960e01b81526001600160a01b039091169163e21c8b5991610dc6918a918a9101613d5b565b600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50506006546040516361baf65d60e11b81526001600160a01b03909116925063c375ecba9150610e32908b908b90869088908b908b90600401613e58565b600060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b50505050866001600160a01b0316886001600160a01b031660008051602061436283398151915288888587604051610e9b9493929190613dc6565b60405180910390a350506107af565b6107af8686868685612685565b60608151835114610f1c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610547565b600083516001600160401b03811115610f3757610f37613381565b604051908082528060200260200182016040528015610f60578160200160208202803683370190505b50905060005b8451811015610fd857610fab858281518110610f8457610f84613c34565b6020026020010151858381518110610f9e57610f9e613c34565b60200260200101516104df565b828281518110610fbd57610fbd613c34565b6020908102919091010152610fd181613d40565b9050610f66565b509392505050565b610fe8612336565b610af3600061286e565b610ffa612390565b60048054604051631a410e9b60e31b81529182018390526000916001600160a01b039091169063d20874d89060240160206040518083038186803b15801561104157600080fd5b505afa158015611055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110799190613cda565b60048054604051630da8d02760e21b81529182018590523360248301529192506001600160a01b03909116906336a3409c90604401600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b5050505060006110eb83610646565b600654604051633102e32f60e21b81529192506001600160a01b03169063c40b8cbc90611122903090339086908890600401613eb2565b600060405180830381600087803b15801561113c57600080fd5b505af1158015611150573d6000803e3d6000fd5b505060408051338152602081018790526001600160a01b038516818301526060810186905290517fa1c359e2aefcb2a02fa122099023552498d16ee2c91b81d3cfd8cd086f037d449350908190036080019150a1505050565b6111b1612336565b60055460405163fe575a8760e01b81526001600160a01b0383811660048301529091169063fe575a8790602401602060405180830381600087803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112309190613b18565b1561124d5760405162461bcd60e51b815260040161054790613edc565b6004546001600160a01b031663f600d9f46112678561225a565b6112708561225a565b6040518363ffffffff1660e01b815260040161128d929190613d5b565b600060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506112da818484604051806020016040528060008152506128c0565b505050565b6112e7612336565b610af3612991565b6112f7612336565b60065482906001600160a01b031663c40b8cbc3061131d6003546001600160a01b031690565b84866040518563ffffffff1660e01b815260040161133e9493929190613eb2565b600060405180830381600087803b15801561135857600080fd5b505af115801561136c573d6000803e3d6000fd5b50505050505050565b61137d612336565b600654600160a01b900460ff16156113d75760405162461bcd60e51b815260206004820152601860248201527f50424d3a20416c726561647920696e697469616c6973656400000000000000006044820152606401610547565b6001600160a01b0382163b61142e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642070626d2061646472657373206c69737400000000000000006044820152606401610547565b600792909255600580546001600160a01b039283166001600160a01b0319909116179055600680546001600160a81b0319169290911691909117600160a01b179055565b61147d3383836129d4565b5050565b611489612336565b600480546040516352dfd7df60e11b8152918201849052602482018390526001600160a01b03169063a5bfafbe90604401610781565b6114c7612336565b60065481906001600160a01b031663c40b8cbc306114ed6003546001600160a01b031690565b6040516370a0823160e01b815230600482015285906001600160a01b038216906370a082319060240160206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115669190613cda565b6040518563ffffffff1660e01b81526004016107819493929190613eb2565b6004805460405163183c06e560e31b8152918201839052606091600091829182916001600160a01b03169063c1e037289060240160006040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261160d9190810190613f13565b93509350935093509193509193565b611624612390565b61162e86866123dd565b600554604051631a2f716760e01b81526001600160a01b03878116600483015290911690631a2f716790602401602060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190613b18565b6116c95760405162461bcd60e51b815260040161054790613e08565b6004805460405163d10424c760e01b81529182018690526000916001600160a01b039091169063d10424c79060240160206040518083038186803b15801561171057600080fd5b505afa158015611724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117489190613cda565b6117529085613d09565b9050600061175f86610646565b6006546040516361baf65d60e11b81529192506001600160a01b03169063c375ecba9061179a908b908b90869088908b908b90600401613e58565b600060405180830381600087803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b505050506117d7888787612ab5565b6004546001600160a01b031663e21c8b596117f18861225a565b6117fa8861225a565b6040518363ffffffff1660e01b8152600401611817929190613d5b565b600060405180830381600087803b15801561183157600080fd5b505af1158015611845573d6000803e3d6000fd5b50505050866001600160a01b0316886001600160a01b03166000805160206143628339815191526118758961225a565b61187e8961225a565b85876040516118909493929190613dc6565b60405180910390a35050505050505050565b6118aa612336565b6004805460075460405163113ecf5b60e01b81526001600160a01b039092169263113ecf5b926118ea928d928d928d928d928d928d928d928d9201613f75565b600060405180830381600087803b15801561190457600080fd5b505af1158015611918573d6000803e3d6000fd5b505050505050505050505050565b61192e612336565b6004805460405163d8597f5760e01b81526001600160a01b039091169163d8597f5791610781918691869101613be6565b611967612390565b60055460405163fe575a8760e01b81526001600160a01b0383811660048301529091169063fe575a8790602401602060405180830381600087803b1580156119ae57600080fd5b505af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e69190613b18565b15611a035760405162461bcd60e51b815260040161054790613edc565b6004805460405163d10424c760e01b81529182018590526000916001600160a01b039091169063d10424c79060240160206040518083038186803b158015611a4a57600080fd5b505afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a829190613cda565b611a8c9084613d09565b90506000611a9985610646565b9050611aa781333085612bb9565b60065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052829182169063095ea7b390604401602060405180830381600087803b158015611af657600080fd5b505af1158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190613b18565b50600654604051630ba7dfd960e11b81523060048201526001600160a01b038481166024830152604482018690529091169063174fbfb290606401600060405180830381600087803b158015611b8357600080fd5b505af1158015611b97573d6000803e3d6000fd5b50506004546001600160a01b0316915063f600d9f49050611bb78861225a565b611bc08861225a565b6040518363ffffffff1660e01b8152600401611bdd929190613d5b565b600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b505050506107af848787604051806020016040528060008152506128c0565b611c32612390565b611c3c85856123dd565b600554604051631a2f716760e01b81526001600160a01b03868116600483015290911690631a2f716790602401602060405180830381600087803b158015611c8357600080fd5b505af1158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb9190613b18565b15611e85576004805460405163d10424c760e01b81529182018590526000916001600160a01b039091169063d10424c79060240160206040518083038186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190613cda565b611d499084613d09565b9050611d56868585612ab5565b6004546001600160a01b031663e21c8b59611d708661225a565b611d798661225a565b6040518363ffffffff1660e01b8152600401611d96929190613d5b565b600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505050506000611dd385610646565b60065460405163341bfb8560e01b81529192506001600160a01b03169063341bfb8590611e0c908a908a90869088908a90600401613d80565b600060405180830381600087803b158015611e2657600080fd5b505af1158015611e3a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b0316600080516020614362833981519152611e6a8861225a565b611e738861225a565b8587604051610ac09493929190613dc6565b610adc8585858585612d7c565b611e9a612336565b6001600160a01b038116611eff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610547565b611f088161286e565b50565b611f13612390565b60055460405163fe575a8760e01b81526001600160a01b0383811660048301529091169063fe575a8790602401602060405180830381600087803b158015611f5a57600080fd5b505af1158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f929190613b18565b15611faf5760405162461bcd60e51b815260040161054790613edc565b8151835114611fd05760405162461bcd60e51b815260040161054790613bff565b60005b835181101561223e576000848281518110611ff057611ff0613c34565b60200260200101519050600084838151811061200e5761200e613c34565b60209081029190910101516004805460405163d10424c760e01b81529182018590529192506000916001600160a01b03169063d10424c79060240160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120999190613cda565b6120a39083613d09565b905060006120b084610646565b90506120be81333085612bb9565b60065460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052829182169063095ea7b390604401602060405180830381600087803b15801561210d57600080fd5b505af1158015612121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121459190613b18565b50600654604051630ba7dfd960e11b81523060048201526001600160a01b038481166024830152604482018690529091169063174fbfb290606401600060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b50506004546001600160a01b0316915063f600d9f490506121ce8761225a565b6121d78761225a565b6040518363ffffffff1660e01b81526004016121f4929190613d5b565b600060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050505050505050808061223690613d40565b915050611fd3565b506112da81848460405180602001604052806000815250612ea6565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061229457612294613c34565b602090810291909101015292915050565b60006001600160a01b0383166123105760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608401610547565b506000908152602081815260408083206001600160a01b03949094168352929052205490565b6003546001600160a01b03163314610af35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610547565b600354600160a01b900460ff1615610af35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610547565b6001600160a01b0382163314806123f957506123f98233610478565b61245d5760405162461bcd60e51b815260206004820152602f60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201526e195c881b9bdc88185c1c1c9bdd9959608a1b6064820152608401610547565b60055460405163fe575a8760e01b81526001600160a01b0383811660048301529091169063fe575a8790602401602060405180830381600087803b1580156124a457600080fd5b505af11580156124b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124dc9190613b18565b1561147d5760405162461bcd60e51b815260040161054790613edc565b6001600160a01b03831661251f5760405162461bcd60e51b815260040161054790614004565b80518251146125405760405162461bcd60e51b815260040161054790614047565b604080516020810190915260009081905233905b835181101561261657600084828151811061257157612571613c34565b60200260200101519050600084838151811061258f5761258f613c34565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156125df5760405162461bcd60e51b81526004016105479061408f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061260e81613d40565b915050612554565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612667929190613d5b565b60405180910390a46040805160208101909152600090525b50505050565b81518351146126a65760405162461bcd60e51b815260040161054790614047565b6001600160a01b0384166126cc5760405162461bcd60e51b8152600401610547906140d3565b3360005b84518110156127b35760008582815181106126ed576126ed613c34565b60200260200101519050600085838151811061270b5761270b613c34565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561275b5760405162461bcd60e51b815260040161054790614118565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612798908490613d28565b92505081905550505050806127ac90613d40565b90506126d0565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612803929190613d5b565b60405180910390a46107af818787878787612fed565b612821613158565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166128e65760405162461bcd60e51b815260040161054790614162565b3360006128f28561225a565b905060006128ff8561225a565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290612931908490613d28565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461136c836000898989896131a8565b612999612390565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128513390565b816001600160a01b0316836001600160a01b03161415612a485760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610547565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316612adb5760405162461bcd60e51b815260040161054790614004565b336000612ae78461225a565b90506000612af48461225a565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015612b415760405162461bcd60e51b81526004016105479061408f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091526000905261136c565b6001600160a01b038416612c045760405162461bcd60e51b815260206004820152601260248201527145524332303a204e696c206164647265737360701b6044820152606401610547565b6001600160a01b0384163b612c515760405162461bcd60e51b8152602060048201526013602482015272115490cc8c0e881153d0481c1c9bdd9a591959606a1b6044820152606401610547565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612cb591906141a3565b6000604051808303816000865af19150503d8060008114612cf2576040519150601f19603f3d011682016040523d82523d6000602084013e612cf7565b606091505b5091509150818015612d21575080511580612d21575080806020019051810190612d219190613b18565b6107af5760405162461bcd60e51b815260206004820152602660248201527f45524332303a20496e737566666963656e742062616c616e6365206f722061706044820152651c1c9bdd985b60d21b6064820152608401610547565b6001600160a01b038416612da25760405162461bcd60e51b8152600401610547906140d3565b336000612dae8561225a565b90506000612dbb8561225a565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015612dfe5760405162461bcd60e51b815260040161054790614118565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612e3b908490613d28565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612e9b848a8a8a8a8a6131a8565b505050505050505050565b6001600160a01b038416612ecc5760405162461bcd60e51b815260040161054790614162565b8151835114612eed5760405162461bcd60e51b815260040161054790614047565b3360005b8451811015612f8957838181518110612f0c57612f0c613c34565b6020026020010151600080878481518110612f2957612f29613c34565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f719190613d28565b90915550819050612f8181613d40565b915050612ef1565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612fda929190613d5b565b60405180910390a4610adc816000878787875b6001600160a01b0384163b156107af5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061303190899089908890889088906004016141bf565b602060405180830381600087803b15801561304b57600080fd5b505af192505050801561307b575060408051601f3d908101601f191682019092526130789181019061421d565b60015b6131285761308761423a565b806308c379a014156130c1575061309c614256565b806130a757506130c3565b8060405162461bcd60e51b8152600401610547919061336e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610547565b6001600160e01b0319811663bc197c8160e01b1461136c5760405162461bcd60e51b8152600401610547906142df565b600354600160a01b900460ff16610af35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610547565b6001600160a01b0384163b156107af5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906131ec9089908990889088908890600401614327565b602060405180830381600087803b15801561320657600080fd5b505af1925050508015613236575060408051601f3d908101601f191682019092526132339181019061421d565b60015b6132425761308761423a565b6001600160e01b0319811663f23a6e6160e01b1461136c5760405162461bcd60e51b8152600401610547906142df565b6001600160a01b0381168114611f0857600080fd5b803561329281613272565b919050565b600080604083850312156132aa57600080fd5b82356132b581613272565b946020939093013593505050565b6001600160e01b031981168114611f0857600080fd5b6000602082840312156132eb57600080fd5b81356132f6816132c3565b9392505050565b60006020828403121561330f57600080fd5b5035919050565b60005b83811015613331578181015183820152602001613319565b8381111561267f5750506000910152565b6000815180845261335a816020860160208601613316565b601f01601f19169290920160200192915050565b6020815260006132f66020830184613342565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156133bc576133bc613381565b6040525050565b60006001600160401b038211156133dc576133dc613381565b50601f01601f191660200190565b600082601f8301126133fb57600080fd5b8135613406816133c3565b6040516134138282613397565b82815285602084870101111561342857600080fd5b82602086016020830137600092810160200192909252509392505050565b6000806040838503121561345957600080fd5b8235915060208301356001600160401b0381111561347657600080fd5b613482858286016133ea565b9150509250929050565b60006001600160401b038211156134a5576134a5613381565b5060051b60200190565b600082601f8301126134c057600080fd5b813560206134cd8261348c565b6040516134da8282613397565b83815260059390931b85018201928281019150868411156134fa57600080fd5b8286015b8481101561351557803583529183019183016134fe565b509695505050505050565b600080600080600060a0868803121561353857600080fd5b853561354381613272565b9450602086013561355381613272565b935060408601356001600160401b038082111561356f57600080fd5b61357b89838a016134af565b9450606088013591508082111561359157600080fd5b61359d89838a016134af565b935060808801359150808211156135b357600080fd5b506135c0888289016133ea565b9150509295509295909350565b60008060008060008060c087890312156135e657600080fd5b6135ef87613287565b95506135fd60208801613287565b945060408701356001600160401b038082111561361957600080fd5b6136258a838b016134af565b9550606089013591508082111561363b57600080fd5b6136478a838b016134af565b9450608089013591508082111561365d57600080fd5b6136698a838b016133ea565b935060a089013591508082111561367f57600080fd5b5061368c89828a016133ea565b9150509295509295509295565b600080604083850312156136ac57600080fd5b82356001600160401b03808211156136c357600080fd5b818501915085601f8301126136d757600080fd5b813560206136e48261348c565b6040516136f18282613397565b83815260059390931b850182019282810191508984111561371157600080fd5b948201945b8386101561373857853561372981613272565b82529482019490820190613716565b9650508601359250508082111561374e57600080fd5b50613482858286016134af565b600081518084526020808501945080840160005b8381101561378b5781518752958201959082019060010161376f565b509495945050505050565b6020815260006132f6602083018461375b565b6000806000606084860312156137be57600080fd5b833592506020840135915060408401356137d781613272565b809150509250925092565b6000806000606084860312156137f757600080fd5b83359250602084013561380981613272565b915060408401356137d781613272565b8015158114611f0857600080fd5b6000806040838503121561383a57600080fd5b823561384581613272565b9150602083013561385581613819565b809150509250929050565b6000806040838503121561387357600080fd5b50508035926020909101359150565b60006020828403121561389457600080fd5b81356132f681613272565b6080815260006138b26080830187613342565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b60008060008060008060c087890312156138f057600080fd5b86356138fb81613272565b9550602087013561390b81613272565b9450604087013593506060870135925060808701356001600160401b038082111561365d57600080fd5b600080600080600080600080610100898b03121561395257600080fd5b88356001600160401b038082111561396957600080fd5b6139758c838d016133ea565b995061398360208c01613287565b985060408b0135975060608b01359150808211156139a057600080fd5b6139ac8c838d016133ea565b965060808b013595506139c160a08c01613287565b945060c08b01359150808211156139d757600080fd5b6139e38c838d016133ea565b935060e08b01359150808211156139f957600080fd5b50613a068b828c016133ea565b9150509295985092959890939650565b60008060408385031215613a2957600080fd5b8235613a3481613272565b9150602083013561385581613272565b600080600080600060a08688031215613a5c57600080fd5b8535613a6781613272565b94506020860135613a7781613272565b9350604086013592506060860135915060808601356001600160401b03811115613aa057600080fd5b6135c0888289016133ea565b600080600060608486031215613ac157600080fd5b83356001600160401b0380821115613ad857600080fd5b613ae4878388016134af565b94506020860135915080821115613afa57600080fd5b50613b07868287016134af565b92505060408401356137d781613272565b600060208284031215613b2a57600080fd5b81516132f681613819565b600060208284031215613b4757600080fd5b81516132f681613272565b600082601f830112613b6357600080fd5b8151613b6e816133c3565b604051613b7b8282613397565b828152856020848701011115613b9057600080fd5b613ba1836020830160208801613316565b95945050505050565b600060208284031215613bbc57600080fd5b81516001600160401b03811115613bd257600080fd5b613bde84828501613b52565b949350505050565b828152604060208201526000613bde6040830184613342565b6020808252818101527f556e657175616c2069647320616e6420616d6f756e747320737570706c696564604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526064908201527f4261746368656420746f6b656e73206d75737420616c6c20736861726520746860408201527f652073616d6520756e6465726c79696e672073706f7420746f6b656e2074797060608201527f652e205377617020756e6465726c79696e6720696620726571756972656420666080820152631a5c9cdd60e21b60a082015260c00190565b600060208284031215613cec57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d2357613d23613cf3565b500290565b60008219821115613d3b57613d3b613cf3565b500190565b6000600019821415613d5457613d54613cf3565b5060010190565b604081526000613d6e604083018561375b565b8281036020840152613ba1818561375b565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a060808201819052600090613dbb90830184613342565b979650505050505050565b608081526000613dd9608083018761375b565b8281036020840152613deb818761375b565b6001600160a01b0395909516604084015250506060015292915050565b60208082526030908201527f5061796d656e74732063616e206f6e6c79206265206d61646520746f2061206d60408201526f32b931b430b73a1030b2323932b9b99760811b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090613e9390830185613342565b82810360a0840152613ea58185613342565b9998505050505050505050565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6020808252601d908201527f50424d3a2027746f27206164647265737320626c61636b6c6973746564000000604082015260600190565b60008060008060808587031215613f2957600080fd5b84516001600160401b03811115613f3f57600080fd5b613f4b87828801613b52565b94505060208501519250604085015191506060850151613f6a81613272565b939692955090935050565b6000610120808352613f898184018d613342565b6001600160a01b038c81166020860152604085018c90528482036060860152909150613fb5828b613342565b915088608085015280881660a08501525082810360c0840152613fd88187613342565b905082810360e0840152613fec8186613342565b915050826101008301529a9950505050505050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600082516141b5818460208701613316565b9190910192915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906141eb9083018661375b565b82810360608401526141fd818661375b565b905082810360808401526142118185613342565b98975050505050505050565b60006020828403121561422f57600080fd5b81516132f6816132c3565b600060033d11156142535760046000803e5060005160e01c5b90565b600060443d10156142645790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561429357505050505090565b82850191508151818111156142ab5750505050505090565b843d87010160208285010111156142c55750505050505090565b6142d460208286010187613397565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613dbb9083018461334256fe68c9cd42836993caa70415e61f3c3baceb0bb31dcb22af6e5e0db98fa8870faca26469706673582212200e1c609e28a76e8a80fd720abe9cd63daef7c93b8605557f6d0ed28d0bc3415c64736f6c6343000809003360a0604052600060015534801561001557600080fd5b5061001f33610028565b30608052610078565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6080516118d56100936000396000610fc801526118d56000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063934689a9116100ad578063d8597f5711610071578063d8597f571461027d578063e21c8b5914610290578063f2fde38b146102a3578063f600d9f4146102b6578063f6314d57146102c957600080fd5b8063934689a91461020e578063a5bfafbe14610221578063c1e0372814610234578063d10424c714610257578063d20874d81461026a57600080fd5b8063234661c4116100f4578063234661c41461019e57806336a3409c146101bf57806348fd09f5146101d2578063715018a6146101f55780638da5cb5b146101fd57600080fd5b806302b83c8a146101265780630e89341c14610156578063113ecf5b1461017657806318e97fd11461018b575b600080fd5b610139610134366004611293565b6102dc565b6040516001600160a01b0390911681526020015b60405180910390f35b610169610164366004611293565b610332565b60405161014d9190611308565b6101896101843660046113f5565b61040a565b005b6101896101993660046114e1565b6107e5565b6101b16101ac366004611293565b610838565b60405190815260200161014d565b6101896101cd366004611528565b61089a565b6101e56101e03660046115d4565b610934565b604051901515815260200161014d565b6101896109be565b6000546001600160a01b0316610139565b61013961021c366004611293565b6109d2565b61018961022f366004611611565b610a3d565b610247610242366004611293565b610a7b565b60405161014d9493929190611633565b6101b1610265366004611293565b610b78565b6101b1610278366004611293565b610bdb565b61018961028b3660046114e1565b610c32565b61018961029e36600461166b565b610c80565b6101896102b13660046116c5565b610d8e565b6101896102c436600461166b565b610e07565b6101696102d7366004611293565b610f15565b6000818152600260208190526040822001546103135760405162461bcd60e51b815260040161030a906116e0565b60405180910390fd5b506000908152600260205260409020600101546001600160a01b031690565b60008181526002602052604090206004015460609042106103ee576000828152600260205260409020600801805461036990611717565b80601f016020809104026020016040519081016040528092919081815260200182805461039590611717565b80156103e25780601f106103b7576101008083540402835291602001916103e2565b820191906000526020600020905b8154815290600101906020018083116103c557829003601f168201915b50505050509050919050565b6000828152600260205260409020600701805461036990611717565b610412610f63565b61041a610fbd565b808511156104635760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746f6b656e206578706972792d3160501b604482015260640161030a565b4285116104ab5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103a37b5b2b71032bc3834b93c969960511b604482015260640161030a565b6001600160a01b0388163b6104f85760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21022a9219918103a37b5b2b760691b604482015260640161030a565b866105385760405162461bcd60e51b815260206004820152601060248201526f053706f7420616d6f756e7420697320360841b604482015260640161030a565b604080518082019091526004815263161554d160e21b6020918201528651908701207f1456b963f67efe00b2f8df51feb519ca050521ab6f87f75d2d096b39a04b425914806105c757506040805180820190915260048152631614d1d160e21b6020918201528651908701207feb356c5daf1440f443e24bbff91f802d2dffce265d2df807e65146012098ade8145b6106135760405162461bcd60e51b815260206004820152601d60248201527f53706f7454797065206d7573742062652058555344206f722058534744000000604482015260640161030a565b60008961061f89611035565b604051602001610630929190611752565b60408051601f1981840301815291815260015460009081526002602090815291902082519293506106659290918401906111fa565b508860026000600154815260200190815260200160002060010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600260006001548152602001908152602001600020600201819055508660026000600154815260200190815260200160002060030190805190602001906106ec9291906111fa565b506001805460009081526002602090815260408083206004018a90558354835280832060050180546001600160a01b0319166001600160a01b038b1617905583548352808320600601839055925482529190208551610753926007909201918701906111fa565b506001546000908152600260209081526040909120845161077c926008909201918601906111fa565b507f1cde36472d99035834fc5e1f6d02df66ee3d89fceaf06562e3417fd033c3d61a600154828b8b8b8b8b6040516107ba9796959493929190611781565b60405180910390a160018060008282546107d491906117f7565b909155505050505050505050505050565b6107ed610f63565b600154821061080e5760405162461bcd60e51b815260040161030a9061180f565b60008281526002602090815260409091208251610833926007909201918401906111fa565b505050565b60008181526002602081905260408220015415801590610868575060008281526002602052604090206004015442105b6108845760405162461bcd60e51b815260040161030a906116e0565b5060009081526002602052604090206006015490565b6108a2610f63565b6000828152600260205260409020600501546001600160a01b0382811691161480156108df57506000828152600260205260409020600401544210155b61091f5760405162461bcd60e51b815260206004820152601160248201527050424d206e6f74207265766f6b61626c6560781b604482015260640161030a565b50600090815260026020526040812060060155565b6000805b82518110156109b557600083828151811061095557610955611838565b602002602001015190506002600082815260200190815260200160002060040154421180610993575060008181526002602081905260409091200154155b156109a2575060009392505050565b50806109ad8161184e565b915050610938565b50600192915050565b6109c6610f63565b6109d060006110d2565b565b60008181526002602081905260408220015415801590610a02575060008281526002602052604090206004015442105b610a1e5760405162461bcd60e51b815260040161030a906116e0565b506000908152600260205260409020600501546001600160a01b031690565b610a45610f63565b6001548210610a665760405162461bcd60e51b815260040161030a9061180f565b60009182526002602052604090912060040155565b6000818152600260208190526040822001546060919081908190610ab15760405162461bcd60e51b815260040161030a906116e0565b6000858152600260208190526040909120908101546004820154600583015483546001600160a01b03909116908490610ae990611717565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1590611717565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b5050505050935093509350935093509193509193565b60008181526002602081905260408220015415801590610ba8575060008281526002602052604090206004015442105b610bc45760405162461bcd60e51b815260040161030a906116e0565b506000908152600260208190526040909120015490565b600081815260026020819052604082200154610c095760405162461bcd60e51b815260040161030a906116e0565b60008281526002602081905260409091206006810154910154610c2c9190611869565b92915050565b610c3a610f63565b6001548210610c5b5760405162461bcd60e51b815260040161030a9061180f565b60008281526002602090815260409091208251610833926008909201918401906111fa565b610c88610f63565b60005b82518110156108335760026000848381518110610caa57610caa611838565b6020026020010151815260200190815260200160002060020154600014158015610d02575060026000848381518110610ce557610ce5611838565b602002602001015181526020019081526020016000206004015442105b610d1e5760405162461bcd60e51b815260040161030a906116e0565b818181518110610d3057610d30611838565b602002602001015160026000858481518110610d4e57610d4e611838565b602002602001015181526020019081526020016000206006016000828254610d769190611888565b90915550819050610d868161184e565b915050610c8b565b610d96610f63565b6001600160a01b038116610dfb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030a565b610e04816110d2565b50565b610e0f610f63565b60005b82518110156108335760026000848381518110610e3157610e31611838565b6020026020010151815260200190815260200160002060020154600014158015610e89575060026000848381518110610e6c57610e6c611838565b602002602001015181526020019081526020016000206004015442105b610ea55760405162461bcd60e51b815260040161030a906116e0565b818181518110610eb757610eb7611838565b602002602001015160026000858481518110610ed557610ed5611838565b602002602001015181526020019081526020016000206006016000828254610efd91906117f7565b90915550819050610f0d8161184e565b915050610e12565b60008181526002602081905260409091200154606090610f475760405162461bcd60e51b815260040161030a906116e0565b6000828152600260205260409020600301805461036990611717565b6000546001600160a01b031633146109d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109d05760405162461bcd60e51b815260206004820152601960248201527f44656c65676174652063616c6c73207265737472696374656400000000000000604482015260640161030a565b6060600061104283611122565b600101905060008167ffffffffffffffff81111561106257611062611322565b6040519080825280601f01601f19166020018201604052801561108c576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846110c5576110ca565b611096565b509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106111615772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061118d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106111ab57662386f26fc10000830492506010015b6305f5e10083106111c3576305f5e100830492506008015b61271083106111d757612710830492506004015b606483106111e9576064830492506002015b600a8310610c2c5760010192915050565b82805461120690611717565b90600052602060002090601f016020900481019282611228576000855561126e565b82601f1061124157805160ff191683800117855561126e565b8280016001018555821561126e579182015b8281111561126e578251825591602001919060010190611253565b5061127a92915061127e565b5090565b5b8082111561127a576000815560010161127f565b6000602082840312156112a557600080fd5b5035919050565b60005b838110156112c75781810151838201526020016112af565b838111156112d6576000848401525b50505050565b600081518084526112f48160208601602086016112ac565b601f01601f19169290920160200192915050565b60208152600061131b60208301846112dc565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561136157611361611322565b604052919050565b600082601f83011261137a57600080fd5b813567ffffffffffffffff81111561139457611394611322565b6113a7601f8201601f1916602001611338565b8181528460208386010111156113bc57600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b03811681146113f057600080fd5b919050565b60008060008060008060008060006101208a8c03121561141457600080fd5b893567ffffffffffffffff8082111561142c57600080fd5b6114388d838e01611369565b9a5061144660208d016113d9565b995060408c0135985060608c013591508082111561146357600080fd5b61146f8d838e01611369565b975060808c0135965061148460a08d016113d9565b955060c08c013591508082111561149a57600080fd5b6114a68d838e01611369565b945060e08c01359150808211156114bc57600080fd5b506114c98c828d01611369565b9250506101008a013590509295985092959850929598565b600080604083850312156114f457600080fd5b82359150602083013567ffffffffffffffff81111561151257600080fd5b61151e85828601611369565b9150509250929050565b6000806040838503121561153b57600080fd5b8235915061154b602084016113d9565b90509250929050565b600082601f83011261156557600080fd5b8135602067ffffffffffffffff82111561158157611581611322565b8160051b611590828201611338565b92835284810182019282810190878511156115aa57600080fd5b83870192505b848310156115c9578235825291830191908301906115b0565b979650505050505050565b6000602082840312156115e657600080fd5b813567ffffffffffffffff8111156115fd57600080fd5b61160984828501611554565b949350505050565b6000806040838503121561162457600080fd5b50508035926020909101359150565b60808152600061164660808301876112dc565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b6000806040838503121561167e57600080fd5b823567ffffffffffffffff8082111561169657600080fd5b6116a286838701611554565b935060208501359150808211156116b857600080fd5b5061151e85828601611554565b6000602082840312156116d757600080fd5b61131b826113d9565b60208082526018908201527f50424d3a20496e76616c696420546f6b656e2049642873290000000000000000604082015260600190565b600181811c9082168061172b57607f821691505b6020821081141561174c57634e487b7160e01b600052602260045260246000fd5b50919050565b600083516117648184602088016112ac565b8351908301906117788183602088016112ac565b01949350505050565b87815260e06020820152600061179a60e08301896112dc565b6001600160a01b0388811660408501526060840188905283820360808501526117c382886112dc565b92508560a085015280851660c0850152505098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561180a5761180a6117e1565b500190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611862576118626117e1565b5060010190565b6000816000190483118215151615611883576118836117e1565b500290565b60008282101561189a5761189a6117e1565b50039056fea26469706673582212204a6b0f093337fd487e1de6166f76b6529899384e95aa6bef63a1e31c74a171c564736f6c63430008090033