6080604052600280546001600160a01b03191661dead179055620000266009600a620004ca565b6200003590620f42406200058b565b600355600680546001600160a01b031916738e47aaf3936370024297aff77726552970b94bd51790556000600d8190556007600e819055620000779162000443565b600f5560646010556011805461ff00191661010017905560035461271090620000a29060c86200058b565b620000ae91906200045e565b601255620186a06003546103e8620000c791906200058b565b620000d391906200045e565b601355620186a06003546101f4620000ec91906200058b565b620000f891906200045e565b601455600160155560056016556017805461ffff19166101011790553480156200012157600080fd5b50600080546001600160a01b03199081163317909155600180548216737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556007805490921681179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200019b57600080fd5b505afa158015620001b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d6919062000411565b6001600160a01b031663c9c65396600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023357600080fd5b505afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000411565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620002b657600080fd5b505af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000411565b600880546001600160a01b0319166001600160a01b0392831617905530600090815260056020908152604080832060075485168452825280832060001990558254841680845260098352818420805460ff1990811660019081179092557f8c5f1879530f7a68163ee9536c31dfed56d5ce9c2fc2a54f33c58681e65198658054821683179055600a855283862080548216831790557f8ba084c4220fd5b89834775eacfe0a3894a66548d743b1502be2f90da89737cb80548216831790556002549096168552828520805490961617909455426018556003548484526004835281842081905590519081528392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620005c3565b6000602082840312156200042457600080fd5b81516001600160a01b03811681146200043c57600080fd5b9392505050565b60008219821115620004595762000459620005ad565b500190565b6000826200047c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620004c2578160001904821115620004a657620004a6620005ad565b80851615620004b457918102915b93841c939080029062000486565b509250929050565b60006200043c60ff841683600082620004e65750600162000585565b81620004f55750600062000585565b81600181146200050e5760028114620005195762000539565b600191505062000585565b60ff8411156200052d576200052d620005ad565b50506001821b62000585565b5060208310610133831016604e8410600b84101617156200055e575081810a62000585565b6200056a838362000481565b8060001904821115620005815762000581620005ad565b0290505b92915050565b6000816000190483118215151615620005a857620005a8620005ad565b500290565b634e487b7160e01b600052601160045260246000fd5b61203780620005d36000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063aa4bde28116100ab578063dd62ed3e1161006f578063dd62ed3e14610735578063e346d64f1461077b578063ec993f5e146107ae578063f1d5f517146107ce578063f887ea40146107ee57600080fd5b8063aa4bde2814610680578063ade927e714610696578063b2fe8a7a146106df578063d05b5a00146106ff578063d36d04971461071f57600080fd5b80639d34a30d116100f25780639d34a30d146105cf578063a0916b82146105ef578063a6af260f1461060f578063a8aa1b3114610640578063a9059cbb1461066057600080fd5b8063715018a61461051657806378e979251461052b578063893d20e8146105415780638b42507f1461057357806395d89b41146105a357600080fd5b8063313ce567116101bc5780633f4218e0116101805780633f4218e014610439578063571ac8b0146104695780635b0833cc146104895780636ddd1713146104c157806370a08231146104e057600080fd5b8063313ce567146103a35780633535cea9146103bf578063364333f4146103df5780633bbac579146103f45780633e6968b61461042457600080fd5b80630eff6427116102035780630eff64271461031457806318160ddd1461032a57806323b872dd1461033f5780632b112e491461035f5780632f54bf6e1461037457600080fd5b806302259e9e1461024b5780630445b6671461027457806306fdde031461028a578063095ea7b3146102c25780630b78f9c0146102f257600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026160135481565b6040519081526020015b60405180910390f35b34801561028057600080fd5b5061026160145481565b34801561029657600080fd5b506040805180820190915260068152654341544f4b4960d01b60208201525b60405161026b9190611e41565b3480156102ce57600080fd5b506102e26102dd366004611cbf565b61080e565b604051901515815260200161026b565b3480156102fe57600080fd5b5061031261030d366004611dc5565b61087b565b005b34801561032057600080fd5b5061026160155481565b34801561033657600080fd5b50600354610261565b34801561034b57600080fd5b506102e261035a366004611c50565b61091b565b34801561036b57600080fd5b506102616109db565b34801561038057600080fd5b506102e261038f366004611bdd565b6000546001600160a01b0391821691161490565b3480156103af57600080fd5b506040516009815260200161026b565b3480156103cb57600080fd5b506102616103da366004611bdd565b610a08565b3480156103eb57600080fd5b50610312610a53565b34801561040057600080fd5b506102e261040f366004611bdd565b600b6020526000908152604090205460ff1681565b34801561043057600080fd5b50610261610ab9565b34801561044557600080fd5b506102e2610454366004611bdd565b60096020526000908152604090205460ff1681565b34801561047557600080fd5b506102e2610484366004611bdd565b610acd565b34801561049557600080fd5b506102616104a4366004611cbf565b601960209081526000928352604080842090915290825290205481565b3480156104cd57600080fd5b506011546102e290610100900460ff1681565b3480156104ec57600080fd5b506102616104fb366004611bdd565b6001600160a01b031660009081526004602052604090205490565b34801561052257600080fd5b50610312610adb565b34801561053757600080fd5b5061026160185481565b34801561054d57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161026b565b34801561057f57600080fd5b506102e261058e366004611bdd565b600a6020526000908152604090205460ff1681565b3480156105af57600080fd5b5060408051808201909152600381526210d05560ea1b60208201526102b5565b3480156105db57600080fd5b506103126105ea366004611c50565b610b4a565b3480156105fb57600080fd5b5061031261060a366004611ceb565b610c39565b34801561061b57600080fd5b506015546013546016546040805193845260208401929092529082015260600161026b565b34801561064c57600080fd5b5060085461055b906001600160a01b031681565b34801561066c57600080fd5b506102e261067b366004611cbf565b610cda565b34801561068c57600080fd5b5061026160125481565b3480156106a257600080fd5b506106ca6106b1366004611bdd565b600c602052600090815260409020805460019091015482565b6040805192835260208301919091520161026b565b3480156106eb57600080fd5b506103126106fa366004611d8e565b610cee565b34801561070b57600080fd5b5061031261071a366004611c91565b610d3c565b34801561072b57600080fd5b5061026160165481565b34801561074157600080fd5b50610261610750366004611c17565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561078757600080fd5b5060175460ff8082169161010090041660408051921515835290151560208301520161026b565b3480156107ba57600080fd5b506103126107c9366004611de7565b610d91565b3480156107da57600080fd5b506103126107e9366004611dac565b610dc9565b3480156107fa57600080fd5b5060075461055b906001600160a01b031681565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108699086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146108ae5760405162461bcd60e51b81526004016108a590611e96565b60405180910390fd5b600e819055600d8290556108c28183611f27565b600f819055601910156109175760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016108a5565b5050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146109c8576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526005825283812033825290915291909120546109a3918490610e14565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b6109d3848484610e4e565b949350505050565b6002546001600160a01b0316600090815260046020526040812054600354610a039190611f80565b905090565b600080610a206103e8610a1a856113f0565b9061149e565b90506000610a39601654836114e090919063ffffffff16565b90506109d3612710610a1a83610a4d6109db565b906114e0565b6000546001600160a01b03163314610a7d5760405162461bcd60e51b81526004016108a590611e96565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ab6573d6000803e3d6000fd5b50565b6000610a03601554610a1a4260185461155f565b60006108758260001961080e565b6000546001600160a01b03163314610b055760405162461bcd60e51b81526004016108a590611e96565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610b745760405162461bcd60e51b81526004016108a590611e96565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610bbe57600080fd5b505af1158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611d71565b610c345760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108a5565b505050565b6000546001600160a01b03163314610c635760405162461bcd60e51b81526004016108a590611e96565b60005b82811015610cd45781600b6000868685818110610c8557610c85611fc8565b9050602002016020810190610c9a9190611bdd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ccc81611f97565b915050610c66565b50505050565b6000610ce7338484610e4e565b9392505050565b6000546001600160a01b03163314610d185760405162461bcd60e51b81526004016108a590611e96565b6017805461ffff191692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b03163314610d665760405162461bcd60e51b81526004016108a590611e96565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b81526004016108a590611e96565b601592909255601355601655565b6000546001600160a01b03163314610df35760405162461bcd60e51b81526004016108a590611e96565b6103e881600354610e049190611f61565b610e0e9190611f3f565b60125550565b60008184841115610e385760405162461bcd60e51b81526004016108a59190611e41565b506000610e458486611f80565b95945050505050565b6001600160a01b0383166000908152600a602052604081205484908490849060ff16158015610e8a57506008546001600160a01b038381169116145b15610f3257610e9883610a08565b6001600160a01b03841660009081526019602052604081208391610eba610ab9565b815260200190815260200160002054610ed39190611f27565b1115610f325760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f742073656c6c206f72207472616e73666572206d6f72652074686160448201526737103634b6b4ba1760c11b60648201526084016108a5565b6001600160a01b0387166000908152600b602052604090205460ff1615610f895760405162461bcd60e51b815260206004820152600b60248201526a426f74204164647265737360a81b60448201526064016108a5565b60115460ff1615610fa657610f9f878787611582565b93506113e6565b6008546001600160a01b03878116911614801590610fd257506008546001600160a01b03888116911614155b8015610fec57506002546001600160a01b03878116911614155b8015610fff5750601754610100900460ff165b156110c7576001600160a01b03861660009081526009602052604090205460ff168061104357506001600160a01b03871660009081526009602052604090205460ff165b8061106657506001600160a01b0386166000908152600a602052604090205460ff165b8061108957506001600160a01b0387166000908152600a602052604090205460ff165b6110c75760405162461bcd60e51b815260206004820152600f60248201526e140c94081b9bdd08185b1b1bddd959608a1b60448201526064016108a5565b6008546001600160a01b038781169116148015906110f357506002546001600160a01b03878116911614155b1561119e576001600160a01b0386166000908152600a602052604090205460ff168061114457506012546001600160a01b038716600090815260046020526040902054611141908790611f27565b11155b61119e5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016108a5565b6001600160a01b0386166000908152600a602052604090205460ff161580156111d457506008546001600160a01b038881169116145b156111f5576001600160a01b0386166000908152600c602052604090204290555b6001600160a01b0387166000908152600a602052604090205460ff1615801561122b57506008546001600160a01b038781169116145b156112b8576001600160a01b0387166000908152600c60209081526040808320426001909101556019909152812061128591879190611268610ab9565b81526020019081526020016000205461166890919063ffffffff16565b6001600160a01b0388166000908152601960205260408120906112a6610ab9565b81526020810191909152604001600020555b6112c06116c7565b156112cd576112cd61171b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038a1660009081526004909152919091205461131f918790610e14565b6001600160a01b038816600090815260046020908152604080832093909355600990529081205460ff1615611354578561135e565b61135e8887611acf565b6001600160a01b0388166000908152600460205260409020549091506113849082611668565b6001600160a01b0380891660008181526004602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113d89085815260200190565b60405180910390a360019450505b5050509392505050565b6001600160a01b0381166000908152600c60205260408120600101548190611451576015546001600160a01b0384166000908152600c602052604090205461144a916103e8916114409042611f80565b610a4d9190611f3f565b9050611485565b6015546001600160a01b0384166000908152600c6020526040902060010154611482916103e8916114409042611f80565b90505b6103e881106114945780610ce7565b6103e89392505050565b6000610ce783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b6d565b6000826114ef57506000610875565b60006114fb8385611f61565b9050826115088583611f3f565b14610ce75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a5565b60008183111561157a576115738284611f80565b9050610875565b506000610875565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526004909152918220546115d3918490610e14565b6001600160a01b0380861660009081526004602052604080822093909355908516815220546116029083611668565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116569086815260200190565b60405180910390a35060019392505050565b6000806116758385611f27565b905083811015610ce75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a5565b6008546000906001600160a01b031633148015906116e8575060115460ff16155b80156116fb5750601154610100900460ff165b8015610a0357505060145430600090815260046020526040902054101590565b6011805460ff19166001179055601454600f54600d5460009161174891600291610a1a91829087906114e0565b905060006117568383611b9b565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061179057611790611fc8565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190611bfa565b8160018151811061182f5761182f611fc8565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b81524792919091169063791ac94790611879908690600090879030904290600401611eb6565b600060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b5050505060006118c08247611b9b90919063ffffffff16565b905060006118e66118dd6002600d5461149e90919063ffffffff16565b600f5490611b9b565b905060006119086002610a1a84610a1a600d54886114e090919063ffffffff16565b9050600061192583610a1a600e54876114e090919063ffffffff16565b6006546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d806000811461197c576040519150601f19603f3d011682016040523d82523d6000602084013e611981565b606091505b50509050806119d25760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e73666572000060448201526064016108a5565b8815611ab95760075460065460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b158015611a4357600080fd5b505af1158015611a57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a7c9190611e13565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506011805460ff191690555050505050505050565b600080611aed601054610a1a600f54866114e090919063ffffffff16565b30600090815260046020526040902054909150611b0a9082611668565b30600081815260046020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b5b9085815260200190565b60405180910390a36109d38382611b9b565b60008183611b8e5760405162461bcd60e51b81526004016108a59190611e41565b506000610e458486611f3f565b6000610ce783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e14565b600060208284031215611bef57600080fd5b8135610ce781611fde565b600060208284031215611c0c57600080fd5b8151610ce781611fde565b60008060408385031215611c2a57600080fd5b8235611c3581611fde565b91506020830135611c4581611fde565b809150509250929050565b600080600060608486031215611c6557600080fd5b8335611c7081611fde565b92506020840135611c8081611fde565b929592945050506040919091013590565b60008060408385031215611ca457600080fd5b8235611caf81611fde565b91506020830135611c4581611ff3565b60008060408385031215611cd257600080fd5b8235611cdd81611fde565b946020939093013593505050565b600080600060408486031215611d0057600080fd5b833567ffffffffffffffff80821115611d1857600080fd5b818601915086601f830112611d2c57600080fd5b813581811115611d3b57600080fd5b8760208260051b8501011115611d5057600080fd5b60209283019550935050840135611d6681611ff3565b809150509250925092565b600060208284031215611d8357600080fd5b8151610ce781611ff3565b60008060408385031215611da157600080fd5b8235611caf81611ff3565b600060208284031215611dbe57600080fd5b5035919050565b60008060408385031215611dd857600080fd5b50508035926020909101359150565b600080600060608486031215611dfc57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e2857600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015611e6e57858101830151858201604001528201611e52565b81811115611e80576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f065784516001600160a01b031683529383019391830191600101611ee1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611f3a57611f3a611fb2565b500190565b600082611f5c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611f7b57611f7b611fb2565b500290565b600082821015611f9257611f92611fb2565b500390565b6000600019821415611fab57611fab611fb2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610ab657600080fd5b8015158114610ab657600080fdfea264697066735822122097b40b66f500d3868fca6aae3d010d92c3e918ca4c3f407a163328f8ea57c14564736f6c63430008050033