0x6080604052600436106100f75760003560e01c8063a1cc06561161008a578063f2fde38b11610059578063f2fde38b1461029a578063f3a7cb61146102ba578063f95e9272146102da578063fea54d061461030757600080fd5b8063a1cc06561461022e578063cb89964714610244578063e220260814610264578063f1c069061461028457600080fd5b806379ba5097116100c657806379ba50971461019d57806381203d03146101b25780638407d6a4146101d65780638da5cb5b146101f657600080fd5b80630536b7231461010357806315a0104514610148578063256c1ea31461015b57806351295f011461017b57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061013361011e366004610c74565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610133610156366004610c74565b610327565b34801561016757600080fd5b50610133610176366004610c96565b6103c7565b34801561018757600080fd5b5061019b610196366004610cf4565b610528565b005b3480156101a957600080fd5b5061019b610593565b3480156101be57600080fd5b506101c860035481565b60405190815260200161013f565b3480156101e257600080fd5b506101336101f1366004610e63565b61060e565b34801561020257600080fd5b50600054610216906001600160a01b031681565b6040516001600160a01b03909116815260200161013f565b34801561023a57600080fd5b506101c860055481565b34801561025057600080fd5b5061013361025f366004610eeb565b610779565b34801561027057600080fd5b506101c861027f366004610fbd565b610928565b34801561029057600080fd5b506101c860045481565b3480156102a657600080fd5b5061019b6102b5366004610c74565b61098c565b3480156102c657600080fd5b506101336102d5366004610fd6565b6109c5565b3480156102e657600080fd5b506102fa6102f5366004610fbd565b610b4f565b60405161013f919061101c565b34801561031357600080fd5b5061013361032236600461106a565b610ba9565b6003805460009182610338836110b3565b9091555050600080546040516001600160a01b03909116913480156108fc02929091818181858888f19350505050158015610377573d6000803e3d6000fd5b50600354604080513481526001600160a01b03851660208201523392917f50ed54fdff2e8028310feac14aa2e8343c5eb6ab4fb192510bd3358cbe18fb1d910160405180910390a3506001919050565b3360009081526002602052604081205460ff166103ff5760405162461bcd60e51b81526004016103f6906110cc565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0386811660048301526024820186905287169063a9059cbb906044016020604051808303816000875af115801561044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047291906110fb565b50600060045411801561048757506004544710155b156104c5576004546040516001600160a01b0387169180156108fc02916000818181858888f193505050501580156104c3573d6000803e3d6000fd5b505b846001600160a01b0316866001600160a01b0316847f227f62390ff31ea224acc601adb99ca571aafaeef45b6528a1f75af3fdee81b08786604051610514929190918252602082015260400190565b60405180910390a450600195945050505050565b6000546001600160a01b0316331461053f57600080fd5b6001600160a01b038216600081815260026020526040808220805460ff191685151590811790915590519092917ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa91a35050565b6001546001600160a01b031633146105aa57600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526002602052604081205460ff1661063d5760405162461bcd60e51b81526004016103f6906110cc565b8251845114801561064f575081518451145b61069b5760405162461bcd60e51b815260206004820152601860248201527f44617461206c656e6774687320646f6e2774206d61746368000000000000000060448201526064016103f6565b6005548451106106ed5760405162461bcd60e51b815260206004820152601c60248201527f67726561746572207468616e206261746368207468726573686f6c640000000060448201526064016103f6565b60005b84518160ff16101561076e5761075b858260ff168151811061071457610714611118565b6020026020010151858360ff168151811061073157610731611118565b6020026020010151858460ff168151811061074e5761074e611118565b6020026020010151610ba9565b50806107668161112e565b9150506106f0565b506001949350505050565b3360009081526002602052604081205460ff166107a85760405162461bcd60e51b81526004016103f6906110cc565b845186511480156107ba575083518651145b80156107c7575082518651145b80156107d4575081518651145b6108205760405162461bcd60e51b815260206004820152601760248201527f44617461206c656e67746820646f6e2774206d6174636800000000000000000060448201526064016103f6565b6005548651106108725760405162461bcd60e51b815260206004820152601c60248201527f67726561746572207468616e206261746368207468726573686f6c640000000060448201526064016103f6565b60005b865181101561091b5761090887828151811061089357610893611118565b60200260200101518783815181106108ad576108ad611118565b60200260200101518784815181106108c7576108c7611118565b60200260200101518785815181106108e1576108e1611118565b60200260200101518786815181106108fb576108fb611118565b60200260200101516103c7565b5080610913816110b3565b915050610875565b5060019695505050505050565b600080546001600160a01b0316331461094057600080fd5b600082116109835760405162461bcd60e51b815260206004820152601060248201526f3d32b937903b30b63ab29033b4bb32b760811b60448201526064016103f6565b50600581905590565b6000546001600160a01b031633146109a357600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60038054600091826109d6836110b3565b909155505073dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b03861601610a71576000546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908616906323b872dd90606401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050610af0565b6000546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908616906323b872dd906064016020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906110fb565b505b60035460408051868152602081018690526001600160a01b03858116828401529151339392891692917f8a9f5b93a9427ed2074a269336914d74d6b34dfe5679f30c5cf172f5842aa795919081900360600190a4506001949350505050565b6000546060906001600160a01b03163314610b6957600080fd5b50600481905560408051808201909152601b81527f457874726120636f696e7320726577617264732075706461746564000000000060208201525b919050565b3360009081526002602052604081205460ff16610bd85760405162461bcd60e51b81526004016103f6906110cc565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015610c0e573d6000803e3d6000fd5b50836001600160a01b0316827f9651479651fe91907cee7de24a0e47091421878d660c93c6fe0d04c7b7b2404b85604051610c4b91815260200190565b60405180910390a35060019392505050565b80356001600160a01b0381168114610ba457600080fd5b600060208284031215610c8657600080fd5b610c8f82610c5d565b9392505050565b600080600080600060a08688031215610cae57600080fd5b610cb786610c5d565b9450610cc560208701610c5d565b94979496505050506040830135926060810135926080909101359150565b8015158114610cf157600080fd5b50565b60008060408385031215610d0757600080fd5b610d1083610c5d565b91506020830135610d2081610ce3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d6a57610d6a610d2b565b604052919050565b600067ffffffffffffffff821115610d8c57610d8c610d2b565b5060051b60200190565b600082601f830112610da757600080fd5b81356020610dbc610db783610d72565b610d41565b82815260059290921b84018101918181019086841115610ddb57600080fd5b8286015b84811015610dfd57610df081610c5d565b8352918301918301610ddf565b509695505050505050565b600082601f830112610e1957600080fd5b81356020610e29610db783610d72565b82815260059290921b84018101918181019086841115610e4857600080fd5b8286015b84811015610dfd5780358352918301918301610e4c565b600080600060608486031215610e7857600080fd5b833567ffffffffffffffff80821115610e9057600080fd5b610e9c87838801610d96565b94506020860135915080821115610eb257600080fd5b610ebe87838801610e08565b93506040860135915080821115610ed457600080fd5b50610ee186828701610e08565b9150509250925092565b600080600080600060a08688031215610f0357600080fd5b853567ffffffffffffffff80821115610f1b57600080fd5b610f2789838a01610d96565b96506020880135915080821115610f3d57600080fd5b610f4989838a01610d96565b95506040880135915080821115610f5f57600080fd5b610f6b89838a01610e08565b94506060880135915080821115610f8157600080fd5b610f8d89838a01610e08565b93506080880135915080821115610fa357600080fd5b50610fb088828901610e08565b9150509295509295909350565b600060208284031215610fcf57600080fd5b5035919050565b60008060008060808587031215610fec57600080fd5b610ff585610c5d565b9350602085013592506040850135915061101160608601610c5d565b905092959194509250565b600060208083528351808285015260005b818110156110495785810183015185820160400152820161102d565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561107f57600080fd5b61108884610c5d565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016110c5576110c561109d565b5060010190565b60208082526015908201527431b0b63632b91036bab9ba1031329039b4b3b732b960591b604082015260600190565b60006020828403121561110d57600080fd5b8151610c8f81610ce3565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036111445761114461109d565b6001019291505056fea2646970667358221220f5a7ef0d293494935841494f97a73be188463faac08d57e99ced9b3962c9e9b264736f6c63430008110033
0x6080604052603260055534801561001557600080fd5b50600080546001600160a01b03191633179055611183806100376000396000f3fe6080604052600436106100f75760003560e01c8063a1cc06561161008a578063f2fde38b11610059578063f2fde38b1461029a578063f3a7cb61146102ba578063f95e9272146102da578063fea54d061461030757600080fd5b8063a1cc06561461022e578063cb89964714610244578063e220260814610264578063f1c069061461028457600080fd5b806379ba5097116100c657806379ba50971461019d57806381203d03146101b25780638407d6a4146101d65780638da5cb5b146101f657600080fd5b80630536b7231461010357806315a0104514610148578063256c1ea31461015b57806351295f011461017b57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061013361011e366004610c74565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610133610156366004610c74565b610327565b34801561016757600080fd5b50610133610176366004610c96565b6103c7565b34801561018757600080fd5b5061019b610196366004610cf4565b610528565b005b3480156101a957600080fd5b5061019b610593565b3480156101be57600080fd5b506101c860035481565b60405190815260200161013f565b3480156101e257600080fd5b506101336101f1366004610e63565b61060e565b34801561020257600080fd5b50600054610216906001600160a01b031681565b6040516001600160a01b03909116815260200161013f565b34801561023a57600080fd5b506101c860055481565b34801561025057600080fd5b5061013361025f366004610eeb565b610779565b34801561027057600080fd5b506101c861027f366004610fbd565b610928565b34801561029057600080fd5b506101c860045481565b3480156102a657600080fd5b5061019b6102b5366004610c74565b61098c565b3480156102c657600080fd5b506101336102d5366004610fd6565b6109c5565b3480156102e657600080fd5b506102fa6102f5366004610fbd565b610b4f565b60405161013f919061101c565b34801561031357600080fd5b5061013361032236600461106a565b610ba9565b6003805460009182610338836110b3565b9091555050600080546040516001600160a01b03909116913480156108fc02929091818181858888f19350505050158015610377573d6000803e3d6000fd5b50600354604080513481526001600160a01b03851660208201523392917f50ed54fdff2e8028310feac14aa2e8343c5eb6ab4fb192510bd3358cbe18fb1d910160405180910390a3506001919050565b3360009081526002602052604081205460ff166103ff5760405162461bcd60e51b81526004016103f6906110cc565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0386811660048301526024820186905287169063a9059cbb906044016020604051808303816000875af115801561044e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047291906110fb565b50600060045411801561048757506004544710155b156104c5576004546040516001600160a01b0387169180156108fc02916000818181858888f193505050501580156104c3573d6000803e3d6000fd5b505b846001600160a01b0316866001600160a01b0316847f227f62390ff31ea224acc601adb99ca571aafaeef45b6528a1f75af3fdee81b08786604051610514929190918252602082015260400190565b60405180910390a450600195945050505050565b6000546001600160a01b0316331461053f57600080fd5b6001600160a01b038216600081815260026020526040808220805460ff191685151590811790915590519092917ffcaa24b1276bfa7dbf77797c0a984b9df924acbeaabd48cd2f1b0eca379b78fa91a35050565b6001546001600160a01b031633146105aa57600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526002602052604081205460ff1661063d5760405162461bcd60e51b81526004016103f6906110cc565b8251845114801561064f575081518451145b61069b5760405162461bcd60e51b815260206004820152601860248201527f44617461206c656e6774687320646f6e2774206d61746368000000000000000060448201526064016103f6565b6005548451106106ed5760405162461bcd60e51b815260206004820152601c60248201527f67726561746572207468616e206261746368207468726573686f6c640000000060448201526064016103f6565b60005b84518160ff16101561076e5761075b858260ff168151811061071457610714611118565b6020026020010151858360ff168151811061073157610731611118565b6020026020010151858460ff168151811061074e5761074e611118565b6020026020010151610ba9565b50806107668161112e565b9150506106f0565b506001949350505050565b3360009081526002602052604081205460ff166107a85760405162461bcd60e51b81526004016103f6906110cc565b845186511480156107ba575083518651145b80156107c7575082518651145b80156107d4575081518651145b6108205760405162461bcd60e51b815260206004820152601760248201527f44617461206c656e67746820646f6e2774206d6174636800000000000000000060448201526064016103f6565b6005548651106108725760405162461bcd60e51b815260206004820152601c60248201527f67726561746572207468616e206261746368207468726573686f6c640000000060448201526064016103f6565b60005b865181101561091b5761090887828151811061089357610893611118565b60200260200101518783815181106108ad576108ad611118565b60200260200101518784815181106108c7576108c7611118565b60200260200101518785815181106108e1576108e1611118565b60200260200101518786815181106108fb576108fb611118565b60200260200101516103c7565b5080610913816110b3565b915050610875565b5060019695505050505050565b600080546001600160a01b0316331461094057600080fd5b600082116109835760405162461bcd60e51b815260206004820152601060248201526f3d32b937903b30b63ab29033b4bb32b760811b60448201526064016103f6565b50600581905590565b6000546001600160a01b031633146109a357600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60038054600091826109d6836110b3565b909155505073dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b03861601610a71576000546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908616906323b872dd90606401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b50505050610af0565b6000546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101869052908616906323b872dd906064016020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906110fb565b505b60035460408051868152602081018690526001600160a01b03858116828401529151339392891692917f8a9f5b93a9427ed2074a269336914d74d6b34dfe5679f30c5cf172f5842aa795919081900360600190a4506001949350505050565b6000546060906001600160a01b03163314610b6957600080fd5b50600481905560408051808201909152601b81527f457874726120636f696e7320726577617264732075706461746564000000000060208201525b919050565b3360009081526002602052604081205460ff16610bd85760405162461bcd60e51b81526004016103f6906110cc565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015610c0e573d6000803e3d6000fd5b50836001600160a01b0316827f9651479651fe91907cee7de24a0e47091421878d660c93c6fe0d04c7b7b2404b85604051610c4b91815260200190565b60405180910390a35060019392505050565b80356001600160a01b0381168114610ba457600080fd5b600060208284031215610c8657600080fd5b610c8f82610c5d565b9392505050565b600080600080600060a08688031215610cae57600080fd5b610cb786610c5d565b9450610cc560208701610c5d565b94979496505050506040830135926060810135926080909101359150565b8015158114610cf157600080fd5b50565b60008060408385031215610d0757600080fd5b610d1083610c5d565b91506020830135610d2081610ce3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d6a57610d6a610d2b565b604052919050565b600067ffffffffffffffff821115610d8c57610d8c610d2b565b5060051b60200190565b600082601f830112610da757600080fd5b81356020610dbc610db783610d72565b610d41565b82815260059290921b84018101918181019086841115610ddb57600080fd5b8286015b84811015610dfd57610df081610c5d565b8352918301918301610ddf565b509695505050505050565b600082601f830112610e1957600080fd5b81356020610e29610db783610d72565b82815260059290921b84018101918181019086841115610e4857600080fd5b8286015b84811015610dfd5780358352918301918301610e4c565b600080600060608486031215610e7857600080fd5b833567ffffffffffffffff80821115610e9057600080fd5b610e9c87838801610d96565b94506020860135915080821115610eb257600080fd5b610ebe87838801610e08565b93506040860135915080821115610ed457600080fd5b50610ee186828701610e08565b9150509250925092565b600080600080600060a08688031215610f0357600080fd5b853567ffffffffffffffff80821115610f1b57600080fd5b610f2789838a01610d96565b96506020880135915080821115610f3d57600080fd5b610f4989838a01610d96565b95506040880135915080821115610f5f57600080fd5b610f6b89838a01610e08565b94506060880135915080821115610f8157600080fd5b610f8d89838a01610e08565b93506080880135915080821115610fa357600080fd5b50610fb088828901610e08565b9150509295509295909350565b600060208284031215610fcf57600080fd5b5035919050565b60008060008060808587031215610fec57600080fd5b610ff585610c5d565b9350602085013592506040850135915061101160608601610c5d565b905092959194509250565b600060208083528351808285015260005b818110156110495785810183015185820160400152820161102d565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561107f57600080fd5b61108884610c5d565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016110c5576110c561109d565b5060010190565b60208082526015908201527431b0b63632b91036bab9ba1031329039b4b3b732b960591b604082015260600190565b60006020828403121561110d57600080fd5b8151610c8f81610ce3565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036111445761114461109d565b6001019291505056fea2646970667358221220f5a7ef0d293494935841494f97a73be188463faac08d57e99ced9b3962c9e9b264736f6c63430008110033