6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a6200056e565b62000042906305f5e10062000586565b600555620000536009600a6200056e565b6200006290621e848062000586565b600655620000736009600a6200056e565b6200008290621e848062000586565b6007556000600d556011600e556003600f55600f54600d54600e54620000a99190620005a0565b620000b59190620005a0565b60105560646011819055601281905560138190556014818155601855601955601c805461ffff60a01b1916600160a81b17905560055461271090620000fc9060c862000586565b620001089190620005b6565b601d553480156200011857600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe9190620005d9565b600280546001600160a01b0319166001600160a01b03928316179055601a546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002839190620005d9565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb9190620005d9565b601c80546001600160a01b039283166001600160a01b031991821681178355601b805483169091179055306000818152600960209081526040808320601a54881684528252808320600019905533808452600a8352818420805460ff199081166001908117909255601680548b1687528487208054831684179055838752600b8652848720805483168417905598548a16865283862080548216831790558854909916855282852080548a168217905594845281842080549098169094179096556015805485167338506677d262c17047d0c2c6f99b7f74ab4d406f90811790915585548516734f8be191af9619063065de8fce2e34d2e6da5aeb17909555601780549094169094179092556005548183526008909352838220839055925190917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200044b91815260200190565b60405180910390a362000604565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004b057816000190482111562000494576200049462000459565b80851615620004a257918102915b93841c939080029062000474565b509250929050565b600082620004c95750600162000568565b81620004d85750600062000568565b8160018114620004f15760028114620004fc576200051c565b600191505062000568565b60ff84111562000510576200051062000459565b50506001821b62000568565b5060208310610133831016604e8410600b841016171562000541575081810a62000568565b6200054d83836200046f565b806000190482111562000564576200056462000459565b0290505b92915050565b60006200057f60ff841683620004b8565b9392505050565b808202811582820484141762000568576200056862000459565b8082018082111562000568576200056862000459565b600082620005d457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005ec57600080fd5b81516001600160a01b03811681146200057f57600080fd5b61239880620006146000396000f3fe6080604052600436106102555760003560e01c80637d1db4a511610139578063ccf8c036116100b6578063d78e139d1161007a578063d78e139d146106ea578063dd62ed3e1461070a578063ec7cd01a14610750578063f2fde38b14610770578063f6a78e1714610790578063f887ea40146107a557600080fd5b8063ccf8c03614610655578063cec10c1114610675578063cfdbe82314610695578063d148b74c146106b5578063d51ed1c8146106ca57600080fd5b80639acb773e116100fd5780639acb773e146105b5578063a8aa1b31146105d5578063a9059cbb146105f5578063b2bdfa7b14610615578063ba08f4181461063557600080fd5b80637d1db4a51461050d578063893d20e8146105235780638a4068dd146105555780638da5cb5b1461056a57806395d89b411461058857600080fd5b806323b872dd116101d25780635d83e1d5116101965780635d83e1d51461044b5780636ddd17131461046b57806370a082311461048c578063715018a6146104c257806377b54bad146104d757806378109e54146104f757600080fd5b806323b872dd146103c55780632b112e49146103e5578063313ce567146103fa5780634d07912a146104165780634e9f829d1461042b57600080fd5b806308fd3d051161021957806308fd3d0514610339578063095ea7b31461035a5780631161ae391461037a57806318160ddd1461039a5780631df4ccfc146103af57600080fd5b806303e7c3a71461026157806304368f65146102835780630445b667146102a35780630621472c146102cc57806306fdde03146102fc57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5061028161027c366004611daf565b6107c5565b005b34801561028f57600080fd5b5061028161029e366004611dff565b610884565b3480156102af57600080fd5b506102b9601d5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102ec6102e7366004611e42565b6108e2565b60405190151581526020016102c3565b34801561030857600080fd5b5060408051808201909152600b81526a436f70795768616c65414960a81b60208201525b6040516102c39190611e5d565b34801561034557600080fd5b50601c546102ec90600160a01b900460ff1681565b34801561036657600080fd5b506102ec610375366004611eab565b6108f6565b34801561038657600080fd5b506102ec610395366004611ec7565b610962565b3480156103a657600080fd5b506005546102b9565b3480156103bb57600080fd5b506102b960105481565b3480156103d157600080fd5b506102ec6103e0366004611ee9565b610976565b3480156103f157600080fd5b506102b9610a38565b34801561040657600080fd5b50604051600981526020016102c3565b34801561042257600080fd5b50610281610a8a565b34801561043757600080fd5b50610281610446366004611f25565b610b14565b34801561045757600080fd5b50610281610466366004611f25565b610b6c565b34801561047757600080fd5b50601c546102ec90600160a81b900460ff1681565b34801561049857600080fd5b506102b96104a7366004611e42565b6001600160a01b031660009081526008602052604090205490565b3480156104ce57600080fd5b50610281610bc4565b3480156104e357600080fd5b506102ec6104f2366004611eab565b610c38565b34801561050357600080fd5b506102b960075481565b34801561051957600080fd5b506102b960065481565b34801561052f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102c3565b34801561056157600080fd5b50610281610d38565b34801561057657600080fd5b506000546001600160a01b031661053d565b34801561059457600080fd5b506040805180820190915260048152634357414960e01b602082015261032c565b3480156105c157600080fd5b506102816105d0366004611f3e565b610d83565b3480156105e157600080fd5b50601c5461053d906001600160a01b031681565b34801561060157600080fd5b506102ec610610366004611eab565b610dd8565b34801561062157600080fd5b5060005461053d906001600160a01b031681565b34801561064157600080fd5b50610281610650366004611f8b565b610de5565b34801561066157600080fd5b50610281610670366004611f3e565b610e7b565b34801561068157600080fd5b50610281610690366004612062565b610ee3565b3480156106a157600080fd5b506102816106b0366004612062565b610f1e565b3480156106c157600080fd5b50610281610f69565b3480156106d657600080fd5b506102b96106e5366004611f25565b610f9d565b3480156106f657600080fd5b50610281610705366004611f25565b610fe4565b34801561071657600080fd5b506102b961072536600461208e565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561075c57600080fd5b5061028161076b366004611f3e565b611033565b34801561077c57600080fd5b5061028161078b366004611e42565b611088565b34801561079c57600080fd5b50610281611172565b3480156107b157600080fd5b50601a5461053d906001600160a01b031681565b6000546001600160a01b031633146107f85760405162461bcd60e51b81526004016107ef906120c1565b60405180910390fd5b600d849055600e839055600f82905561081b8261081586866111da565b906111da565b601055601181905561082e60058261210c565b6010541061087e5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2032302500000060448201526064016107ef565b50505050565b6000546001600160a01b031633146108ae5760405162461bcd60e51b81526004016107ef906120c1565b601c805460ff60a81b1916600160a81b841515021790556108d16009600a612212565b6108db9082612221565b601d555050565b60006108f0826000196108f6565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109519086815260200190565b60405180910390a350600192915050565b60008261096e83610f9d565b119392505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610a23576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109fe918490611239565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610a2e848484611273565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a85906003546001600160a01b0316600090815260086020526040902054610a7f9060055490611666565b90611666565b905090565b6000546001600160a01b03163314610ab45760405162461bcd60e51b81526004016107ef906120c1565b6000600d8190556005600e819055600f829055610ad2908290612238565b610adc9190612238565b60105560646011819055601381905560128190556014556005805461271091610b059190612221565b610b0f919061210c565b601d55565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b81526004016107ef906120c1565b6001811015610b4c57600080fd5b606481600554610b5c9190612221565b610b66919061210c565b60065550565b6000546001600160a01b03163314610b965760405162461bcd60e51b81526004016107ef906120c1565b6001811015610ba457600080fd5b606481600554610bb49190612221565b610bbe919061210c565b60075550565b6000546001600160a01b03163314610bee5760405162461bcd60e51b81526004016107ef906120c1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610c5457600080fd5b81600003610cc7576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc4919061224b565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190612264565b336000908152600b602052604090205460ff16610d5457600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610d80573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610dad5760405162461bcd60e51b81526004016107ef906120c1565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610a31338484611273565b6000546001600160a01b03163314610e0f5760405162461bcd60e51b81526004016107ef906120c1565b60005b8251811015610e765781600c6000858481518110610e3257610e32612281565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e6e81612297565b915050610e12565b505050565b6000546001600160a01b03163314610ea55760405162461bcd60e51b81526004016107ef906120c1565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b03163314610f0d5760405162461bcd60e51b81526004016107ef906120c1565b601291909155601391909155601455565b6000546001600160a01b03163314610f485760405162461bcd60e51b81526004016107ef906120c1565b601c805460ff60a01b1916600160a01b179055601392909255601255601455565b6000546001600160a01b03163314610f935760405162461bcd60e51b81526004016107ef906120c1565b610f9b6116a8565b565b60006108f0610faa610a38565b601c546001600160a01b0316600090815260086020526040902054610fde90610fd7906002905b90611a19565b8590611a19565b90611a9b565b60175447906001600160a01b03166108fc60646110018585612221565b61100b919061210c565b6040518115909202916000818181858888f19350505050158015610e76573d6000803e3d6000fd5b6000546001600160a01b0316331461105d5760405162461bcd60e51b81526004016107ef906120c1565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110b25760405162461bcd60e51b81526004016107ef906120c1565b6001600160a01b0381166111175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ef565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461119c5760405162461bcd60e51b81526004016107ef906120c1565b6111a86009600a612212565b6111b7906402540be400612221565b6007556111c66009600a612212565b6111d5906402540be400612221565b600655565b6000806111e78385612238565b905083811015610a315760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107ef565b6000818484111561125d5760405162461bcd60e51b81526004016107ef9190611e5d565b50600061126a84866122b0565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff161580156112b557506001600160a01b0383166000908152600c602052604090205460ff16155b6112f15760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016107ef565b601e5460ff161561130e57611307848484611add565b9050610a31565b6001600160a01b03841660009081526001602052604090205460ff1615801561135057506001600160a01b03831660009081526001602052604090205460ff16155b156113a557601c54600160a01b900460ff166113a55760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107ef565b6001600160a01b03841660009081526001602052604090205460ff161580156113d757506001600160a01b0383163014155b80156113f157506003546001600160a01b03848116911614155b801561140b5750601c546001600160a01b03848116911614155b801561142557506017546001600160a01b03848116911614155b801561143f57506016546001600160a01b03848116911614155b801561146457506001600160a01b0383166000908152600b602052604090205460ff16155b15611505576001600160a01b03831660009081526008602052604090205460075461148f8483612238565b11156115035760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107ef565b505b61150f8483611bc3565b611517611c30565b15611524576115246116a8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611576918490611239565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16806115c357506001600160a01b0384166000908152600a602052604090205460ff165b6115d7576115d2858486611c86565b6115d9565b825b6001600160a01b0385166000908152600860205260409020549091506115ff90826111da565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116539085815260200190565b60405180910390a3506001949350505050565b6000610a3183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611239565b601e805460ff191660011790556018546019546000916116c791610962565b6116d357600d546116d6565b60005b905060006116fa6002610fde601054610fde86601d54611a1990919063ffffffff16565b9050600061171382601d5461166690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061174d5761174d612281565b6001600160a01b03928316602091820292909201015260025482519116908290600190811061177e5761177e612281565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac947906117c89086906000908790309042906004016122c3565b600060405180830381600087803b1580156117e257600080fd5b505af11580156117f6573d6000803e3d6000fd5b50505050600061180f824761166690919063ffffffff16565b9050600061182a611821886002611a9b565b60105490611666565b9050600061183f6002610fde8481878d611a19565b9050600061185c83610fde600e5487611a1990919063ffffffff16565b9050600061187984610fde600f5488611a1990919063ffffffff16565b6016546040519192506000916001600160a01b039091169084908381818185875af1925050503d80600081146118cb576040519150601f19603f3d011682016040523d82523d6000602084013e6118d0565b606091505b50506017546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611920576040519150601f19603f3d011682016040523d82523d6000602084013e611925565b606091505b50909150508915611a0257601a5460155460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af11580156119a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119c59190612334565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff19169055505050505050505050565b600082600003611a2b575060006108f0565b6000611a378385612221565b905082611a44858361210c565b14610a315760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107ef565b6000610a3183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d81565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611b2e918490611239565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611b5d90836111da565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bb19086815260200190565b60405180910390a35060019392505050565b60065481111580611bec57506001600160a01b0382166000908152600b602052604090205460ff165b611c2c5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107ef565b5050565b601c546000906001600160a01b03163314801590611c515750601e5460ff16155b8015611c665750601c54600160a81b900460ff165b8015610a85575050601d5430600090815260086020526040902054101590565b601454601c54600091906001600160a01b0390811690841603611cac5750601254611cc7565b601c546001600160a01b0390811690861603611cc757506013545b6000611cf46011546064611cdb9190612221565b610fde84610fd16010548a611a1990919063ffffffff16565b306000908152600860205260409020549091508190611d1390826111da565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d649085815260200190565b60405180910390a3611d768683611666565b979650505050505050565b60008183611da25760405162461bcd60e51b81526004016107ef9190611e5d565b50600061126a848661210c565b60008060008060808587031215611dc557600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114610d8057600080fd5b8035611dfa81611de1565b919050565b60008060408385031215611e1257600080fd5b8235611e1d81611de1565b946020939093013593505050565b80356001600160a01b0381168114611dfa57600080fd5b600060208284031215611e5457600080fd5b610a3182611e2b565b600060208083528351808285015260005b81811015611e8a57858101830151858201604001528201611e6e565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611ebe57600080fd5b611e1d83611e2b565b60008060408385031215611eda57600080fd5b50508035926020909101359150565b600080600060608486031215611efe57600080fd5b611f0784611e2b565b9250611f1560208501611e2b565b9150604084013590509250925092565b600060208284031215611f3757600080fd5b5035919050565b60008060408385031215611f5157600080fd5b611f5a83611e2b565b91506020830135611f6a81611de1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611f9e57600080fd5b823567ffffffffffffffff80821115611fb657600080fd5b818501915085601f830112611fca57600080fd5b8135602082821115611fde57611fde611f75565b8160051b604051601f19603f8301168101818110868211171561200357612003611f75565b60405292835281830193508481018201928984111561202157600080fd5b948201945b838610156120465761203786611e2b565b85529482019493820193612026565b96506120559050878201611def565b9450505050509250929050565b60008060006060848603121561207757600080fd5b505081359360208301359350604090920135919050565b600080604083850312156120a157600080fd5b6120aa83611e2b565b91506120b860208401611e2b565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261212957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561216957816000190482111561214f5761214f6120f6565b8085161561215c57918102915b93841c9390800290612133565b509250929050565b600082612180575060016108f0565b8161218d575060006108f0565b81600181146121a357600281146121ad576121c9565b60019150506108f0565b60ff8411156121be576121be6120f6565b50506001821b6108f0565b5060208310610133831016604e8410600b84101617156121ec575081810a6108f0565b6121f6838361212e565b806000190482111561220a5761220a6120f6565b029392505050565b6000610a3160ff841683612171565b80820281158282048414176108f0576108f06120f6565b808201808211156108f0576108f06120f6565b60006020828403121561225d57600080fd5b5051919050565b60006020828403121561227657600080fd5b8151610a3181611de1565b634e487b7160e01b600052603260045260246000fd5b6000600182016122a9576122a96120f6565b5060010190565b818103818111156108f0576108f06120f6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123135784516001600160a01b0316835293830193918301916001016122ee565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561234957600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122004246c165cf9c8945603e73bc9a5b8a4bd793658b154273c9f5ef829bf349f7e64736f6c63430008110033