0x6080604052600436106100ec5760003560e01c80636c19e7831161008a578063996cba6811610059578063996cba6814610288578063ae57de0c146102a8578063db6b5246146102c8578063f2fde38b146102d057600080fd5b80636c19e78314610220578063715018a6146102405780638456cb59146102555780638da5cb5b1461026a57600080fd5b80633f4ba83a116100c65780633f4ba83a146101ac57806347e7ef24146101c15780635c975abb146101e157806366d003ac1461020057600080fd5b8063020fe6e51461010f578063238ac933146101545780633bbed4a01461018c57600080fd5b3661010a576003546001600160a01b0316331461010857600080fd5b005b600080fd5b34801561011b57600080fd5b5061013f61012a366004610d59565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561016057600080fd5b50600254610174906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b34801561019857600080fd5b506101086101a7366004610d8e565b6102f0565b3480156101b857600080fd5b5061010861031a565b3480156101cd57600080fd5b506101086101dc366004610da9565b610334565b3480156101ed57600080fd5b50600054600160a01b900460ff1661013f565b34801561020c57600080fd5b50600354610174906001600160a01b031681565b34801561022c57600080fd5b5061010861023b366004610d8e565b6103b0565b34801561024c57600080fd5b506101086103da565b34801561026157600080fd5b506101086103ec565b34801561027657600080fd5b506000546001600160a01b0316610174565b34801561029457600080fd5b506101086102a3366004610dd3565b610404565b3480156102b457600080fd5b506101086102c3366004610e26565b61041c565b6101086105a6565b3480156102dc57600080fd5b506101086102eb366004610d8e565b610640565b6102f8610683565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610322610683565b61032a6106b0565b6103326106da565b565b61033c61072f565b600354610358906001600160a01b038481169133911684610759565b604080516001600160a01b0384168152602081018390524281830152905133917ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5919081900360600190a26103ac60018055565b5050565b6103b8610683565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6103e2610683565b61033260006107c6565b6103f4610683565b6103fc610816565b610332610841565b61040c610683565b610417838383610884565b505050565b61042461072f565b61042c610816565b60008581526004602052604090205460ff16151560010361046057604051633ab3447f60e11b815260040160405180910390fd5b604080514660208201529081018690526001600160a01b0380861660608301528416608082015260a081018390523060c082015260009060e001604051602081830303815290604052905060006104b782516108dc565b826040516020016104c9929190610f38565b60408051601f1981840301815291905280516020909101206002549091506104fb906001600160a01b0316828561096f565b151560000361051d57604051638baa579f60e01b815260040160405180910390fd5b6000878152600460205260409020805460ff19166001179055610541868686610884565b604080516001600160a01b0380881682528816602082015290810185905242606082015287907f797e31b6b51d19b40bab085870e4169de8da20093887992214e3ca57288fc2099060800160405180910390a2505061059f60018055565b5050505050565b6105ae61072f565b346000036105bb57600080fd5b6003546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156105f4573d6000803e3d6000fd5b5060408051600081523460208201524281830152905133917ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5919081900360600190a261033260018055565b610648610683565b6001600160a01b03811661067757604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610680816107c6565b50565b6000546001600160a01b031633146103325760405163118cdaa760e01b815233600482015260240161066e565b600054600160a01b900460ff1661033257604051638dfc202b60e01b815260040160405180910390fd5b6106e26106b0565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60026001540361075257604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526107c09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506109e6565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156103325760405163d93c066560e01b815260040160405180910390fd5b610849610816565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107123390565b6001600160a01b0383166108c8576040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156107c0573d6000803e3d6000fd5b6104176001600160a01b0384168383610a57565b606060006108e983610a88565b600101905060008167ffffffffffffffff81111561090957610909610e10565b6040519080825280601f01601f191660200182016040528015610933576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461093d57509392505050565b6000836001600160a01b03163b6000036109d1576000806109908585610b61565b50909250905060008160038111156109aa576109aa610f93565b1480156109c85750856001600160a01b0316826001600160a01b0316145b925050506109df565b6109dc848484610bae565b90505b9392505050565b600080602060008451602086016000885af180610a09576040513d6000823e3d81fd5b50506000513d91508115610a21578060011415610a2e565b6001600160a01b0384163b155b156107c057604051635274afe760e01b81526001600160a01b038516600482015260240161066e565b6040516001600160a01b0383811660248301526044820183905261041791859182169063a9059cbb9060640161078e565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610ac75772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610af3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610b1157662386f26fc10000830492506010015b6305f5e1008310610b29576305f5e100830492506008015b6127108310610b3d57612710830492506004015b60648310610b4f576064830492506002015b600a8310610b5b576001015b92915050565b60008060008351604103610b9b5760208401516040850151606086015160001a610b8d88828585610c8a565b955095509550505050610ba7565b50508151600091506002905b9250925092565b6000806000856001600160a01b03168585604051602401610bd0929190610fa9565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251610c059190610fe3565b600060405180830381855afa9150503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b5091509150818015610c5957506020815110155b8015610c8057508051630b135d3f60e11b90610c7e9083016020908101908401610fff565b145b9695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610cc55750600091506003905082610d4f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d4557506000925060019150829050610d4f565b9250600091508190505b9450945094915050565b600060208284031215610d6b57600080fd5b5035919050565b80356001600160a01b0381168114610d8957600080fd5b919050565b600060208284031215610da057600080fd5b6109df82610d72565b60008060408385031215610dbc57600080fd5b610dc583610d72565b946020939093013593505050565b600080600060608486031215610de857600080fd5b610df184610d72565b9250610dff60208501610d72565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610e3e57600080fd5b85359450610e4e60208701610d72565b9350610e5c60408701610d72565b925060608601359150608086013567ffffffffffffffff811115610e7f57600080fd5b8601601f81018813610e9057600080fd5b803567ffffffffffffffff811115610eaa57610eaa610e10565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610ed957610ed9610e10565b6040528181528282016020018a1015610ef157600080fd5b816020840160208301376000602083830101528093505050509295509295909350565b60005b83811015610f2f578181015183820152602001610f17565b50506000910152565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351610f7081601a850160208801610f14565b835190830190610f8781601a840160208801610f14565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260008251806040840152610fce816060850160208701610f14565b601f01601f1916919091016060019392505050565b60008251610ff5818460208701610f14565b9190910192915050565b60006020828403121561101157600080fd5b505191905056fea2646970667358221220f6bc613eb565140a08d4a21a6d4d71d709819a9372cb812e0471f81df4236aef64736f6c634300081c0033
0x608060405234801561001057600080fd5b506040516111aa3803806111aa83398101604081905261002f9161010a565b826001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161009e565b5060018055600280546001600160a01b039384166001600160a01b031991821617909155600380549290931691161790555061014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461010557600080fd5b919050565b60008060006060848603121561011f57600080fd5b610128846100ee565b9250610136602085016100ee565b9150610144604085016100ee565b90509250925092565b61104e8061015c6000396000f3fe6080604052600436106100ec5760003560e01c80636c19e7831161008a578063996cba6811610059578063996cba6814610288578063ae57de0c146102a8578063db6b5246146102c8578063f2fde38b146102d057600080fd5b80636c19e78314610220578063715018a6146102405780638456cb59146102555780638da5cb5b1461026a57600080fd5b80633f4ba83a116100c65780633f4ba83a146101ac57806347e7ef24146101c15780635c975abb146101e157806366d003ac1461020057600080fd5b8063020fe6e51461010f578063238ac933146101545780633bbed4a01461018c57600080fd5b3661010a576003546001600160a01b0316331461010857600080fd5b005b600080fd5b34801561011b57600080fd5b5061013f61012a366004610d59565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561016057600080fd5b50600254610174906001600160a01b031681565b6040516001600160a01b03909116815260200161014b565b34801561019857600080fd5b506101086101a7366004610d8e565b6102f0565b3480156101b857600080fd5b5061010861031a565b3480156101cd57600080fd5b506101086101dc366004610da9565b610334565b3480156101ed57600080fd5b50600054600160a01b900460ff1661013f565b34801561020c57600080fd5b50600354610174906001600160a01b031681565b34801561022c57600080fd5b5061010861023b366004610d8e565b6103b0565b34801561024c57600080fd5b506101086103da565b34801561026157600080fd5b506101086103ec565b34801561027657600080fd5b506000546001600160a01b0316610174565b34801561029457600080fd5b506101086102a3366004610dd3565b610404565b3480156102b457600080fd5b506101086102c3366004610e26565b61041c565b6101086105a6565b3480156102dc57600080fd5b506101086102eb366004610d8e565b610640565b6102f8610683565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610322610683565b61032a6106b0565b6103326106da565b565b61033c61072f565b600354610358906001600160a01b038481169133911684610759565b604080516001600160a01b0384168152602081018390524281830152905133917ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5919081900360600190a26103ac60018055565b5050565b6103b8610683565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6103e2610683565b61033260006107c6565b6103f4610683565b6103fc610816565b610332610841565b61040c610683565b610417838383610884565b505050565b61042461072f565b61042c610816565b60008581526004602052604090205460ff16151560010361046057604051633ab3447f60e11b815260040160405180910390fd5b604080514660208201529081018690526001600160a01b0380861660608301528416608082015260a081018390523060c082015260009060e001604051602081830303815290604052905060006104b782516108dc565b826040516020016104c9929190610f38565b60408051601f1981840301815291905280516020909101206002549091506104fb906001600160a01b0316828561096f565b151560000361051d57604051638baa579f60e01b815260040160405180910390fd5b6000878152600460205260409020805460ff19166001179055610541868686610884565b604080516001600160a01b0380881682528816602082015290810185905242606082015287907f797e31b6b51d19b40bab085870e4169de8da20093887992214e3ca57288fc2099060800160405180910390a2505061059f60018055565b5050505050565b6105ae61072f565b346000036105bb57600080fd5b6003546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156105f4573d6000803e3d6000fd5b5060408051600081523460208201524281830152905133917ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c5919081900360600190a261033260018055565b610648610683565b6001600160a01b03811661067757604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610680816107c6565b50565b6000546001600160a01b031633146103325760405163118cdaa760e01b815233600482015260240161066e565b600054600160a01b900460ff1661033257604051638dfc202b60e01b815260040160405180910390fd5b6106e26106b0565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60026001540361075257604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526107c09186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506109e6565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156103325760405163d93c066560e01b815260040160405180910390fd5b610849610816565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107123390565b6001600160a01b0383166108c8576040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156107c0573d6000803e3d6000fd5b6104176001600160a01b0384168383610a57565b606060006108e983610a88565b600101905060008167ffffffffffffffff81111561090957610909610e10565b6040519080825280601f01601f191660200182016040528015610933576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461093d57509392505050565b6000836001600160a01b03163b6000036109d1576000806109908585610b61565b50909250905060008160038111156109aa576109aa610f93565b1480156109c85750856001600160a01b0316826001600160a01b0316145b925050506109df565b6109dc848484610bae565b90505b9392505050565b600080602060008451602086016000885af180610a09576040513d6000823e3d81fd5b50506000513d91508115610a21578060011415610a2e565b6001600160a01b0384163b155b156107c057604051635274afe760e01b81526001600160a01b038516600482015260240161066e565b6040516001600160a01b0383811660248301526044820183905261041791859182169063a9059cbb9060640161078e565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610ac75772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610af3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610b1157662386f26fc10000830492506010015b6305f5e1008310610b29576305f5e100830492506008015b6127108310610b3d57612710830492506004015b60648310610b4f576064830492506002015b600a8310610b5b576001015b92915050565b60008060008351604103610b9b5760208401516040850151606086015160001a610b8d88828585610c8a565b955095509550505050610ba7565b50508151600091506002905b9250925092565b6000806000856001600160a01b03168585604051602401610bd0929190610fa9565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251610c059190610fe3565b600060405180830381855afa9150503d8060008114610c40576040519150601f19603f3d011682016040523d82523d6000602084013e610c45565b606091505b5091509150818015610c5957506020815110155b8015610c8057508051630b135d3f60e11b90610c7e9083016020908101908401610fff565b145b9695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610cc55750600091506003905082610d4f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d4557506000925060019150829050610d4f565b9250600091508190505b9450945094915050565b600060208284031215610d6b57600080fd5b5035919050565b80356001600160a01b0381168114610d8957600080fd5b919050565b600060208284031215610da057600080fd5b6109df82610d72565b60008060408385031215610dbc57600080fd5b610dc583610d72565b946020939093013593505050565b600080600060608486031215610de857600080fd5b610df184610d72565b9250610dff60208501610d72565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610e3e57600080fd5b85359450610e4e60208701610d72565b9350610e5c60408701610d72565b925060608601359150608086013567ffffffffffffffff811115610e7f57600080fd5b8601601f81018813610e9057600080fd5b803567ffffffffffffffff811115610eaa57610eaa610e10565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610ed957610ed9610e10565b6040528181528282016020018a1015610ef157600080fd5b816020840160208301376000602083830101528093505050509295509295909350565b60005b83811015610f2f578181015183820152602001610f17565b50506000910152565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351610f7081601a850160208801610f14565b835190830190610f8781601a840160208801610f14565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260008251806040840152610fce816060850160208701610f14565b601f01601f1916919091016060019392505050565b60008251610ff5818460208701610f14565b9190910192915050565b60006020828403121561101157600080fd5b505191905056fea2646970667358221220f6bc613eb565140a08d4a21a6d4d71d709819a9372cb812e0471f81df4236aef64736f6c634300081c0033000000000000000000000000aa36dd340286c0dd27b05051820a7ca1500a3112000000000000000000000000aa36dd340286c0dd27b05051820a7ca1500a3112000000000000000000000000aa36dd340286c0dd27b05051820a7ca1500a3112