60806040526064620000146012600a6200055b565b6200002390620f42406200061c565b620000309060016200061c565b6200003c9190620004ef565b60025560646200004f6012600a6200055b565b6200005e90620f42406200061c565b6200006b9060036200061c565b620000779190620004ef565b6003556004600a8181556008600b8190556000600c818155600d829055600e819055600f94909455601091909155601181905560129081556013929092556064601a55601d805476d3d4031f906b30be40c195d299ff2612b51cd1360000006301000000600160b81b0319909116179055601e80546001600160a01b0319908116736beec830f8d42672a522ae6657034d6ee49aade917909155601f805490911673e1b48fc06a29aa106b7ca6bf937788700a146f021790556103e8916200013f916200055b565b6200014e90620f42406200061c565b6200015a9190620004ef565b620001679060016200061c565b6022553480156200017757600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff19169092179091558054737a250d5630b4cf539739df2c5dacb4c659f2488d921682178155825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b158015620001f757600080fd5b505afa1580156200020c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002329190620004bd565b6040516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201526001600160a01b03919091169063c9c6539690604401602060405180830381600087803b1580156200029057600080fd5b505af1158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb9190620004bd565b602180546001600160a01b0319166001600160a01b0392831617905530600090815260056020908152604080832082548516845282528083206000199055825490931680835260068252838320805460ff199081166001908117909255600784528585208054821683179055600890935293909220805490911690921790915561dead60646200035e6012600a6200055b565b6200036d90620f42406200061c565b6200037a9060466200061c565b620003869190620004ef565b6001600160a01b0383166000908152600460205260409020556064620003af6012600a6200055b565b620003be90620f42406200061c565b620003cb90601e6200061c565b620003d79190620004ef565b6001600160a01b0380831660009081526004602052604081209290925583169060008051602062002c038339815191526064620004176012600a6200055b565b6200042690620f42406200061c565b620004339060466200061c565b6200043f9190620004ef565b60405190815260200160405180910390a36001600160a01b038116600060008051602062002c0383398151915260646200047c6012600a6200055b565b6200048b90620f42406200061c565b6200049890601e6200061c565b620004a49190620004ef565b60405190815260200160405180910390a3505062000654565b600060208284031215620004d057600080fd5b81516001600160a01b0381168114620004e857600080fd5b9392505050565b6000826200050d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005535781600019048211156200053757620005376200063e565b808516156200054557918102915b93841c939080029062000517565b509250929050565b6000620004e860ff841683600082620005775750600162000616565b81620005865750600062000616565b81600181146200059f5760028114620005aa57620005ca565b600191505062000616565b60ff841115620005be57620005be6200063e565b50506001821b62000616565b5060208310610133831016604e8410600b8410161715620005ef575081810a62000616565b620005fb838362000512565b80600019048211156200061257620006126200063e565b0290505b92915050565b60008160001904831182151516156200063957620006396200063e565b500290565b634e487b7160e01b600052601160045260246000fd5b61259f80620006646000396000f3fe60806040526004361061026b5760003560e01c80637d1db4a511610144578063dd62ed3e116100b6578063f1f3bca31161007a578063f1f3bca3146107a7578063f2fde38b146107c7578063f4293890146107e7578063f7448a31146107fc578063f887ea401461081c578063fe9fbb801461083c57600080fd5b8063dd62ed3e14610701578063df20fd4914610747578063edafd4ad146106a1578063eeea90a614610767578063f0b37c041461078757600080fd5b8063a8aa1b3111610108578063a8aa1b3114610641578063a9059cbb14610661578063b6a5d7de14610681578063c538c63b146106a1578063d2fcc001146106c1578063d55f146b146106e157600080fd5b80637d1db4a514610584578063893d20e81461059a5780638b42507f146105cc5780638f9a55c0146105fc57806395d89b411461061257600080fd5b8063313ce567116101dd5780635d0044ca116101a15780635d0044ca146104b7578063658d4b7f146104d757806365cf7c9b146104f75780636c5b28551461050d5780636ddd17131461052d57806370a082311461054e57600080fd5b8063313ce5671461040a5780633f4218e0146104265780634ada218b14610456578063571ac8b0146104775780635c85974f1461049757600080fd5b806318160ddd1161022f57806318160ddd1461035c57806323b872dd14610371578063293230b8146103915780632b112e49146103a65780632f54bf6e146103bb57806330534fc2146103ea57600080fd5b80630445b6671461027757806306fdde03146102a0578063095ea7b3146102da5780630bd11f8a1461030a578063178d9b8e1461033a57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028d60225481565b6040519081526020015b60405180910390f35b3480156102ac57600080fd5b50604080518082019091526008815267446f67566572736560c01b60208201525b604051610297919061228e565b3480156102e657600080fd5b506102fa6102f5366004612178565b61085c565b6040519015158152602001610297565b34801561031657600080fd5b506102fa6103253660046120b3565b60086020526000908152604090205460ff1681565b34801561034657600080fd5b5061035a61035536600461225c565b6108c9565b005b34801561036857600080fd5b5061028d61092a565b34801561037d57600080fd5b506102fa61038c366004612109565b61094a565b34801561039d57600080fd5b5061035a610a0c565b3480156103b257600080fd5b5061028d610a86565b3480156103c757600080fd5b506102fa6103d63660046120b3565b6000546001600160a01b0391821691161490565b3480156103f657600080fd5b5061035a61040536600461214a565b610b00565b34801561041657600080fd5b5060405160128152602001610297565b34801561043257600080fd5b506102fa6104413660046120b3565b60066020526000908152604090205460ff1681565b34801561046257600080fd5b506021546102fa90600160a01b900460ff1681565b34801561048357600080fd5b506102fa6104923660046120b3565b610b55565b3480156104a357600080fd5b5061035a6104b23660046121fc565b610b63565b3480156104c357600080fd5b5061035a6104d23660046121fc565b610bbf565b3480156104e357600080fd5b5061035a6104f236600461214a565b610c20565b34801561050357600080fd5b5061028d601b5481565b34801561051957600080fd5b5061035a61052836600461225c565b610c70565b34801561053957600080fd5b506021546102fa90600160a81b900460ff1681565b34801561055a57600080fd5b5061028d6105693660046120b3565b6001600160a01b031660009081526004602052604090205490565b34801561059057600080fd5b5061028d60025481565b3480156105a657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610297565b3480156105d857600080fd5b506102fa6105e73660046120b3565b60076020526000908152604090205460ff1681565b34801561060857600080fd5b5061028d60035481565b34801561061e57600080fd5b5060408051808201909152600681526544564552534560d01b60208201526102cd565b34801561064d57600080fd5b506021546105b4906001600160a01b031681565b34801561066d57600080fd5b506102fa61067c366004612178565b610cc2565b34801561068d57600080fd5b5061035a61069c3660046120b3565b610ccf565b3480156106ad57600080fd5b5061035a6106bc3660046120b3565b610d20565b3480156106cd57600080fd5b5061035a6106dc36600461214a565b610d71565b3480156106ed57600080fd5b5061035a6106fc3660046121fc565b610dc6565b34801561070d57600080fd5b5061028d61071c3660046120d0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561075357600080fd5b5061035a6107623660046121de565b610e36565b34801561077357600080fd5b5061035a61078236600461214a565b610e7d565b34801561079357600080fd5b5061035a6107a23660046120b3565b610ed2565b3480156107b357600080fd5b5061028d6107c23660046121a4565b610f1d565b3480156107d357600080fd5b5061035a6107e23660046120b3565b610f70565b3480156107f357600080fd5b5061035a611006565b34801561080857600080fd5b5061035a610817366004612178565b611070565b34801561082857600080fd5b506020546105b4906001600160a01b031681565b34801561084857600080fd5b506102fa6108573660046120b3565b6111f9565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108b79086815260200190565b60405180910390a35060015b92915050565b6108d2336111f9565b6108f75760405162461bcd60e51b81526004016108ee90612303565b60405180910390fd5b600a849055600b839055600c829055600d5461091f9061091984818888611217565b90611217565b600e55601a55505050565b60006109386012600a612416565b61094590620f42406124c1565b905090565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146109f7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526005825283812033825290915291909120546109d2918490611276565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610a028484846112b0565b90505b9392505050565b6000546001600160a01b03163314610a365760405162461bcd60e51b81526004016108ee906122e3565b6021805461ffff60a01b191661010160a01b17905542601b8190556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54909161094591610afa90610aed6012600a612416565b610afa90620f42406124c1565b9061167f565b6000546001600160a01b03163314610b2a5760405162461bcd60e51b81526004016108ee906122e3565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60006108c38260001961085c565b610b6c336111f9565b610b885760405162461bcd60e51b81526004016108ee90612303565b6103e8610b976012600a612416565b610ba490620f42406124c1565b610bae91906123b1565b811015610bba57600080fd5b600255565b6000546001600160a01b03163314610be95760405162461bcd60e51b81526004016108ee906122e3565b6103e8610bf86012600a612416565b610c0590620f42406124c1565b610c0f91906123b1565b811015610c1b57600080fd5b600355565b610c29336111f9565b610c455760405162461bcd60e51b81526004016108ee90612303565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b610c79336111f9565b610c955760405162461bcd60e51b81526004016108ee90612303565b600f84905560108390556011829055601254610cb79061091984818888611217565b601355601a55505050565b6000610a053384846112b0565b6000546001600160a01b03163314610cf95760405162461bcd60e51b81526004016108ee906122e3565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610d29336111f9565b610d455760405162461bcd60e51b81526004016108ee90612303565b601d80546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6000546001600160a01b03163314610d9b5760405162461bcd60e51b81526004016108ee906122e3565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610df05760405162461bcd60e51b81526004016108ee906122e3565b6106008110610e315760405162461bcd60e51b815260206004820152600d60248201526c54696d6520746f6f206c6f6e6760981b60448201526064016108ee565b601c55565b610e3f336111f9565b610e5b5760405162461bcd60e51b81526004016108ee90612303565b60218054921515600160a81b0260ff60a81b1990931692909217909155602255565b6000546001600160a01b03163314610ea75760405162461bcd60e51b81526004016108ee906122e3565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610efc5760405162461bcd60e51b81526004016108ee906122e3565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600080610f286116c1565b90506000610f346116fb565b90508315610f5157601354610f499083611728565b949350505050565b8015610f6557601a54610f4990600161167f565b5050600e5492915050565b6000546001600160a01b03163314610f9a5760405162461bcd60e51b81526004016108ee906122e3565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61100f336111f9565b61102b5760405162461bcd60e51b81526004016108ee90612303565b601d546040514791630100000090046001600160a01b0316906108fc8315029083906000818181858888f1935050505015801561106c573d6000803e3d6000fd5b5050565b611079336111f9565b6110955760405162461bcd60e51b81526004016108ee90612303565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156110d457600080fd5b505afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612215565b8111156111675760405162461bcd60e51b8152602060048201526024808201527f43616e2774207472616e73666572206d6f7265207468616e207468652062616c604482015263616e636560e01b60648201526084016108ee565b601d5460405163a9059cbb60e01b815263010000009091046001600160a01b0390811660048301526024820183905283169063a9059cbb90604401602060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f491906121c1565b505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806112248385612399565b905083811015610a055760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108ee565b6000818484111561129a5760405162461bcd60e51b81526004016108ee919061228e565b5060006112a784866124e0565b95945050505050565b6001600160a01b03831660009081526009602052604081205460ff161580156112f257506001600160a01b03831660009081526009602052604090205460ff16155b6112fb57600080fd5b6021546001600160a01b0385811691161480159061132757506021546001600160a01b03848116911614155b1561133e576113378484846117a7565b9050610a05565b6001600160a01b03841660009081526006602052604090205460ff166113b757602154600160a01b900460ff166113b75760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016108ee565b6113c2848484611a06565b6021546001600160a01b038481169116148015906113eb57506001600160a01b03831661dead14155b156114bc576001600160a01b03841660009081526008602052604090205460ff168061142f57506001600160a01b03831660009081526008602052604090205460ff165b8061145f57506003546001600160a01b03841660009081526004602052604090205461145c908490612399565b11155b6114bc5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e742065786365656473206d61782077616c6c60448201526732ba1039b4bd329760c11b60648201526084016108ee565b6114c4611a92565b156114d1576114d1611ae8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260049091529190912054611523918490611276565b6001600160a01b03851660009081526004602090815260408083209390935560069052205460ff16151515600114158061157c57506001600160a01b03831660009081526006602052604090205460ff16151515600114155b156115f6576001600160a01b03831660009081526004602052604090205482906115a69082611217565b6001600160a01b03808616600081815260046020526040908190209390935591519087169060008051602061254a833981519152906115e89085815260200190565b60405180910390a350611675565b6000611603858585611ef2565b6001600160a01b0385166000908152600460205260409020549091506116299082611217565b6001600160a01b03808616600081815260046020526040908190209390935591519087169060008051602061254a8339815191529061166b9085815260200190565b60405180910390a3505b5060019392505050565b6000610a0583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611276565b600080601b54426116d291906124e0565b90506107086116e28160016124c1565b8211156116f25760019250505090565b60029250505090565b600080601b544261170c91906124e0565b9050601c5481101561172057600191505090565b600091505090565b600082611737575060006108c3565b600061174383856124c1565b90508261175085836123b1565b14610a055760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108ee565b6001600160a01b03831660009081526009602052604081205460ff161580156117e957506001600160a01b03831660009081526009602052604090205460ff16155b6117f257600080fd5b6001600160a01b03831660009081526008602052604090205460ff168061183e57506003546001600160a01b03841660009081526004602052604090205461183b908490612399565b11155b6118b05760405162461bcd60e51b815260206004820152603760248201527f5472616e7366657220616d6f756e742065786365656473206d61782077616c6c60448201527f65742073697a65206261736963207472616e736665722e00000000000000000060648201526084016108ee565b6001600160a01b03841660009081526006602052604090205460ff16806118e55750602154600160a01b900460ff1615156001145b6119315760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c65642079657400000000000000000060448201526064016108ee565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260049091529190912054611983918490611276565b6001600160a01b0380861660009081526004602052604080822093909355908516815220546119b29083611217565b6001600160a01b03808516600081815260046020526040908190209390935591519086169060008051602061254a833981519152906119f49086815260200190565b60405180910390a35060019392505050565b60025481111580611a2f57506001600160a01b03831660009081526007602052604090205460ff165b80611a5257506001600160a01b03821660009081526007602052604090205460ff165b6111f45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108ee565b6021546000906001600160a01b03163314801590611ab3575060235460ff16155b8015611ac85750602154600160a81b900460ff165b801561094557505060225430600090815260046020526040902054101590565b6023805460ff19166001179055611afd611fc3565b3060009081526004602052604081205490506000611b376002611b31601854611b316014548761172890919063ffffffff16565b90612048565b90506000611b45838361167f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b7f57611b7f61250d565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611bc757611bc761250d565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b815291169063791ac94790611c0f908590600090869030904290600401612328565b600060405180830381600087803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b505060145447925060009150611c6190611c58906002612048565b6018549061167f565b90506000611c8982611b31611c82600260145461204890919063ffffffff16565b8690611728565b90506000611ca683611b316017548761172890919063ffffffff16565b90506000611cc384611b316019548861172890919063ffffffff16565b90506000611ce085611b316015548961172890919063ffffffff16565b601d54604051919250630100000090046001600160a01b0316908290600081818185875af1925050503d8060008114611d35576040519150601f19603f3d011682016040523d82523d6000602084013e611d3a565b606091505b5050601d805460ff1916911515919091179055601e546040516001600160a01b03909116908490600081818185875af1925050503d8060008114611d9a576040519150601f19603f3d011682016040523d82523d6000602084013e611d9f565b606091505b5050601d80549115156101000261ff0019909216919091179055601f546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611e06576040519150601f19603f3d011682016040523d82523d6000602084013e611e0b565b606091505b5050601d8054911515620100000262ff0000199092169190911790558815611edc57602054601d5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b036301000000909204821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b158015611e9f57600080fd5b505af1158015611eb3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ed8919061222e565b5050505b50506023805460ff191690555050505050505050565b601a546021546000918291611f1d9190611b3190611c82906001600160a01b03898116911614610f1d565b6021549091506001600160a01b0385811691161415611fa95730600090815260046020526040902054611f509082611217565b30600081815260046020526040908190209290925590516001600160a01b0387169060008051602061254a83398151915290611f8f9085815260200190565b60405180910390a3611fa1838261167f565b915050610a05565b30600090815260046020526040902054611f509082611217565b611fdf6002611b31600f54600a5461121790919063ffffffff16565b601455601054600b54611ff891600291611b3191611217565b601555601254600d5461201191600291611b3191611217565b601755601154600c5461202a91600291611b3191611217565b601955601354600e5461204391600291611b3191611217565b601855565b6000610a0583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836120a65760405162461bcd60e51b81526004016108ee919061228e565b5060006112a784866123b1565b6000602082840312156120c557600080fd5b8135610a0581612523565b600080604083850312156120e357600080fd5b82356120ee81612523565b915060208301356120fe81612523565b809150509250929050565b60008060006060848603121561211e57600080fd5b833561212981612523565b9250602084013561213981612523565b929592945050506040919091013590565b6000806040838503121561215d57600080fd5b823561216881612523565b915060208301356120fe8161253b565b6000806040838503121561218b57600080fd5b823561219681612523565b946020939093013593505050565b6000602082840312156121b657600080fd5b8135610a058161253b565b6000602082840312156121d357600080fd5b8151610a058161253b565b600080604083850312156121f157600080fd5b82356121968161253b565b60006020828403121561220e57600080fd5b5035919050565b60006020828403121561222757600080fd5b5051919050565b60008060006060848603121561224357600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561227257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156122bb5785810183015185820160400152820161229f565b818111156122cd576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123785784516001600160a01b031683529383019391830191600101612353565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156123ac576123ac6124f7565b500190565b6000826123ce57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561240e5781600019048211156123f4576123f46124f7565b8085161561240157918102915b93841c93908002906123d8565b509250929050565b6000610a0560ff84168360008261242f575060016108c3565b8161243c575060006108c3565b8160018114612452576002811461245c57612478565b60019150506108c3565b60ff84111561246d5761246d6124f7565b50506001821b6108c3565b5060208310610133831016604e8410600b841016171561249b575081810a6108c3565b6124a583836123d3565b80600019048211156124b9576124b96124f7565b029392505050565b60008160001904831182151516156124db576124db6124f7565b500290565b6000828210156124f2576124f26124f7565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461253857600080fd5b50565b801515811461253857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201d22d0ab0f3028a14309879602d987df2e0503163136c693b803a5c237d526e564736f6c63430008050033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef