0x6080604052600180546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790915560028054821673c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac1790556003805490911673a39628ee6ca80eb2d93f21def75a7b4d03b82e1e1790556301c9c3806005553480156200007f57600080fd5b506040516200276838038062002768833981016040819052620000a2916200018a565b620000ad336200013a565b6001600160a01b038116620001145760405162461bcd60e51b815260206004820152602360248201527f666565436f6c6c6563746f7220616464726573732063616e6e6f74206265207a60448201526265726f60e81b606482015260840160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055620001bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200019d57600080fd5b81516001600160a01b0381168114620001b557600080fd5b9392505050565b61259c80620001cc6000396000f3fe60806040526004361061010d5760003560e01c8063a42dce8011610095578063c415b95c11610064578063c415b95c146102af578063c45a0155146102cf578063d73792a9146102ef578063e78cea9214610308578063f2fde38b1461032857600080fd5b8063a42dce801461022f578063ad5c46481461024f578063b10dd68f1461026f578063b8c6fd841461028f57600080fd5b80638da5cb5b116100dc5780638da5cb5b1461018e5780638dd14802146101c55780639472c171146101e55780639ed5b4dd146101f85780639fdf5aa41461021c57600080fd5b806314c8912a14610119578063355466c81461012e5780635b769f3c1461014e5780635bb478081461016e57600080fd5b3661011457005b600080fd5b61012c610127366004611fcc565b610348565b005b34801561013a57600080fd5b5061012c61014936600461206d565b6104aa565b34801561015a57600080fd5b5061012c61016936600461209b565b610535565b34801561017a57600080fd5b5061012c61018936600461209b565b610581565b34801561019a57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d157600080fd5b5061012c6101e036600461209b565b610623565b61012c6101f33660046120bf565b6106c5565b34801561020457600080fd5b5061020e60055481565b6040519081526020016101bc565b61012c61022a36600461211e565b6107cf565b34801561023b57600080fd5b5061012c61024a36600461209b565b61090e565b34801561025b57600080fd5b506001546101a8906001600160a01b031681565b34801561027b57600080fd5b5061012c61028a36600461218f565b61095a565b34801561029b57600080fd5b5061012c6102aa36600461209b565b610d0d565b3480156102bb57600080fd5b506004546101a8906001600160a01b031681565b3480156102db57600080fd5b506002546101a8906001600160a01b031681565b3480156102fb57600080fd5b5061020e6402540be40081565b34801561031457600080fd5b506003546101a8906001600160a01b031681565b34801561033457600080fd5b5061012c61034336600461209b565b610dd7565b600061035689898989610e72565b905060006402540be4006005548361036e9190612221565b610378919061223e565b905060008989610389600182612260565b81811061039857610398612273565b90506020020160208101906103ad919061209b565b6004549091506103ca906001600160a01b03808416911684611275565b600080516020612547833981519152336103e48a34612260565b6000868533886040516103fd9796959493929190612289565b60405180910390a160006104118385612260565b60035490915061042e906001600160a01b038481169116836112dd565b6003546040516335b53a3760e01b81526001600160a01b03909116906335b53a37908b9061046a90869086908e908e908e908e906004016122cb565b6000604051808303818588803b15801561048357600080fd5b505af1158015610497573d6000803e3d6000fd5b5050505050505050505050505050505050565b6000546001600160a01b031633146104dd5760405162461bcd60e51b81526004016104d490612324565b60405180910390fd5b631dcd650081106105305760405162461bcd60e51b815260206004820152601e60248201527f61676772656761746f72206665652065786365656473206d6178696d756d000060448201526064016104d4565b600555565b6000546001600160a01b0316331461055f5760405162461bcd60e51b81526004016104d490612324565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105ab5760405162461bcd60e51b81526004016104d490612324565b6001600160a01b0381166106015760405162461bcd60e51b815260206004820152601e60248201527f666163746f727920616464726573732063616e6e6f74206265207a65726f000060448201526064016104d4565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461064d5760405162461bcd60e51b81526004016104d490612324565b6001600160a01b0381166106a35760405162461bcd60e51b815260206004820152601d60248201527f62726964676520616464726573732063616e6e6f74206265207a65726f00000060448201526064016104d4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106d48585856000610e72565b905060006402540be400600554836106ec9190612221565b6106f6919061223e565b905060008051602061254783398151915233346000858989610719600182612260565b81811061072857610728612273565b905060200201602081019061073d919061209b565b88876040516107529796959493929190612289565b60405180910390a16004546107ac906001600160a01b0316828787610778600182612260565b81811061078757610787612273565b905060200201602081019061079c919061209b565b6001600160a01b03169190611275565b6107c7836107ba8385612260565b8787610778600182612260565b505050505050565b60006107dd898989896113f2565b905060006402540be400600554836107f59190612221565b6107ff919061223e565b905060008888610810600182612260565b81811061081f5761081f612273565b9050602002016020810190610834919061209b565b600454909150610851906001600160a01b03808416911684611275565b600080516020612547833981519152338c8b8b600081811061087557610875612273565b905060200201602081019061088a919061209b565b868533886040516108a19796959493929190612289565b60405180910390a160006108b58385612260565b6003549091506108d2906001600160a01b038481169116836112dd565b6003546040516335b53a3760e01b81526001600160a01b03909116906335b53a3790349061046a90869086908e908e908e908e906004016122cb565b6000546001600160a01b031633146109385760405162461bcd60e51b81526004016104d490612324565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b85600003610ac757600360009054906101000a90046001600160a01b03166001600160a01b0316632da688ac6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190612359565b6001600160a01b0316336001600160a01b031614610a2c5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b60448201526064016104d4565b84846000818110610a3f57610a3f612273565b9050602002016020810190610a54919061209b565b604051636eb1769f60e11b81523360048201523060248201526001600160a01b03919091169063dd62ed3e90604401602060405180830381865afa158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190612376565b95505b85600003610b175760405162461bcd60e51b815260206004820152601d60248201527f4f4d4f41676772656761746f723a205a45524f5f414d4f554e545f494e00000060448201526064016104d4565b6000610b25878488886113f2565b905060006402540be40060055483610b3d9190612221565b610b47919061223e565b905060008787610b58600182612260565b818110610b6757610b67612273565b9050602002016020810190610b7c919061209b565b90508315610c71576001546001600160a01b03828116911614610be15760405162461bcd60e51b815260206004820152601b60248201527f4f4d4f41676772656761746f723a20494e56414c49445f50415448000000000060448201526064016104d4565b600154604051632e1a7d4d60e01b8152600481018590526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b5050600454610c5692506001600160a01b031690508361162e565b610c6986610c648486612260565b61162e565b506000610caa565b600454610c8b906001600160a01b03838116911684611275565b610caa86610c998486612260565b6001600160a01b0384169190611275565b600080516020612547833981519152338a8a8a6000818110610cce57610cce612273565b9050602002016020810190610ce3919061209b565b86858b88604051610cfa9796959493929190612289565b60405180910390a1505050505050505050565b6000546001600160a01b03163314610d375760405162461bcd60e51b81526004016104d490612324565b60015481906001600160a01b038083169116148015610d565750600047115b15610d6557610d65334761162e565b6040516370a0823160e01b8152306004820152610dd39033906001600160a01b038416906370a0823190602401602060405180830381865afa158015610daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c999190612376565b5050565b6000546001600160a01b03163314610e015760405162461bcd60e51b81526004016104d490612324565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d4565b610e6f816116f6565b50565b6001546000906001600160a01b031684848381610e9157610e91612273565b9050602002016020810190610ea6919061209b565b6001600160a01b031614610efc5760405162461bcd60e51b815260206004820152601b60248201527f4f4d4f41676772656761746f723a20494e56414c49445f50415448000000000060448201526064016104d4565b6000610f088334612260565b905060008111610f6b5760405162461bcd60e51b815260206004820152602860248201527f4f4d4f41676772656761746f723a20494e53554646494349454e545f494e50556044820152671517d05353d5539560c21b60648201526084016104d4565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b50506001546002546001600160a01b03918216945063a9059cbb9350611044925016888860008161100257611002612273565b9050602002016020810190611017919061209b565b8989600181811061102a5761102a612273565b905060200201602081019061103f919061209b565b611746565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b5919061238f565b6110c1576110c16123ac565b600085856110d0600182612260565b8181106110df576110df612273565b90506020020160208101906110f4919061209b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e9190612376565b905061119e86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061181f915050565b60008187876111ae600182612260565b8181106111bd576111bd612273565b90506020020160208101906111d2919061209b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612376565b6112469190612260565b9050878110156112685760405162461bcd60e51b81526004016104d4906123c2565b925050505b949350505050565b6040516001600160a01b0383166024820152604481018290526112d890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611af6565b505050565b8015806113575750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612376565b155b6113c25760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104d4565b6040516001600160a01b0383166024820152604481018290526112d890849063095ea7b360e01b906064016112a1565b60025460009061147d903390611443906001600160a01b03168686868161141b5761141b612273565b9050602002016020810190611430919061209b565b8787600181811061102a5761102a612273565b878686600081811061145757611457612273565b905060200201602081019061146c919061209b565b6001600160a01b0316929190611bcb565b6000838361148c600182612260565b81811061149b5761149b612273565b90506020020160208101906114b0919061209b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156114f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151a9190612376565b905061155a84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061181f915050565b600081858561156a600182612260565b81811061157957611579612273565b905060200201602081019061158e919061209b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156115d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f89190612376565b6116029190612260565b9050858110156116245760405162461bcd60e51b81526004016104d4906123c2565b9695505050505050565b604080516000808252602082019092526001600160a01b038416908390604051611658919061242f565b60006040518083038185875af1925050503d8060008114611695576040519150601f19603f3d011682016040523d82523d6000602084013e61169a565b606091505b50509050806112d85760405162461bcd60e51b815260206004820152602260248201527f4f4d4f41676772656761746f723a204554485f5452414e534645525f4641494c604482015261115160f21b60648201526084016104d4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060006117558585611c09565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016117fd9291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b600183516118309190612260565b8110156112d85760008084838151811061184c5761184c612273565b602002602001015185846001611862919061244b565b8151811061187257611872612273565b602002602001015191509150600061188a8383611c09565b506002549091506000906118a8906001600160a01b03168585611746565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156118ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611912919061247a565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b03161461194c57828461194f565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925083918c16906370a0823190602401602060405180830381865afa15801561199d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c19190612376565b6119cb9190612260565b95506119d8868383611d00565b945050505050600080856001600160a01b0316886001600160a01b031614611a0257826000611a06565b6000835b91509150600060028c51611a1a9190612260565b8a10611a26578a611a66565b60028054611a66916001600160a01b03909116908a908f90611a49908f9061244b565b81518110611a5957611a59612273565b6020026020010151611746565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90611aa890869086908690602481016124ed565b600060405180830381600087803b158015611ac257600080fd5b505af1158015611ad6573d6000803e3d6000fd5b505050505050505050505050508080611aee9061251a565b915050611822565b6000611b4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e209092919063ffffffff16565b9050805160001480611b6c575080806020019051810190611b6c919061238f565b6112d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104d4565b6040516001600160a01b0380851660248301528316604482015260648101829052611c039085906323b872dd60e01b906084016112a1565b50505050565b600080826001600160a01b0316846001600160a01b031603611c7b5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b60648201526084016104d4565b826001600160a01b0316846001600160a01b031610611c9b578284611c9e565b83835b90925090506001600160a01b038216611cf95760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f41444452455353000060448201526064016104d4565b9250929050565b6000808411611d655760405162461bcd60e51b815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b60648201526084016104d4565b600083118015611d755750600082115b611dd25760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b60648201526084016104d4565b6000611de0856103e5612221565b90506000611dee8483612221565b9050600082611dff876103e8612221565b611e09919061244b565b9050611e15818361223e565b979650505050505050565b606061126d848460008585600080866001600160a01b03168587604051611e47919061242f565b60006040518083038185875af1925050503d8060008114611e84576040519150601f19603f3d011682016040523d82523d6000602084013e611e89565b606091505b50915091506112688783838760608315611f04578251600003611efd576001600160a01b0385163b611efd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104d4565b508161126d565b61126d8383815115611f195781518083602001fd5b8060405162461bcd60e51b81526004016104d49190612533565b60008083601f840112611f4557600080fd5b50813567ffffffffffffffff811115611f5d57600080fd5b6020830191508360208260051b8501011115611cf957600080fd5b63ffffffff81168114610e6f57600080fd5b60008083601f840112611f9c57600080fd5b50813567ffffffffffffffff811115611fb457600080fd5b602083019150836020828501011115611cf957600080fd5b60008060008060008060008060c0898b031215611fe857600080fd5b88359750602089013567ffffffffffffffff8082111561200757600080fd5b6120138c838d01611f33565b909950975060408b0135965060608b0135915061202f82611f78565b90945060808a0135935060a08a0135908082111561204c57600080fd5b506120598b828c01611f8a565b999c989b5096995094979396929594505050565b60006020828403121561207f57600080fd5b5035919050565b6001600160a01b0381168114610e6f57600080fd5b6000602082840312156120ad57600080fd5b81356120b881612086565b9392505050565b600080600080606085870312156120d557600080fd5b84359350602085013567ffffffffffffffff8111156120f357600080fd5b6120ff87828801611f33565b909450925050604085013561211381612086565b939692955090935050565b60008060008060008060008060c0898b03121561213a57600080fd5b8835975060208901359650604089013567ffffffffffffffff8082111561216057600080fd5b61216c8c838d01611f33565b909850965060608b0135915061202f82611f78565b8015158114610e6f57600080fd5b60008060008060008060a087890312156121a857600080fd5b86359550602087013567ffffffffffffffff8111156121c657600080fd5b6121d289828a01611f33565b90965094505060408701356121e681612086565b92506060870135915060808701356121fd81612181565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176122385761223861220b565b92915050565b60008261225b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156122385761223861220b565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0397881681526020810196909652938616604086015260608501929092528416608084015290921660a082015260c081019190915260e00190565b60018060a01b038716815285602082015263ffffffff8516604082015283606082015260a060808201528160a0820152818360c0830137600081830160c090810191909152601f909201601f1916010195945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561236b57600080fd5b81516120b881612086565b60006020828403121561238857600080fd5b5051919050565b6000602082840312156123a157600080fd5b81516120b881612181565b634e487b7160e01b600052600160045260246000fd5b60208082526029908201527f4f4d4f41676772656761746f723a20494e53554646494349454e545f4f555450604082015268155517d05353d5539560ba1b606082015260800190565b60005b8381101561242657818101518382015260200161240e565b50506000910152565b6000825161244181846020870161240b565b9190910192915050565b808201808211156122385761223861220b565b80516001600160701b038116811461247557600080fd5b919050565b60008060006060848603121561248f57600080fd5b6124988461245e565b92506124a66020850161245e565b915060408401516124b681611f78565b809150509250925092565b600081518084526124d981602086016020860161240b565b601f01601f19169290920160200192915050565b84815283602082015260018060a01b038316604082015260806060820152600061162460808301846124c1565b60006001820161252c5761252c61220b565b5060010190565b6020815260006120b860208301846124c156feb12e9d11a497e0551b14e8ebbe378a5639cdf291d17bfa65c8083f8747682fc1a26469706673582212206cc932695044ca13ed0420a6f03bda796442d098bda266d9152b45daf236d32264736f6c63430008110033000000000000000000000000a81dc97fc2f5df4c1dc39cd9dc20ec778ee31700