60806040526008805460ff60a01b191690556105dc600a55600b805460ff191690553480156200002e57600080fd5b506040518060400160405280601481526020017f4972726567756c617220436f6e646974696f6e7300000000000000000000000081525060405180604001604052806002815260200161494360f01b81525081600290805190602001906200009892919062000119565b508051620000ae90600390602084019062000119565b5050600160005550620000c133620000c7565b620001fc565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012790620001bf565b90600052602060002090601f0160209004810192826200014b576000855562000196565b82601f106200016657805160ff191683800117855562000196565b8280016001018555821562000196579182015b828111156200019657825182559160200191906001019062000179565b50620001a4929150620001a8565b5090565b5b80821115620001a45760008155600101620001a9565b600181811c90821680620001d457607f821691505b60208210811415620001f657634e487b7160e01b600052602260045260246000fd5b50919050565b611d71806200020c6000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063c634d032116100a0578063e011ac871161006f578063e011ac871461059c578063e136a84d146105b1578063e985e9c5146105c6578063f2bcd0221461060f578063f2fde38b1461062f57600080fd5b8063c634d0321461053d578063c87b56dd14610550578063cb0daa5714610570578063d5abeb011461058657600080fd5b8063a8001211116100e7578063a8001211146104be578063ab04837d146104de578063b6b6f0c3146104f3578063b88d4fde14610508578063c051e38a1461052857600080fd5b8063715018a6146104565780638da5cb5b1461046b57806395d89b4114610489578063a22cb4651461049e57600080fd5b80632a55205a1161019b5780635d148e5c1161016a5780635d148e5c146103cb5780636352211e146103e55780636817c76c146104055780636c0360eb1461042157806370a082311461043657600080fd5b80632a55205a146103375780633ccfd60b1461037657806342842e0e1461038b57806355f804b3146103ab57600080fd5b8063095ea7b3116101d7578063095ea7b3146102af57806318160ddd146102cf57806323b872dd146102f657806325fd90f31461031657600080fd5b806301ffc9a71461020957806305ea13fb1461023e57806306fdde0314610255578063081812fc14610277575b600080fd5b34801561021557600080fd5b506102296102243660046117e9565b61064f565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361067a565b005b34801561026157600080fd5b5061026a610706565b6040516102359190611865565b34801561028357600080fd5b50610297610292366004611878565b610798565b6040516001600160a01b039091168152602001610235565b3480156102bb57600080fd5b506102536102ca3660046118ad565b6107dc565b3480156102db57600080fd5b5060015460005403600019015b604051908152602001610235565b34801561030257600080fd5b506102536103113660046118d7565b610863565b34801561032257600080fd5b5060085461022990600160a01b900460ff1681565b34801561034357600080fd5b50610357610352366004611913565b61086e565b604080516001600160a01b039093168352602083019190915201610235565b34801561038257600080fd5b506102536108f2565b34801561039757600080fd5b506102536103a63660046118d7565b610988565b3480156103b757600080fd5b506102536103c63660046119c1565b6109a3565b3480156103d757600080fd5b50600b546102299060ff1681565b3480156103f157600080fd5b50610297610400366004611878565b610a4c565b34801561041157600080fd5b506102e867011c37937e08000081565b34801561042d57600080fd5b5061026a610a5e565b34801561044257600080fd5b506102e8610451366004611a0a565b610aec565b34801561046257600080fd5b50610253610b3b565b34801561047757600080fd5b506008546001600160a01b0316610297565b34801561049557600080fd5b5061026a610b4d565b3480156104aa57600080fd5b506102536104b9366004611a25565b610b5c565b3480156104ca57600080fd5b506102536104d9366004611878565b610bf2565b3480156104ea57600080fd5b50610229610bff565b3480156104ff57600080fd5b506102e8600581565b34801561051457600080fd5b50610253610523366004611a61565b610c1d565b34801561053457600080fd5b50610229610c67565b61025361054b366004611878565b610c9c565b34801561055c57600080fd5b5061026a61056b366004611878565b610d52565b34801561057c57600080fd5b506102e8600a5481565b34801561059257600080fd5b506102e86101f481565b3480156105a857600080fd5b506102e8610d86565b3480156105bd57600080fd5b506102e8600a81565b3480156105d257600080fd5b506102296105e1366004611add565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561061b57600080fd5b50600954610297906001600160a01b031681565b34801561063b57600080fd5b5061025361064a366004611a0a565b610dac565b60006001600160e01b0319821663152a902d60e11b1480610674575061067482610e22565b92915050565b610682610e72565b6001546000540360001901156106f75760405162461bcd60e51b815260206004820152602f60248201527f43616e206f6e6c79206d696e74204172746973742050726f6f6673206265666f60448201526e393290283ab13634b19029b0b6329760891b60648201526084015b60405180910390fd5b610704600a336000610ecc565b565b60606002805461071590611b10565b80601f016020809104026020016040519081016040528092919081815260200182805461074190611b10565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b60006107a382610f7f565b6107c0576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107e782610a4c565b9050806001600160a01b0316836001600160a01b0316141561081c5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108535761083681336105e1565b610853576040516367d9dca160e11b815260040160405180910390fd5b61085e838383610fb8565b505050565b61085e838383611014565b60008061087a84610f7f565b6108bd5760405162461bcd60e51b81526020600482015260146024820152732a37b5b2b7103237b2b9b713ba1032bc34b9ba1760611b60448201526064016106ee565b600954600a546001600160a01b0390911690612710906108dd9086611b61565b6108e79190611b96565b915091509250929050565b6108fa610e72565b604051600090339047908381818185875af1925050503d806000811461093c576040519150601f19603f3d011682016040523d82523d6000602084013e610941565b606091505b50509050806109855760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016106ee565b50565b61085e83838360405180602001604052806000815250610c1d565b6109ab610e72565b600b5460ff16156109fe5760405162461bcd60e51b815260206004820152601c60248201527f4d65746164617461206f6e204950465320617265206c6f636b65642e0000000060448201526064016106ee565b7fcca744ba4c4cd340a1c25929166dbc791d918d952bb4bd47422ed34144c384c781604051610a2d9190611865565b60405180910390a18051610a4890600c90602084019061173a565b5050565b6000610a5782611203565b5192915050565b600c8054610a6b90611b10565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9790611b10565b8015610ae45780601f10610ab957610100808354040283529160200191610ae4565b820191906000526020600020905b815481529060010190602001808311610ac757829003601f168201915b505050505081565b60006001600160a01b038216610b15576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610b43610e72565b6107046000611327565b60606003805461071590611b10565b6001600160a01b038216331415610b865760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610bfa610e72565b600a55565b6000610c09610e72565b50600b805460ff1916600190811790915590565b610c28848484611014565b6001600160a01b0383163b15610c6157610c4484848484611379565b610c61576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6000610c71610e72565b506008805460ff600160a01b808304821615810260ff60a01b19909316929092179283905591041690565b600854600160a01b900460ff16610cf55760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e67206973206e6f742063757272656e746c79206163746976652e60448201526064016106ee565b6005811115610d465760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e206d696e742074686174206d616e79206174206f6e63652e0060448201526064016106ee565b61098581336001610ecc565b6060600c610d5f83611462565b604051602001610d70929190611bc6565b6040516020818303038152906040529050919050565b6000610d9b6001546000546000199190030190565b610da7906101f4611c6d565b905090565b610db4610e72565b6001600160a01b038116610e195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ee565b61098581611327565b60006001600160e01b031982166380ac58cd60e01b1480610e5357506001600160e01b03198216635b5e139f60e01b145b8061067457506301ffc9a760e01b6001600160e01b0319831614610674565b6008546001600160a01b031633146107045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ee565b82610ed5610d86565b1015610f0f5760405162461bcd60e51b815260206004820152600960248201526829b7b6321037baba1760b91b60448201526064016106ee565b8015610f7557610f2767011c37937e08000084611b61565b3414610f755760405162461bcd60e51b815260206004820152601760248201527f45544820616d6f756e74206e6f7420636f72726563742e00000000000000000060448201526064016106ee565b61085e8284611560565b600081600111158015610f93575060005482105b8015610674575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061101f82611203565b9050836001600160a01b031681600001516001600160a01b0316146110565760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480611074575061107485336105e1565b8061108f57503361108484610798565b6001600160a01b0316145b9050806110af57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166110d657604051633a954ecd60e21b815260040160405180910390fd5b6110e260008487610fb8565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166111b85760005482146111b8578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6040805160608101825260008082526020820181905291810191909152818060011161130e5760005481101561130e57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061130c5780516001600160a01b0316156112a2579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611307579392505050565b6112a2565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906113ae903390899088908890600401611c84565b6020604051808303816000875af19250505080156113e9575060408051601f3d908101601f191682019092526113e691810190611cc1565b60015b611444573d808015611417576040519150601f19603f3d011682016040523d82523d6000602084013e61141c565b606091505b50805161143c576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060816114865750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114b0578061149a81611cde565b91506114a99050600a83611b96565b915061148a565b60008167ffffffffffffffff8111156114cb576114cb611935565b6040519080825280601f01601f1916602001820160405280156114f5576020820181803683370190505b5090505b841561145a5761150a600183611c6d565b9150611517600a86611cf9565b611522906030611d0d565b60f81b81838151811061153757611537611d25565b60200101906001600160f81b031916908160001a905350611559600a86611b96565b94506114f9565b610a488282604051806020016040528060008152506000546001600160a01b03841661159e57604051622e076360e81b815260040160405180910390fd5b826115bc5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b156116e5575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46116ae6000878480600101955087611379565b6116cb576040516368d2bf6b60e11b815260040160405180910390fd5b8082106116635782600054146116e057600080fd5b61172a565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106116e6575b506000908155610c619085838684565b82805461174690611b10565b90600052602060002090601f01602090048101928261176857600085556117ae565b82601f1061178157805160ff19168380011785556117ae565b828001600101855582156117ae579182015b828111156117ae578251825591602001919060010190611793565b506117ba9291506117be565b5090565b5b808211156117ba57600081556001016117bf565b6001600160e01b03198116811461098557600080fd5b6000602082840312156117fb57600080fd5b8135611806816117d3565b9392505050565b60005b83811015611828578181015183820152602001611810565b83811115610c615750506000910152565b6000815180845261185181602086016020860161180d565b601f01601f19169290920160200192915050565b6020815260006118066020830184611839565b60006020828403121561188a57600080fd5b5035919050565b80356001600160a01b03811681146118a857600080fd5b919050565b600080604083850312156118c057600080fd5b6118c983611891565b946020939093013593505050565b6000806000606084860312156118ec57600080fd5b6118f584611891565b925061190360208501611891565b9150604084013590509250925092565b6000806040838503121561192657600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561196657611966611935565b604051601f8501601f19908116603f0116810190828211818310171561198e5761198e611935565b816040528093508581528686860111156119a757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156119d357600080fd5b813567ffffffffffffffff8111156119ea57600080fd5b8201601f810184136119fb57600080fd5b61145a8482356020840161194b565b600060208284031215611a1c57600080fd5b61180682611891565b60008060408385031215611a3857600080fd5b611a4183611891565b915060208301358015158114611a5657600080fd5b809150509250929050565b60008060008060808587031215611a7757600080fd5b611a8085611891565b9350611a8e60208601611891565b925060408501359150606085013567ffffffffffffffff811115611ab157600080fd5b8501601f81018713611ac257600080fd5b611ad18782356020840161194b565b91505092959194509250565b60008060408385031215611af057600080fd5b611af983611891565b9150611b0760208401611891565b90509250929050565b600181811c90821680611b2457607f821691505b60208210811415611b4557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611b7b57611b7b611b4b565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611ba557611ba5611b80565b500490565b60008151611bbc81856020860161180d565b9290920192915050565b600080845481600182811c915080831680611be257607f831692505b6020808410821415611c0257634e487b7160e01b86526022600452602486fd5b818015611c165760018114611c2757611c54565b60ff19861689528489019650611c54565b60008b81526020902060005b86811015611c4c5781548b820152908501908301611c33565b505084890196505b505050505050611c648185611baa565b95945050505050565b600082821015611c7f57611c7f611b4b565b500390565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611cb790830184611839565b9695505050505050565b600060208284031215611cd357600080fd5b8151611806816117d3565b6000600019821415611cf257611cf2611b4b565b5060010190565b600082611d0857611d08611b80565b500690565b60008219821115611d2057611d20611b4b565b500190565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220e4a86b5885907f0adfd2b2adab3dda8dc19304d77f271f7f2bd2999c99841e9264736f6c634300080c0033