0x6080604052600436106100fd575f3560e01c8063751039fc116100925780639fac68cb116100625780639fac68cb146102c1578063a9059cbb146102e0578063a9128ff0146102ff578063cc1776d31461031e578063dd62ed3e1461033e575f80fd5b8063751039fc146102445780638a8c523c146102585780638da5cb5b1461026c57806395d89b4114610292575f80fd5b8063313ce567116100cd578063313ce567146101ba5780634f7041a5146101db57806370a08231146101fa578063715018a61461022e575f80fd5b806306fdde0314610108578063095ea7b31461014a57806318160ddd1461017957806323b872dd1461019b575f80fd5b3661010457005b5f80fd5b348015610113575f80fd5b506040805180820190915260088152674375746520646f6760c01b60208201525b6040516101419190610ed1565b60405180910390f35b348015610155575f80fd5b50610169610164366004610f1a565b610382565b6040519015158152602001610141565b348015610184575f80fd5b5061018d610398565b604051908152602001610141565b3480156101a6575f80fd5b506101696101b5366004610f44565b6103b8565b3480156101c5575f80fd5b5060125b60405160ff9091168152602001610141565b3480156101e6575f80fd5b506003546101c99062010000900460ff1681565b348015610205575f80fd5b5061018d610214366004610f82565b6001600160a01b03165f9081526001602052604090205490565b348015610239575f80fd5b50610242610409565b005b34801561024f575f80fd5b50610242610483565b348015610263575f80fd5b506102426104c4565b348015610277575f80fd5b505f546040516001600160a01b039091168152602001610141565b34801561029d575f80fd5b5060408051808201909152600781526643757465646f6760c81b6020820152610134565b3480156102cc575f80fd5b506102426102db366004610f9d565b610710565b3480156102eb575f80fd5b506101696102fa366004610f1a565b610790565b34801561030a575f80fd5b50610242610319366004610fe4565b61079c565b348015610329575f80fd5b506003546101c9906301000000900460ff1681565b348015610349575f80fd5b5061018d610358366004611015565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b5f61038e338484610849565b5060015b92915050565b5f6103a56012600a611135565b6103b3906305f5e100611143565b905090565b5f6103c484848461096d565b6001600160a01b0384165f908152600260209081526040808320338085529252909120546103fe9186916103f990869061115a565b610849565b5060015b9392505050565b5f546001600160a01b0316331461043b5760405162461bcd60e51b81526004016104329061116d565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146104ac5760405162461bcd60e51b81526004016104329061116d565b6104b4610398565b6005556104bf610398565b600655565b5f546001600160a01b031633146104ed5760405162461bcd60e51b81526004016104329061116d565b60035460ff16156105325760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610432565b6003805460ff1916600117905543600a55600b54600780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004818101926020929091908290030181865afa15801561059d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c191906111a2565b6001600160a01b031663e6a439053060075f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064491906111a2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561068d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b191906111a2565b600880546001600160a01b0319166001600160a01b0392909216918217905561070e5760405162461bcd60e51b815260206004820152600f60248201526e139bc81c185a5c8818dc99585d1959608a1b6044820152606401610432565b565b5f546001600160a01b031633146107395760405162461bcd60e51b81526004016104329061116d565b801561076857335f908152600160205260408120805484929061075d90849061115a565b9091555061078c9050565b335f90815260016020526040812080548492906107869084906111bd565b90915550505b5050565b5f61038e33848461096d565b5f546001600160a01b031633146107c55760405162461bcd60e51b81526004016104329061116d565b60638260ff16111580156107dd575060638160ff1611155b6108175760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840a8c2f60ab1b6044820152606401610432565b6003805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b6001600160a01b0383166108ab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610432565b6001600160a01b03821661090c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610432565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116109aa5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610432565b60035460ff16610a06575f546001600160a01b03848116911614610a065760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610432565b6008546001600160a01b03848116911614801590610a3257506008546001600160a01b03838116911614155b80610a5457506001600160a01b0383165f908152600c602052604090205460ff165b80610a7657506001600160a01b0382165f908152600c602052604090205460ff165b80610a885750600354610100900460ff165b15610a9d57610a98838383610c1d565b505050565b6008546001600160a01b0390811690831603610b1257600454305f9081526001602052604090205410610b12576003805461ff001916610100179055610aff610afa306001600160a01b03165f9081526001602052604090205490565b610cbc565b6003805461ff0019169055610b12610e0f565b6008546001600160a01b038481169116148015610b3d5750600b546001600160a01b03838116911614155b15610bf657600554811115610b865760405162461bcd60e51b815260206004820152600f60248201526e151e08185b5bdd5b9d081b1a5b5a5d608a1b6044820152606401610432565b60065481610ba8846001600160a01b03165f9081526001602052604090205490565b610bb291906111bd565b1115610bf65760405162461bcd60e51b815260206004820152601360248201527215d85b1b195d08185b5bdd5b9d081b1a5b5a5d606a1b6044820152606401610432565b600854610c1490849083906001600160a01b03868116911614610e4e565b9050610a988383835b6001600160a01b0383165f9081526001602052604081208054839290610c4490849061115a565b90915550506001600160a01b0382165f9081526001602052604081208054839290610c709084906111bd565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161096091815260200190565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610cef57610cef6111d0565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a91906111a2565b81600181518110610d7d57610d7d6111d0565b6001600160a01b039283166020918202929092010152600754610da39130911684610849565b60075460095460405163791ac94760e01b81526001600160a01b039283169263791ac94792610ddf9287925f92889291169042906004016111e4565b5f604051808303815f87803b158015610df6575f80fd5b505af1925050508015610e07575060015b61078c575050565b471561070e576009546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610e4b573d5f803e3d5ffd5b50565b5f600a544303610e5f575081610402565b5f82610e765760035462010000900460ff16610e84565b6003546301000000900460ff165b60ff169050805f03610e995783915050610402565b5f6064610ea68387611143565b610eb09190611255565b9050610ebd863083610c1d565b610ec7818661115a565b9695505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610e4b575f80fd5b5f8060408385031215610f2b575f80fd5b8235610f3681610f06565b946020939093013593505050565b5f805f60608486031215610f56575f80fd5b8335610f6181610f06565b92506020840135610f7181610f06565b929592945050506040919091013590565b5f60208284031215610f92575f80fd5b813561040281610f06565b5f8060408385031215610fae575f80fd5b8235915060208301358015158114610fc4575f80fd5b809150509250929050565b803560ff81168114610fdf575f80fd5b919050565b5f8060408385031215610ff5575f80fd5b610ffe83610fcf565b915061100c60208401610fcf565b90509250929050565b5f8060408385031215611026575f80fd5b823561103181610f06565b91506020830135610fc481610f06565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561108f57815f190482111561107557611075611041565b8085161561108257918102915b93841c939080029061105a565b509250929050565b5f826110a557506001610392565b816110b157505f610392565b81600181146110c757600281146110d1576110ed565b6001915050610392565b60ff8411156110e2576110e2611041565b50506001821b610392565b5060208310610133831016604e8410600b8410161715611110575081810a610392565b61111a8383611055565b805f190482111561112d5761112d611041565b029392505050565b5f61040260ff841683611097565b808202811582820484141761039257610392611041565b8181038181111561039257610392611041565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156111b2575f80fd5b815161040281610f06565b8082018082111561039257610392611041565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156112345784516001600160a01b03168352938301939183019160010161120f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8261126f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212209649213b8fae61a6b7b91b00c08afa7b1410df6d00403bf7db39786aa13c1d8964736f6c63430008190033
0x60806040526003805463ffff00001916630a0a00001790556127106100266012600a610357565b610034906305f5e10061036c565b61003f90601961036c565b6100499190610383565b600455606461005a6012600a610357565b610068906305f5e10061036c565b61007390603261036c565b61007d9190610383565b600555606461008e6012600a610357565b61009c906305f5e10061036c565b6100a790603261036c565b6100b19190610383565b600655600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790553480156100e5575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506101326012600a610357565b610140906305f5e10061036c565b60015f6101545f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f205561017e5f546001600160a01b031690565b600980546001600160a01b0319166001600160a01b0392909216919091179055305f908152600c602081905260408220805460ff19166001908117909155916101ce5f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556102065f546001600160a01b031690565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61023d6012600a610357565b61024b906305f5e10061036c565b60405190815260200160405180910390a36103a2565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156102af57815f190482111561029557610295610261565b808516156102a257918102915b93841c939080029061027a565b509250929050565b5f826102c557506001610351565b816102d157505f610351565b81600181146102e757600281146102f15761030d565b6001915050610351565b60ff84111561030257610302610261565b50506001821b610351565b5060208310610133831016604e8410600b8410161715610330575081810a610351565b61033a8383610275565b805f190482111561034d5761034d610261565b0290505b92915050565b5f61036560ff8416836102b7565b9392505050565b808202811582820484141761035157610351610261565b5f8261039d57634e487b7160e01b5f52601260045260245ffd5b500490565b6112aa806103af5f395ff3fe6080604052600436106100fd575f3560e01c8063751039fc116100925780639fac68cb116100625780639fac68cb146102c1578063a9059cbb146102e0578063a9128ff0146102ff578063cc1776d31461031e578063dd62ed3e1461033e575f80fd5b8063751039fc146102445780638a8c523c146102585780638da5cb5b1461026c57806395d89b4114610292575f80fd5b8063313ce567116100cd578063313ce567146101ba5780634f7041a5146101db57806370a08231146101fa578063715018a61461022e575f80fd5b806306fdde0314610108578063095ea7b31461014a57806318160ddd1461017957806323b872dd1461019b575f80fd5b3661010457005b5f80fd5b348015610113575f80fd5b506040805180820190915260088152674375746520646f6760c01b60208201525b6040516101419190610ed1565b60405180910390f35b348015610155575f80fd5b50610169610164366004610f1a565b610382565b6040519015158152602001610141565b348015610184575f80fd5b5061018d610398565b604051908152602001610141565b3480156101a6575f80fd5b506101696101b5366004610f44565b6103b8565b3480156101c5575f80fd5b5060125b60405160ff9091168152602001610141565b3480156101e6575f80fd5b506003546101c99062010000900460ff1681565b348015610205575f80fd5b5061018d610214366004610f82565b6001600160a01b03165f9081526001602052604090205490565b348015610239575f80fd5b50610242610409565b005b34801561024f575f80fd5b50610242610483565b348015610263575f80fd5b506102426104c4565b348015610277575f80fd5b505f546040516001600160a01b039091168152602001610141565b34801561029d575f80fd5b5060408051808201909152600781526643757465646f6760c81b6020820152610134565b3480156102cc575f80fd5b506102426102db366004610f9d565b610710565b3480156102eb575f80fd5b506101696102fa366004610f1a565b610790565b34801561030a575f80fd5b50610242610319366004610fe4565b61079c565b348015610329575f80fd5b506003546101c9906301000000900460ff1681565b348015610349575f80fd5b5061018d610358366004611015565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b5f61038e338484610849565b5060015b92915050565b5f6103a56012600a611135565b6103b3906305f5e100611143565b905090565b5f6103c484848461096d565b6001600160a01b0384165f908152600260209081526040808320338085529252909120546103fe9186916103f990869061115a565b610849565b5060015b9392505050565b5f546001600160a01b0316331461043b5760405162461bcd60e51b81526004016104329061116d565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146104ac5760405162461bcd60e51b81526004016104329061116d565b6104b4610398565b6005556104bf610398565b600655565b5f546001600160a01b031633146104ed5760405162461bcd60e51b81526004016104329061116d565b60035460ff16156105325760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610432565b6003805460ff1916600117905543600a55600b54600780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004818101926020929091908290030181865afa15801561059d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c191906111a2565b6001600160a01b031663e6a439053060075f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064491906111a2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561068d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b191906111a2565b600880546001600160a01b0319166001600160a01b0392909216918217905561070e5760405162461bcd60e51b815260206004820152600f60248201526e139bc81c185a5c8818dc99585d1959608a1b6044820152606401610432565b565b5f546001600160a01b031633146107395760405162461bcd60e51b81526004016104329061116d565b801561076857335f908152600160205260408120805484929061075d90849061115a565b9091555061078c9050565b335f90815260016020526040812080548492906107869084906111bd565b90915550505b5050565b5f61038e33848461096d565b5f546001600160a01b031633146107c55760405162461bcd60e51b81526004016104329061116d565b60638260ff16111580156107dd575060638160ff1611155b6108175760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840a8c2f60ab1b6044820152606401610432565b6003805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b6001600160a01b0383166108ab5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610432565b6001600160a01b03821661090c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610432565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f81116109aa5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610432565b60035460ff16610a06575f546001600160a01b03848116911614610a065760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610432565b6008546001600160a01b03848116911614801590610a3257506008546001600160a01b03838116911614155b80610a5457506001600160a01b0383165f908152600c602052604090205460ff165b80610a7657506001600160a01b0382165f908152600c602052604090205460ff165b80610a885750600354610100900460ff165b15610a9d57610a98838383610c1d565b505050565b6008546001600160a01b0390811690831603610b1257600454305f9081526001602052604090205410610b12576003805461ff001916610100179055610aff610afa306001600160a01b03165f9081526001602052604090205490565b610cbc565b6003805461ff0019169055610b12610e0f565b6008546001600160a01b038481169116148015610b3d5750600b546001600160a01b03838116911614155b15610bf657600554811115610b865760405162461bcd60e51b815260206004820152600f60248201526e151e08185b5bdd5b9d081b1a5b5a5d608a1b6044820152606401610432565b60065481610ba8846001600160a01b03165f9081526001602052604090205490565b610bb291906111bd565b1115610bf65760405162461bcd60e51b815260206004820152601360248201527215d85b1b195d08185b5bdd5b9d081b1a5b5a5d606a1b6044820152606401610432565b600854610c1490849083906001600160a01b03868116911614610e4e565b9050610a988383835b6001600160a01b0383165f9081526001602052604081208054839290610c4490849061115a565b90915550506001600160a01b0382165f9081526001602052604081208054839290610c709084906111bd565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161096091815260200190565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610cef57610cef6111d0565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a91906111a2565b81600181518110610d7d57610d7d6111d0565b6001600160a01b039283166020918202929092010152600754610da39130911684610849565b60075460095460405163791ac94760e01b81526001600160a01b039283169263791ac94792610ddf9287925f92889291169042906004016111e4565b5f604051808303815f87803b158015610df6575f80fd5b505af1925050508015610e07575060015b61078c575050565b471561070e576009546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610e4b573d5f803e3d5ffd5b50565b5f600a544303610e5f575081610402565b5f82610e765760035462010000900460ff16610e84565b6003546301000000900460ff165b60ff169050805f03610e995783915050610402565b5f6064610ea68387611143565b610eb09190611255565b9050610ebd863083610c1d565b610ec7818661115a565b9695505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610e4b575f80fd5b5f8060408385031215610f2b575f80fd5b8235610f3681610f06565b946020939093013593505050565b5f805f60608486031215610f56575f80fd5b8335610f6181610f06565b92506020840135610f7181610f06565b929592945050506040919091013590565b5f60208284031215610f92575f80fd5b813561040281610f06565b5f8060408385031215610fae575f80fd5b8235915060208301358015158114610fc4575f80fd5b809150509250929050565b803560ff81168114610fdf575f80fd5b919050565b5f8060408385031215610ff5575f80fd5b610ffe83610fcf565b915061100c60208401610fcf565b90509250929050565b5f8060408385031215611026575f80fd5b823561103181610f06565b91506020830135610fc481610f06565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561108f57815f190482111561107557611075611041565b8085161561108257918102915b93841c939080029061105a565b509250929050565b5f826110a557506001610392565b816110b157505f610392565b81600181146110c757600281146110d1576110ed565b6001915050610392565b60ff8411156110e2576110e2611041565b50506001821b610392565b5060208310610133831016604e8410600b8410161715611110575081810a610392565b61111a8383611055565b805f190482111561112d5761112d611041565b029392505050565b5f61040260ff841683611097565b808202811582820484141761039257610392611041565b8181038181111561039257610392611041565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156111b2575f80fd5b815161040281610f06565b8082018082111561039257610392611041565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156112345784516001600160a01b03168352938301939183019160010161120f565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8261126f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212209649213b8fae61a6b7b91b00c08afa7b1410df6d00403bf7db39786aa13c1d8964736f6c63430008190033