0x60806040526009805461ffff191690553480156200001c57600080fd5b50604080518082018252600f81526e446561642043617420426f756e636560881b60208083019182528351808501909452600d84526c44656164436174426f756e636560981b908401528151919291620000799160019162000108565b5080516200008f90600290602084019062000108565b505050620000ac620000a6620000b260201b60201c565b620000b6565b620001eb565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011690620001ae565b90600052602060002090601f0160209004810192826200013a576000855562000185565b82601f106200015557805160ff191683800117855562000185565b8280016001018555821562000185579182015b828111156200018557825182559160200191906001019062000168565b506200019392915062000197565b5090565b5b8082111562000193576000815560010162000198565b600181811c90821680620001c357607f821691505b60208210811415620001e557634e487b7160e01b600052602260045260246000fd5b50919050565b611e9880620001fb6000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063b88d4fde11610095578063e834a83411610064578063e834a83414610553578063e985e9c514610572578063f0292a03146105bb578063f2fde38b146105d057600080fd5b8063b88d4fde146104d8578063c68b3305146104f8578063c87b56dd14610518578063d2d8cb671461053857600080fd5b806395d89b41116100d157806395d89b4114610470578063a026da8c14610485578063a0712d68146104a5578063a22cb465146104b857600080fd5b806370a08231146103f0578063715018a614610410578063772dc32f146104255780638da5cb5b1461045257600080fd5b806324600fc31161017a5780634f6ccce7116101495780634f6ccce7146103705780634f7f89761461039057806355f804b3146103b05780636352211e146103d057600080fd5b806324600fc3146103055780632f745c591461031a57806332cb6b0c1461033a57806342842e0e1461035057600080fd5b8063095ea7b3116101b6578063095ea7b31461026c57806318160ddd1461028e5780631f2698ab146102cb57806323b872dd146102e557600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063081812fc14610234575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611af5565b6105f0565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b5061022761065d565b6040516102099190611cca565b34801561024057600080fd5b5061025461024f366004611b73565b6106ef565b6040516001600160a01b039091168152602001610209565b34801561027857600080fd5b5061028c610287366004611ab2565b610733565b005b34801561029a57600080fd5b506102bd6000546001600160801b03600160801b82048116918116919091031690565b604051908152602001610209565b3480156102d757600080fd5b506009546101fd9060ff1681565b3480156102f157600080fd5b5061028c6103003660046119d5565b6107c1565b34801561031157600080fd5b5061028c6107cc565b34801561032657600080fd5b506102bd610335366004611ab2565b61088d565b34801561034657600080fd5b506102bd61271081565b34801561035c57600080fd5b5061028c61036b3660046119d5565b61098a565b34801561037c57600080fd5b506102bd61038b366004611b73565b6109a5565b34801561039c57600080fd5b5061028c6103ab366004611ab2565b610a50565b3480156103bc57600080fd5b5061028c6103cb366004611b2d565b610b10565b3480156103dc57600080fd5b506102546103eb366004611b73565b610b51565b3480156103fc57600080fd5b506102bd61040b366004611982565b610b63565b34801561041c57600080fd5b5061028c610bb2565b34801561043157600080fd5b506102bd610440366004611982565b600a6020526000908152604090205481565b34801561045e57600080fd5b506007546001600160a01b0316610254565b34801561047c57600080fd5b50610227610be8565b34801561049157600080fd5b5061028c6104a0366004611b73565b610bf7565b61028c6104b3366004611b73565b610c2b565b3480156104c457600080fd5b5061028c6104d3366004611a89565b610de7565b3480156104e457600080fd5b5061028c6104f3366004611a10565b610e7d565b34801561050457600080fd5b5061028c610513366004611adb565b610eb7565b34801561052457600080fd5b50610227610533366004611b73565b610ef4565b34801561054457600080fd5b506102bd6611c37937e0800081565b34801561055f57600080fd5b506009546101fd90610100900460ff1681565b34801561057e57600080fd5b506101fd61058d3660046119a3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105c757600080fd5b506102bd600a81565b3480156105dc57600080fd5b5061028c6105eb366004611982565b610fb6565b60006001600160e01b031982166380ac58cd60e01b148061062157506001600160e01b03198216635b5e139f60e01b145b8061063c57506001600160e01b0319821663780e9d6360e01b145b8061065757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461066c90611da0565b80601f016020809104026020016040519081016040528092919081815260200182805461069890611da0565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b60006106fa8261104e565b610717576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061073e82610b51565b9050806001600160a01b0316836001600160a01b031614156107735760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906107935750610791813361058d565b155b156107b1576040516367d9dca160e11b815260040160405180910390fd5b6107bc838383611082565b505050565b6107bc8383836110de565b6007546001600160a01b031633146107ff5760405162461bcd60e51b81526004016107f690611cdd565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610841576040519150601f19603f3d011682016040523d82523d6000602084013e610846565b606091505b505090508061088a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016107f6565b50565b600061089883610b63565b82106108b7576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b8381101561098457600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161580159282019290925290610930575061097c565b80516001600160a01b03161561094557805192505b876001600160a01b0316836001600160a01b0316141561097a57868414156109735750935061065792505050565b6001909301925b505b6001016108c8565b50600080fd5b6107bc83838360405180602001604052806000815250610e7d565b600080546001600160801b031681805b82811015610a3657600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610a2d5785831415610a265750949350505050565b6001909201915b506001016109b5565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b03163314610a7a5760405162461bcd60e51b81526004016107f690611cdd565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ac7576040519150601f19603f3d011682016040523d82523d6000602084013e610acc565b606091505b50509050806107bc5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016107f6565b6007546001600160a01b03163314610b3a5760405162461bcd60e51b81526004016107f690611cdd565b8051610b4d906008906020840190611847565b5050565b6000610b5c826112fd565b5192915050565b60006001600160a01b038216610b8c576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6007546001600160a01b03163314610bdc5760405162461bcd60e51b81526004016107f690611cdd565b610be66000611421565b565b60606002805461066c90611da0565b6007546001600160a01b03163314610c215760405162461bcd60e51b81526004016107f690611cdd565b61088a3382611473565b60095460ff16610c745760405162461bcd60e51b815260206004820152601460248201527314d85b19481b9bdd081e595d081cdd185c9d195960621b60448201526064016107f6565b336000908152600a6020819052604090912054610c92908390611d12565b1115610ce05760405162461bcd60e51b815260206004820152601860248201527f596f75206861766520616c726561647920636c61696d6564000000000000000060448201526064016107f6565b61271081610d066000546001600160801b03600160801b82048116918116919091031690565b610d109190611d12565b1115610d5e5760405162461bcd60e51b815260206004820152601a60248201527f416c6c20636174732068617665206265656e20636c61696d656400000000000060448201526064016107f6565b610d6f816611c37937e08000611d3e565b341015610db75760405162461bcd60e51b81526020600482015260166024820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b60448201526064016107f6565b336000908152600a602052604081208054839290610dd6908490611d12565b9091555061088a9050336001611473565b6001600160a01b038216331415610e115760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610e888484846110de565b610e948484848461148d565b610eb1576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b03163314610ee15760405162461bcd60e51b81526004016107f690611cdd565b6009805460ff1916911515919091179055565b6060610eff8261104e565b610f5b5760405162461bcd60e51b815260206004820152602760248201527f4552433732313a2055524920717565727920666f72206e6f6e6578697374656e6044820152663a103a37b5b2b760c91b60648201526084016107f6565b60088054610f6890611da0565b15159050610f855760405180602001604052806000815250610657565b6008610f908361159c565b604051602001610fa1929190611bd3565b60405160208183030381529060405292915050565b6007546001600160a01b03163314610fe05760405162461bcd60e51b81526004016107f690611cdd565b6001600160a01b0381166110455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f6565b61088a81611421565b600080546001600160801b031682108015610657575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006110e9826112fd565b80519091506000906001600160a01b0316336001600160a01b0316148061111757508151611117903361058d565b80611132575033611127846106ef565b6001600160a01b0316145b90508061115257604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146111875760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166111ae57604051633a954ecd60e21b815260040160405180910390fd5b6111be6000848460000151611082565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166112b3576000546001600160801b03168110156112b3578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561140857600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906114065780516001600160a01b03161561139c579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611401579392505050565b61139c565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b4d8282604051806020016040528060008152506116b6565b60006001600160a01b0384163b1561159057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114d1903390899088908890600401611c8d565b602060405180830381600087803b1580156114eb57600080fd5b505af192505050801561151b575060408051601f3d908101601f1916820190925261151891810190611b11565b60015b611576573d808015611549576040519150601f19603f3d011682016040523d82523d6000602084013e61154e565b606091505b50805161156e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611594565b5060015b949350505050565b6060816115c05750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ea57806115d481611ddb565b91506115e39050600a83611d2a565b91506115c4565b60008167ffffffffffffffff81111561161357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561163d576020820181803683370190505b5090505b841561159457611652600183611d5d565b915061165f600a86611df6565b61166a906030611d12565b60f81b81838151811061168d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116af600a86611d2a565b9450611641565b6107bc83838360016000546001600160801b03166001600160a01b0385166116f057604051622e076360e81b815260040160405180910390fd5b8361170e5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b0319811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156118215760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48380156117f757506117f5600088848861148d565b155b15611815576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016117a0565b50600080546001600160801b0319166001600160801b03929092169190911790556112f6565b82805461185390611da0565b90600052602060002090601f01602090048101928261187557600085556118bb565b82601f1061188e57805160ff19168380011785556118bb565b828001600101855582156118bb579182015b828111156118bb5782518255916020019190600101906118a0565b506118c79291506118cb565b5090565b5b808211156118c757600081556001016118cc565b600067ffffffffffffffff808411156118fb576118fb611e36565b604051601f8501601f19908116603f0116810190828211818310171561192357611923611e36565b8160405280935085815286868601111561193c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461196d57600080fd5b919050565b8035801515811461196d57600080fd5b600060208284031215611993578081fd5b61199c82611956565b9392505050565b600080604083850312156119b5578081fd5b6119be83611956565b91506119cc60208401611956565b90509250929050565b6000806000606084860312156119e9578081fd5b6119f284611956565b9250611a0060208501611956565b9150604084013590509250925092565b60008060008060808587031215611a25578081fd5b611a2e85611956565b9350611a3c60208601611956565b925060408501359150606085013567ffffffffffffffff811115611a5e578182fd5b8501601f81018713611a6e578182fd5b611a7d878235602084016118e0565b91505092959194509250565b60008060408385031215611a9b578182fd5b611aa483611956565b91506119cc60208401611972565b60008060408385031215611ac4578182fd5b611acd83611956565b946020939093013593505050565b600060208284031215611aec578081fd5b61199c82611972565b600060208284031215611b06578081fd5b813561199c81611e4c565b600060208284031215611b22578081fd5b815161199c81611e4c565b600060208284031215611b3e578081fd5b813567ffffffffffffffff811115611b54578182fd5b8201601f81018413611b64578182fd5b611594848235602084016118e0565b600060208284031215611b84578081fd5b5035919050565b60008151808452611ba3816020860160208601611d74565b601f01601f19169290920160200192915050565b60008151611bc9818560208601611d74565b9290920192915050565b600080845482600182811c915080831680611bef57607f831692505b6020808410821415611c0f57634e487b7160e01b87526022600452602487fd5b818015611c235760018114611c3457611c60565b60ff19861689528489019650611c60565b60008b815260209020885b86811015611c585781548b820152908501908301611c3f565b505084890196505b505050505050611c84611c738286611bb7565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611cc090830184611b8b565b9695505050505050565b60208152600061199c6020830184611b8b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611d2557611d25611e0a565b500190565b600082611d3957611d39611e20565b500490565b6000816000190483118215151615611d5857611d58611e0a565b500290565b600082821015611d6f57611d6f611e0a565b500390565b60005b83811015611d8f578181015183820152602001611d77565b83811115610eb15750506000910152565b600181811c90821680611db457607f821691505b60208210811415611dd557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611def57611def611e0a565b5060010190565b600082611e0557611e05611e20565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461088a57600080fdfea26469706673582212208abdfe1c04f591f3edc8fee956d28bb342c730a5aafbe5a70f0e4dfaf24710d764736f6c63430008040033