60806040526005805460ff60a01b1916600160a01b17905561001f601290565b61002a90600a6104ae565b61003790620186a06104c3565b6006556100466012600a6104ae565b6100519060646104c3565b6007556008805460ff1916905560408051808201909152601081526f111a59da5d185b0814dd185b99185c9960821b60208201526009906100929082610572565b50604080518082019091526004815263111254d560e21b6020820152600a906100bb9082610572565b5033600980546100ca906104ee565b80601f01602080910402602001604051908101604052809291908181526020018280546100f6906104ee565b80156101415780601f1061011857610100808354040283529160200191610141565b820191905f5260205f20905b81548152906001019060200180831161012457829003601f168201915b5050505050600a8054610153906104ee565b80601f016020809104026020016040519081016040528092919081815260200182805461017f906104ee565b80156101ca5780601f106101a1576101008083540402835291602001916101ca565b820191905f5260205f20905b8154815290600101906020018083116101ad57829003601f168201915b505050505081600390816101de9190610572565b5060046101eb8282610572565b5050506001600160a01b03811661021c57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6102258161023e565b506102395f3360065461028f60201b60201c565b61063f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166102b9578060025f8282546102ae919061062c565b909155506103299050565b6001600160a01b0383165f908152602081905260409020548181101561030b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610213565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661034557600280548290039055610363565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103a891815260200190565b60405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610404578085048111156103e8576103e86103b5565b60018416156103f657908102905b60019390931c9280026103cd565b935093915050565b5f8261041a575060016104a8565b8161042657505f6104a8565b816001811461043c576002811461044657610462565b60019150506104a8565b60ff841115610457576104576103b5565b50506001821b6104a8565b5060208310610133831016604e8410600b8410161715610485575081810a6104a8565b6104915f1984846103c9565b805f19048211156104a4576104a46103b5565b0290505b92915050565b5f6104bc60ff84168361040c565b9392505050565b80820281158282048414176104a8576104a86103b5565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061050257607f821691505b60208210810361052057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561056d57805f5260205f20601f840160051c8101602085101561054b5750805b601f840160051c820191505b8181101561056a575f8155600101610557565b50505b505050565b81516001600160401b0381111561058b5761058b6104da565b61059f8161059984546104ee565b84610526565b6020601f8211600181146105d1575f83156105ba5750848201515b5f19600385901b1c1916600184901b17845561056a565b5f84815260208120601f198516915b8281101561060057878501518255602094850194600190920191016105e0565b508482101561061d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156104a8576104a86103b5565b6113698061064c5f395ff3fe608060405260043610610134575f3560e01c8063676c8458116100a857806395d89b411161006d57806395d89b411461034d578063a9059cbb14610361578063db05e5cb14610380578063dd62ed3e14610394578063e604b804146103d8578063f2fde38b146103f7575f80fd5b8063676c8458146102b557806368c2f2df146102ca57806370a08231146102de578063715018a6146103125780638da5cb5b14610326575f80fd5b8063313ce567116100f9578063313ce567146102045780633b18eab41461021f5780633da146b11461023f57806356a060a21461025e57806360e65bb814610275578063620cc86c14610296575f80fd5b80630288fd721461013f57806306fdde0314610177578063095ea7b31461019857806318160ddd146101c757806323b872dd146101e5575f80fd5b3661013b57005b5f80fd5b34801561014a575f80fd5b5061015e610159366004610e17565b610416565b60405161016e9493929190610e5c565b60405180910390f35b348015610182575f80fd5b5061018b61054c565b60405161016e9190610e92565b3480156101a3575f80fd5b506101b76101b2366004610ec6565b6105dc565b604051901515815260200161016e565b3480156101d2575f80fd5b506002545b60405190815260200161016e565b3480156101f0575f80fd5b506101b76101ff366004610eee565b6105f5565b34801561020f575f80fd5b506040516012815260200161016e565b34801561022a575f80fd5b506005546101b790600160a01b900460ff1681565b34801561024a575f80fd5b5061015e610259366004610e17565b610618565b348015610269575f80fd5b5060085460ff166101b7565b348015610280575f80fd5b5061029461028f366004610f37565b6106e4565b005b3480156102a1575f80fd5b506102946102b0366004610e17565b6106ff565b3480156102c0575f80fd5b506101d760075481565b3480156102d5575f80fd5b50600b546101d7565b3480156102e9575f80fd5b506101d76102f8366004610f50565b6001600160a01b03165f9081526020819052604090205490565b34801561031d575f80fd5b50610294610723565b348015610331575f80fd5b506005546040516001600160a01b03909116815260200161016e565b348015610358575f80fd5b5061018b610736565b34801561036c575f80fd5b506101b761037b366004610ec6565b610745565b34801561038b575f80fd5b50610294610752565b34801561039f575f80fd5b506101d76103ae366004610f69565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103e3575f80fd5b506102946103f2366004610fce565b61077b565b348015610402575f80fd5b50610294610411366004610f50565b610855565b5f60605f80600b80549050851061046a5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064015b60405180910390fd5b5f600b868154811061047e5761047e6110b2565b5f918252602082206003909102018054600282015460018301805493955060ff9283169490939082900b926101009092049091169083906104be906110c6565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea906110c6565b80156105355780601f1061050c57610100808354040283529160200191610535565b820191905f5260205f20905b81548152906001019060200180831161051857829003601f168201915b505050505092509450945094509450509193509193565b60606003805461055b906110c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610587906110c6565b80156105d25780601f106105a9576101008083540402835291602001916105d2565b820191905f5260205f20905b8154815290600101906020018083116105b557829003601f168201915b5050505050905090565b5f336105e9818585610892565b60019150505b92915050565b5f336106028582856108a4565b61060d85858561091f565b506001949350505050565b600b8181548110610627575f80fd5b5f9182526020909120600390910201805460018201805460ff90921693509061064f906110c6565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906110c6565b80156106c65780601f1061069d576101008083540402835291602001916106c6565b820191905f5260205f20905b8154815290600101906020018083116106a957829003601f168201915b505050600290930154919250505f81900b9060ff6101009091041684565b6106ec61097c565b6008805460ff1916911515919091179055565b61070761097c565b6107136012600a6111f5565b61071d9082611203565b60075550565b61072b61097c565b6107345f6109a9565b565b60606004805461055b906110c6565b5f336105e981858561091f565b61075a61097c565b6005805460ff60a01b198116600160a01b9182900460ff1615909102179055565b604080516080810182528515158152602081018581525f85810b9383019390935260ff84166060830152600b80546001810182559352815160039093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db98101805494151560ff1990951694909417845590519192917f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dba909101906108209082611265565b5060408201516002909101805460609093015160ff9081166101000261ffff1990941692169190911791909117905550505050565b61085d61097c565b6001600160a01b03811661088657604051631e4fbdf760e01b81525f6004820152602401610461565b61088f816109a9565b50565b61089f83838360016109fa565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610919578181101561090b57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610461565b61091984848484035f6109fa565b50505050565b6001600160a01b03831661094857604051634b637e8f60e11b81525f6004820152602401610461565b6001600160a01b0382166109715760405163ec442f0560e01b81525f6004820152602401610461565b61089f838383610acc565b6005546001600160a01b031633146107345760405163118cdaa760e01b8152336004820152602401610461565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038416610a235760405163e602df0560e01b81525f6004820152602401610461565b6001600160a01b038316610a4c57604051634a1406b160e11b81525f6004820152602401610461565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561091957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610abe91815260200190565b60405180910390a350505050565b6001600160a01b038316610b305760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610461565b6001600160a01b038216610b925760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610461565b5f8111610bf35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610461565b60085460ff16158015610c1457506005546001600160a01b03848116911614155b8015610c2e57506005546001600160a01b03838116911614155b15610c715760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610461565b6005546001600160a01b03163214610ceb57600554600160a01b900460ff161515600103610ceb57600754811115610ceb5760405162461bcd60e51b815260206004820152601a60248201527f4d617820416d6f756e74206f6620746f6b656e7320696e2074780000000000006044820152606401610461565b61089f8383836001600160a01b038316610d1b578060025f828254610d109190611320565b90915550610d8b9050565b6001600160a01b0383165f9081526020819052604090205481811015610d6d5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610461565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610da757600280548290039055610dc5565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e0a91815260200190565b60405180910390a3505050565b5f60208284031215610e27575f80fd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b8415158152608060208201525f610e766080830186610e2e565b9050835f0b604083015260ff8316606083015295945050505050565b602081525f610ea46020830184610e2e565b9392505050565b80356001600160a01b0381168114610ec1575f80fd5b919050565b5f8060408385031215610ed7575f80fd5b610ee083610eab565b946020939093013593505050565b5f805f60608486031215610f00575f80fd5b610f0984610eab565b9250610f1760208501610eab565b929592945050506040919091013590565b80358015158114610ec1575f80fd5b5f60208284031215610f47575f80fd5b610ea482610f28565b5f60208284031215610f60575f80fd5b610ea482610eab565b5f8060408385031215610f7a575f80fd5b610f8383610eab565b9150610f9160208401610eab565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b80355f81900b8114610ec1575f80fd5b803560ff81168114610ec1575f80fd5b5f805f8060808587031215610fe1575f80fd5b610fea85610f28565b9350602085013567ffffffffffffffff811115611005575f80fd5b8501601f81018713611015575f80fd5b803567ffffffffffffffff81111561102f5761102f610f9a565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561105e5761105e610f9a565b604052818152828201602001891015611075575f80fd5b816020840160208301375f6020838301015280955050505061109960408601610fae565b91506110a760608601610fbe565b905092959194509250565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806110da57607f821691505b6020821081036110f857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561114d57808504811115611131576111316110fe565b600184161561113f57908102905b60019390931c928002611116565b935093915050565b5f82611163575060016105ef565b8161116f57505f6105ef565b8160018114611185576002811461118f576111ab565b60019150506105ef565b60ff8411156111a0576111a06110fe565b50506001821b6105ef565b5060208310610133831016604e8410600b84101617156111ce575081810a6105ef565b6111da5f198484611112565b805f19048211156111ed576111ed6110fe565b029392505050565b5f610ea460ff841683611155565b80820281158282048414176105ef576105ef6110fe565b601f82111561089f57805f5260205f20601f840160051c8101602085101561123f5750805b601f840160051c820191505b8181101561125e575f815560010161124b565b5050505050565b815167ffffffffffffffff81111561127f5761127f610f9a565b6112938161128d84546110c6565b8461121a565b6020601f8211600181146112c5575f83156112ae5750848201515b5f19600385901b1c1916600184901b17845561125e565b5f84815260208120601f198516915b828110156112f457878501518255602094850194600190920191016112d4565b508482101561131157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156105ef576105ef6110fe56fea2646970667358221220ba1eb6a64fdbcff5fe441a6b95160881d7a631d000f5379722508d8ceb19cd1064736f6c634300081a0033