0 txs
37.7k calls
constructor
constructor(string _suffix)
functions
bridgeContract
viewfunction bridgeContract() view returns (address)
bridgedTokenAddress
viewfunction bridgedTokenAddress(address _nativeToken) view returns (address)
dailyLimit
viewfunction dailyLimit(address _token) view returns (uint256)
executionDailyLimit
viewfunction executionDailyLimit(address _token) view returns (uint256)
executionMaxPerTx
viewfunction executionMaxPerTx(address _token) view returns (uint256)
getBridgeInterfacesVersion
purefunction getBridgeInterfacesVersion() pure returns (uint64 major, uint64 minor, uint64 patch)
getBridgeMode
purefunction getBridgeMode() pure returns (bytes4 _data)
getCurrentDay
viewfunction getCurrentDay() view returns (uint256)
interestImplementation
viewfunction interestImplementation(address _token) view returns (address)
isBridgedTokenDeployAcknowledged
viewfunction isBridgedTokenDeployAcknowledged(address _token) view returns (bool)
isInitialized
viewfunction isInitialized() view returns (bool)
isRegisteredAsNativeToken
viewfunction isRegisteredAsNativeToken(address _token) view returns (bool)
isTokenRegistered
viewfunction isTokenRegistered(address _token) view returns (bool)
maxAvailablePerTx
viewfunction maxAvailablePerTx(address _token) view returns (uint256)
maxPerTx
viewfunction maxPerTx(address _token) view returns (uint256)
mediatorBalance
viewfunction mediatorBalance(address _token) view returns (uint256)
mediatorContractOnOtherSide
viewfunction mediatorContractOnOtherSide() view returns (address)
messageFixed
viewfunction messageFixed(bytes32 _messageId) view returns (bool)
minCashThreshold
viewfunction minCashThreshold(address _token) view returns (uint256)
minPerTx
viewfunction minPerTx(address _token) view returns (uint256)
nativeTokenAddress
viewfunction nativeTokenAddress(address _bridgedToken) view returns (address)
owner
viewfunction owner() view returns (address)
requestGasLimit
viewfunction requestGasLimit() view returns (uint256)
tokenFactory
viewfunction tokenFactory() view returns (address)
totalExecutedPerDay
viewfunction totalExecutedPerDay(address _token, uint256 _day) view returns (uint256)
totalSpentPerDay
viewfunction totalSpentPerDay(address _token, uint256 _day) view returns (uint256)
withinExecutionLimit
viewfunction withinExecutionLimit(address _token, uint256 _amount) view returns (bool)
withinLimit
viewfunction withinLimit(address _token, uint256 _amount) view returns (bool)
claimTokens
nonpayablefunction claimTokens(address _token, address _to)
claimTokensFromTokenContract
nonpayablefunction claimTokensFromTokenContract(address _bridgedToken, address _token, address _to)
deployAndHandleBridgedTokens
nonpayablefunction deployAndHandleBridgedTokens(address _token, string _name, string _symbol, uint8 _decimals, address _recipient, uint256 _value)
deployAndHandleBridgedTokensAndCall
nonpayablefunction deployAndHandleBridgedTokensAndCall(address _token, string _name, string _symbol, uint8 _decimals, address _recipient, uint256 _value, bytes _data)
disableInterest
nonpayablefunction disableInterest(address _token)
fixFailedMessage
nonpayablefunction fixFailedMessage(bytes32 _messageId)
fixMediatorBalance
nonpayablefunction fixMediatorBalance(address _token, address _receiver)
handleBridgedTokens
nonpayablefunction handleBridgedTokens(address _token, address _recipient, uint256 _value)
handleBridgedTokensAndCall
nonpayablefunction handleBridgedTokensAndCall(address _token, address _recipient, uint256 _value, bytes _data)
handleNativeTokens
nonpayablefunction handleNativeTokens(address _token, address _recipient, uint256 _value)
handleNativeTokensAndCall
nonpayablefunction handleNativeTokensAndCall(address _token, address _recipient, uint256 _value, bytes _data)
initialize
nonpayablefunction initialize(address _bridgeContract, address _mediatorContract, uint256[3] _dailyLimitMaxPerTxMinPerTxArray, uint256[2] _executionDailyLimitExecutionMaxPerTxArray, uint256 _requestGasLimit, address _owner, address _tokenFactory) returns (bool)
initializeInterest
nonpayablefunction initializeInterest(address _token, address _impl, uint256 _minCashThreshold)
invest
nonpayablefunction invest(address _token)
migrateTo_3_3_0
nonpayablefunction migrateTo_3_3_0(address _tokenFactory, address _interestImplementation)
onTokenTransfer
nonpayablefunction onTokenTransfer(address _from, uint256 _value, bytes _data) returns (bool)
relayTokens
nonpayablefunction relayTokens(address token, address _receiver, uint256 _value)
relayTokens
nonpayablefunction relayTokens(address token, uint256 _value)
relayTokensAndCall
nonpayablefunction relayTokensAndCall(address token, address _receiver, uint256 _value, bytes _data)
requestFailedMessageFix
nonpayablefunction requestFailedMessageFix(bytes32 _messageId)
setBridgeContract
nonpayablefunction setBridgeContract(address _bridgeContract)
setCustomTokenAddressPair
nonpayablefunction setCustomTokenAddressPair(address _nativeToken, address _bridgedToken)
setDailyLimit
nonpayablefunction setDailyLimit(address _token, uint256 _dailyLimit)
setExecutionDailyLimit
nonpayablefunction setExecutionDailyLimit(address _token, uint256 _dailyLimit)
setExecutionMaxPerTx
nonpayablefunction setExecutionMaxPerTx(address _token, uint256 _maxPerTx)
setMaxPerTx
nonpayablefunction setMaxPerTx(address _token, uint256 _maxPerTx)
setMediatorContractOnOtherSide
nonpayablefunction setMediatorContractOnOtherSide(address _mediatorContract)
setMinCashThreshold
nonpayablefunction setMinCashThreshold(address _token, uint256 _minCashThreshold)
setMinPerTx
nonpayablefunction setMinPerTx(address _token, uint256 _minPerTx)
setRequestGasLimit
nonpayablefunction setRequestGasLimit(uint256 _gasLimit)
setTokenFactory
nonpayablefunction setTokenFactory(address _tokenFactory)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
DailyLimitChanged
event DailyLimitChanged(address indexed token, uint256 newLimit)
ExecutionDailyLimitChanged
event ExecutionDailyLimitChanged(address indexed token, uint256 newLimit)
FailedMessageFixed
event FailedMessageFixed(bytes32 indexed messageId, address token, address recipient, uint256 value)
NewTokenRegistered
event NewTokenRegistered(address indexed nativeToken, address indexed bridgedToken)
OwnershipTransferred
event OwnershipTransferred(address previousOwner, address newOwner)
TokensBridged
event TokensBridged(address indexed token, address indexed recipient, uint256 value, bytes32 indexed messageId)
TokensBridgingInitiated
event TokensBridgingInitiated(address indexed token, address indexed sender, uint256 value, bytes32 indexed messageId)
errors
No errors.
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162005cef38038062005cef833981810160405260208110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b5060405250505080602081511115620000fe57600080fd5b602081015160a052516080525060805160a051615bc06200012f60003980614d67525080614dec5250615bc06000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80637837cf91116101e9578063c2173d431161010f578063db6fff8c116100ad578063f2fde38b1161007c578063f2fde38b14611081578063f3b83791146110a7578063f3f51415146110c4578063f50dace6146110ea576103a4565b8063db6fff8c14610ff5578063e77772fe14611021578063ec47de2a14611029578063f2c54fe814611055576103a4565b8063d0342acd116100e9578063d0342acd14610d99578063d522cfd714610dc7578063d740548114610f03578063d814b1d714610fc7576103a4565b8063c2173d4314610ca7578063c534576114610ccd578063cd59658314610d91576103a4565b8063a4b1c24311610187578063ab4f5dc511610156578063ab4f5dc514610c0d578063ad58bdd114610c43578063ae813e9f14610c79578063be3b625b14610c9f576103a4565b8063a4b1c24314610ad6578063a4b4b23314610afc578063a4c0ed3614610b28578063ab3a25d914610be1576103a4565b8063871c0760116101c3578063871c076014610a755780638da5cb5b14610a7d5780639a4a439514610a855780639cb7595a14610aa2576103a4565b80637837cf911461095f57806385df73bd1461098b578063867f7a4d146109b1576103a4565b80632c3500a6116102ce578063437764df1161026c57806364696f971161023b57806364696f97146108ad57806369ffa08a146108e55780636e5d6bea146109135780637610722f14610939576103a4565b8063437764df1461081f5780635726ff3014610844578063593399821461086a57806361c04f8414610887576103a4565b8063392e53cd116102a8578063392e53cd146107bd5780633a50bc87146107c55780633e6968b6146107f157806340f8dd86146107f9576103a4565b80632c3500a6146107025780632d70061f146107555780632f73a9f814610797576103a4565b8063107752381161034657806326aa101f1161031557806326aa101f14610594578063272255bb146105ba5780632803212f146105f05780632ae87cdd1461061c576103a4565b806310775238146104d2578063125e4cfb1461051257806316ef191314610548578063194153d31461056e576103a4565b806303f9c7931161038257806303f9c7931461043b5780630950d515146104615780630b26cf661461047e5780630b71a4a7146104a4576103a4565b806301e4f53a146103a957806301fcc1d3146103d7578063032f693f14610403575b600080fd5b6103d5600480360360408110156103bf57600080fd5b506001600160a01b038135169060200135611110565b005b6103d5600480360360408110156103ed57600080fd5b506001600160a01b03813516906020013561114f565b6104296004803603602081101561041957600080fd5b50356001600160a01b03166111ee565b60408051918252519081900360200190f35b6103d56004803603602081101561045157600080fd5b50356001600160a01b0316611246565b6103d56004803603602081101561047757600080fd5b5035611388565b6103d56004803603602081101561049457600080fd5b50356001600160a01b0316611431565b6103d5600480360360408110156104ba57600080fd5b506001600160a01b0381358116916020013516611445565b6104fe600480360360408110156104e857600080fd5b506001600160a01b03813516906020013561151a565b604080519115158252519081900360200190f35b6103d56004803603606081101561052857600080fd5b506001600160a01b0381358116916020810135909116906040013561158d565b6104296004803603602081101561055e57600080fd5b50356001600160a01b03166115c7565b6104296004803603602081101561058457600080fd5b50356001600160a01b0316611624565b6104fe600480360360208110156105aa57600080fd5b50356001600160a01b031661167f565b6103d5600480360360608110156105d057600080fd5b506001600160a01b03813581169160208101359091169060400135611692565b6103d56004803603604081101561060657600080fd5b506001600160a01b0381351690602001356116b5565b6103d5600480360360c081101561063257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561065c57600080fd5b82018360208201111561066e57600080fd5b803590602001918460018302840111600160201b8311171561068f57600080fd5b919390929091602081019035600160201b8111156106ac57600080fd5b8201836020820111156106be57600080fd5b803590602001918460018302840111600160201b831117156106df57600080fd5b919350915060ff813516906001600160a01b036020820135169060400135611784565b6104fe600480360361014081101561071957600080fd5b506001600160a01b0381358116916020810135821691604082019160a081019160e08201359161010081013582169161012090910135166117ab565b61077b6004803603602081101561076b57600080fd5b50356001600160a01b031661197f565b604080516001600160a01b039092168252519081900360200190f35b6103d5600480360360208110156107ad57600080fd5b50356001600160a01b03166119e5565b6104fe6119f6565b6104fe600480360360408110156107db57600080fd5b506001600160a01b038135169060200135611a47565b610429611a9d565b6104296004803603602081101561080f57600080fd5b50356001600160a01b0316611aa6565b610827611b05565b604080516001600160e01b03199092168252519081900360200190f35b6104296004803603602081101561085a57600080fd5b50356001600160a01b0316611b10565b6104fe6004803603602081101561088057600080fd5b5035611b6c565b61077b6004803603602081101561089d57600080fd5b50356001600160a01b0316611bbf565b6103d5600480360360608110156108c357600080fd5b506001600160a01b038135811691602081013582169160409091013516611c28565b6103d5600480360360408110156108fb57600080fd5b506001600160a01b0381358116916020013516611cad565b6103d56004803603602081101561092957600080fd5b50356001600160a01b0316611ce4565b6104296004803603602081101561094f57600080fd5b50356001600160a01b0316611cf5565b6103d56004803603604081101561097557600080fd5b506001600160a01b038135169060200135611d4f565b61077b600480360360208110156109a157600080fd5b50356001600160a01b0316611e27565b6103d5600480360360808110156109c757600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610a0157600080fd5b820183602082011115610a1357600080fd5b803590602001918460018302840111600160201b83111715610a3457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e86945050505050565b61077b611eb0565b61077b611f07565b6103d560048036036020811015610a9b57600080fd5b5035611f5e565b610aaa612153565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b61042960048036036020811015610aec57600080fd5b50356001600160a01b031661215d565b6103d560048036036040811015610b1257600080fd5b506001600160a01b0381351690602001356121e2565b6104fe60048036036060811015610b3e57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610b6d57600080fd5b820183602082011115610b7f57600080fd5b803590602001918460018302840111600160201b83111715610ba057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121f4945050505050565b61042960048036036040811015610bf757600080fd5b506001600160a01b03813516906020013561225b565b6103d560048036036060811015610c2357600080fd5b506001600160a01b038135811691602081013590911690604001356122c1565b6103d560048036036060811015610c5957600080fd5b506001600160a01b038135811691602081013590911690604001356122fb565b6104fe60048036036020811015610c8f57600080fd5b50356001600160a01b0316612309565b610429612362565b6104fe60048036036020811015610cbd57600080fd5b50356001600160a01b03166123b0565b6103d560048036036080811015610ce357600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610d1d57600080fd5b820183602082011115610d2f57600080fd5b803590602001918460018302840111600160201b83111715610d5057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506123dd945050505050565b61077b61241d565b6103d560048036036040811015610daf57600080fd5b506001600160a01b0381358116916020013516612474565b6103d5600480360360e0811015610ddd57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610e0757600080fd5b820183602082011115610e1957600080fd5b803590602001918460018302840111600160201b83111715610e3a57600080fd5b919390929091602081019035600160201b811115610e5757600080fd5b820183602082011115610e6957600080fd5b803590602001918460018302840111600160201b83111715610e8a57600080fd5b9193909260ff833516926001600160a01b03602082013516926040820135929091608081019060600135600160201b811115610ec557600080fd5b820183602082011115610ed757600080fd5b803590602001918460018302840111600160201b83111715610ef857600080fd5b509092509050612533565b6103d560048036036080811015610f1957600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b811115610f5357600080fd5b820183602082011115610f6557600080fd5b803590602001918460018302840111600160201b83111715610f8657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125a9945050505050565b6103d560048036036040811015610fdd57600080fd5b506001600160a01b03813581169160200135166125b5565b6103d56004803603604081101561100b57600080fd5b506001600160a01b0381351690602001356127e6565b61077b612883565b6103d56004803603604081101561103f57600080fd5b506001600160a01b0381351690602001356128da565b6104296004803603604081101561106b57600080fd5b506001600160a01b03813516906020013561297b565b6103d56004803603602081101561109757600080fd5b50356001600160a01b03166129e4565b6103d5600480360360208110156110bd57600080fd5b50356129f5565b610429600480360360208110156110da57600080fd5b50356001600160a01b0316612a06565b6103d56004803603602081101561110057600080fd5b50356001600160a01b0316612a5c565b61114b8233836000805b506040519080825280601f01601f191660200182016040528015611145576020820181803683370190505b50612ae8565b5050565b611157612c49565b6111608261167f565b61116957600080fd5b8015806111885750600081118015611188575061118582611aa6565b81105b61119157600080fd5b60408051700caf0cac6eae8d2dedc9ac2f0a0cae4a8f607b1b60208083019190915260609490941b6001600160601b0319166031820152815180820360250181526045909101825280519084012060009081529283905290912055565b60408051670dac2f0a0cae4a8f60c31b6020808301919091526001600160601b0319606085901b1660288301528251601c818403018152603c909201835281519181019190912060009081529081905220545b919050565b600061125182611e27565b905060006112e0826001600160a01b031663cff77444856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b50516112da85611624565b90612c70565b905060006112ed84611b10565b90508082116112fb57600080fd5b8082036113126001600160a01b0386168583612cb9565b836001600160a01b031663b9b8c24686836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b505050505050505050565b611390612d0b565b61139981611b6c565b156113a357600080fd5b60006113ae82612db5565b905060006113bb83612e0e565b905060006113c884612e6b565b90506113d384612eba565b6113de838383612f13565b604080516001600160a01b03808616825284166020820152808201839052905185917f07b5483b8e4bd8ea240a474d5117738350e7d431e3668c48a97910b0b397796a919081900360600190a250505050565b611439612c49565b61144281612f34565b50565b61144d612c49565b6114568161167f565b1561146057600080fd5b600061146b82611bbf565b6001600160a01b03161461147e57600080fd5b60006114898361197f565b6001600160a01b03161461149c57600080fd5b6114b16001600160a01b038216306001612fb0565b806001600160a01b03166342966c6860016040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156114f857600080fd5b505af115801561150c573d6000803e3d6000fd5b5050505061114b828261303c565b600080611538836115328661152d611a9d565b61225b565b90613137565b905060006115466000612a06565b11801561155b57508061155885612a06565b10155b801561156f575061156b846111ee565b8311155b8015611583575061157f8461215d565b8310155b9150505b92915050565b611595612d0b565b60006115a08461197f565b90506115ab8161167f565b6115b457600080fd5b6115c18160008585613191565b50505050565b60408051700caf0cac6eae8d2dedc9ac2f0a0cae4a8f607b1b60208083019190915260609390931b6001600160601b0319166031820152815180820360250181526045909101825280519083012060009081529182905290205490565b604080516e6d65646961746f7242616c616e636560881b60208083019190915260609390931b6001600160601b031916602f820152815180820360230181526043909101825280519083012060009081529182905290205490565b60008061168b8361215d565b1192915050565b61169a612d0b565b6116a38361322e565b6116b08360018484613191565b505050565b6116bd612c49565b6116c68261167f565b6116cf57600080fd5b6116d8826111ee565b8111806116e3575080155b6116ec57600080fd5b604080516919185a5b1e531a5b5a5d60b21b6020808301919091526001600160601b0319606086901b16602a8301528251601e818403018152603e83018085528151918301919091206000908152918290529083902084905583905290516001600160a01b038416917fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd25941599190819003605e0190a25050565b61178c612d0b565b600061179c8989898989896132ea565b905061137d8160008585613191565b60408051600481526024810182526020810180516001600160e01b03166337ef410160e11b1781529151815160009384936060933093919290918291908083835b6020831061180b5780518252601f1990920191602091820191016117ec565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b50915091508115806118ac5750805160201480156118ac575080806020019051602081101561189e57600080fd5b50516001600160a01b031633145b806118b657503330145b6118bf57600080fd5b6118c76119f6565b156118d157600080fd5b6118da8a612f34565b6118e389613638565b61191760008960038060200260405190810160405280929190826003602002808284376000920191909152506136a2915050565b60408051808201825261194691600091908a9060029083908390808284376000920191909152506137f6915050565b61194f866138e5565b61195885613946565b61196184613a0e565b611969613a8a565b6119716119f6565b9a9950505050505050505050565b604080516f686f6d65546f6b656e4164647265737360801b60208083019190915260609390931b6001600160601b03191660308201528151808203602401815260449091018252805190830120600090815260029092529020546001600160a01b031690565b6119ed612c49565b61144281613a0e565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc5460ff1690565b600080611a5f8361153286611a5a611a9d565b61297b565b90506000611a6d6000611aa6565b118015611a82575080611a7f85611aa6565b10155b80156115835750611a92846115c7565b909211159392505050565b62015180420490565b6040805172195e1958dd5d1a5bdb91185a5b1e531a5b5a5d606a1b60208083019190915260609390931b6001600160601b0319166033820152815180820360270181526047909101825280519083012060009081529182905290205490565b6358a8b61360e11b90565b604080516f1b5a5b90d85cda151a1c995cda1bdb1960821b60208083019190915260609390931b6001600160601b0319166030820152815180820360240181526044909101825280519083012060009081529182905290205490565b604080516b1b595cdcd859d9519a5e195960a21b602080830191909152602c80830185905283518084039091018152604c909201835281519181019190912060009081526004909152205460ff16919050565b6040805172666f726569676e546f6b656e4164647265737360681b60208083019190915260609390931b6001600160601b03191660338201528151808203602701815260479091018252805190830120600090815260029092529020546001600160a01b031690565b611c30613ae1565b826001600160a01b03166369ffa08a83836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b50505050505050565b611cb5613ae1565b6001600160a01b0382161580611cd15750611ccf8261167f565b155b611cda57600080fd5b61114b8282613b5a565b611cec612c49565b61144281613638565b600080611d01836111ee565b90506000611d0e84612a06565b90506000611d1e8561152d611a9d565b90506000818311611d30576000611d34565b8183035b9050808410611d435780611d45565b835b9695505050505050565b611d57612c49565b611d608261167f565b611d6957600080fd5b611d72826115c7565b811180611d7d575080155b611d8657600080fd5b6040805172195e1958dd5d1a5bdb91185a5b1e531a5b5a5d606a1b6020808301919091526001600160601b0319606086901b16603383015282516027818403018152604783018085528151918301919091206000908152918290529083902084905583905290516001600160a01b038416917f4c177b42dbe934b3abbc0208c11a42e46589983431616f1710ab19969c5ed62e919081900360670190a25050565b604080516b1a5b9d195c995cdd125b5c1b60a21b60208083019190915260609390931b6001600160601b031916602c8201528151808203840181529082018252805190830120600090815260029092529020546001600160a01b031690565b611e8e612d0b565b611e978461322e565b611ea48460018585613191565b6115c183858484613b94565b7f98aa806e31e94a687a31c65769cb99670064dd7f5a87526da075c5fb4eab988060005260026020527f0c1206883be66049a02d4937078367c00b3d71dd1a9465df969363c6ddeac96d546001600160a01b031690565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e546001600160a01b031690565b6000611f6861241d565b9050806001600160a01b031663cb08a10c836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611fae57600080fd5b505afa158015611fc2573d6000803e3d6000fd5b505050506040513d6020811015611fd857600080fd5b505115611fe457600080fd5b306001600160a01b0316816001600160a01b0316633f9a8e7e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d602081101561205c57600080fd5b50516001600160a01b03161461207157600080fd5b612079611eb0565b6001600160a01b0316816001600160a01b0316634a610b04846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156120c657600080fd5b505afa1580156120da573d6000803e3d6000fd5b505050506040513d60208110156120f057600080fd5b50516001600160a01b03161461210557600080fd5b6040805160248082018590528251808303909101815260449091019091526020810180516001600160e01b0316630950d51560e01b9081179091529061214c816001613d01565b5050505050565b6003806001909192565b60408051670dad2dca0cae4a8f60c31b6020808301919091526001600160601b0319606085901b1660288301528251601c818403018152603c9092018352815191810191909120600090815290819052908120546001600160a01b0383166121c6579050611241565b600081116121d55760006121d8565b60015b60ff169392505050565b6121ea612c49565b61114b8282613e0c565b60006121fe613e68565b61225157604080516000815260208101909152825185906014116122415761222584613e8d565b9050601484511115612241578351601319016014850190815291505b61224e3387838886613e94565b50505b5060019392505050565b604080516f746f74616c5370656e7450657244617960801b60208083019190915260609490941b6001600160601b031916603082015260448082019390935281518082039093018352606401815281519183019190912060009081529182905290205490565b6122c9612c49565b60006122d484611e27565b6001600160a01b0316146122e757600080fd5b6122f18383613f2d565b6116b08382613e0c565b6116b083838360008061111a565b604080516861636b4465706c6f7960b81b60208083019190915260609390931b6001600160601b03191660298201528151808203601d018152603d90910182528051908301206000908152600490925290205460ff1690565b7f2dfd6c9f781bb6bbb5369c114e949b69ebb440ef3d4dd6b2836225eb1dc3a2be60009081526020527f2de0d2cdc19d356cb53b5984f91bfd3b31fe0c678a0d190a6db39274bb34753f5490565b60006123bb8261167f565b8015611587575060006123cd83611bbf565b6001600160a01b03161492915050565b6123e5612d0b565b60006123f08561197f565b90506123fb8161167f565b61240457600080fd5b6124118160008686613191565b61214c84828585613b94565b7f811bbb11e8899da471f0e69a3ed55090fc90215227fc5fb1cb0d6e962ea7b74f60005260026020527fb4ed64697d3ef8518241966f7c6f28b0d72f20f51198717d198d2d55076c593d546001600160a01b031690565b61247c613ae1565b806001600160a01b03811661249057600080fd5b612499836123b0565b6124a257600080fd5b60006124ad84614033565b9050600081116124bc57600080fd5b60006124c785611cf5565b9050600081116124d657600080fd5b808211156124e2578091505b6124f4856124ee611a9d565b84614131565b60408051600080825260208201909252606091612516918890889087906141af565b90506000612525826001613d01565b9050611ca48188888761482a565b61253b612d0b565b600061254b8b8b8b8b8b8b6132ea565b905061255a8160008787613191565b61259c85828686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b9492505050565b5050505050505050505050565b6115c184848484612ae8565b7fd814b1d787b8a2d93a1c320d66800a58a03ed3bf12b285ec5ec1e0e26d6550cc600081905260046020527f612ef5ed0e5e2bed1afa8019b1ae0542ab321409196a5627628d39f86fff869a5460ff161561260f57600080fd5b61261883613a0e565b612624621e84806138e5565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48650246139ca80061264a8285613f2d565b6126548282613e0c565b600061265f83611624565b905081811161266d57600080fd5b8181036126846001600160a01b0385168783612cb9565b856001600160a01b031663b9b8c24685836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b5050505073dac17f958d2ee523a2206206994597c13d831ec7935064ae9f7bcc00925061271c8487613f2d565b6127268484613e0c565b61272f84611624565b915082821161273d57600080fd5b508181036127556001600160a01b0385168783612cb9565b856001600160a01b031663b9b8c24685836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156127ac57600080fd5b505af11580156127c0573d6000803e3d6000fd5b50505060009586525050600460205250506040909120805460ff19166001179055505050565b6127ee612c49565b6127f78261167f565b61280057600080fd5b80158061282657506128118261215d565b81118015612826575061282382612a06565b81105b61282f57600080fd5b60408051670dac2f0a0cae4a8f60c31b60208083019190915260609490941b6001600160601b03191660288201528151808203601c018152603c909101825280519084012060009081529283905290912055565b7f269c5905f777ee6391c7a361d17039a7d62f52ba9fffeb98c5ade342705731a360005260026020527f15c764a0cd4bb3d72a49abedd3d6793c3b93c0d57f43174a348b443be86f79c1546001600160a01b031690565b6128e2612c49565b6128eb8261167f565b6128f457600080fd5b60008111801561290b575061290882612a06565b81105b801561291e575061291b826111ee565b81105b61292757600080fd5b60408051670dad2dca0cae4a8f60c31b60208083019190915260609490941b6001600160601b03191660288201528151808203601c018152603c909101825280519084012060009081529283905290912055565b6040805172746f74616c457865637574656450657244617960681b60208083019190915260609490941b6001600160601b031916603382015260478082019390935281518082039093018352606701815281519183019190912060009081529182905290205490565b6129ec612c49565b61144281613946565b6129fd612c49565b611442816138e5565b604080516919185a5b1e531a5b5a5d60b21b60208083019190915260609390931b6001600160601b031916602a8201528151808203601e018152603e909101825280519083012060009081529182905290205490565b612a64612c49565b612a6d81611e27565b6001600160a01b031663f3fef3a3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612ac557600080fd5b505af1158015612ad9573d6000803e3d6000fd5b50505050611442816000613f2d565b612af0613e68565b15612afa57600080fd5b6000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50519050612b81600161489a565b612b966001600160a01b0386163330866148be565b612ba0600061489a565b6000612c2582876001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612bf357600080fd5b505afa158015612c07573d6000803e3d6000fd5b505050506040513d6020811015612c1d57600080fd5b505190612c70565b905083811115612c3457600080fd5b612c418633878487613e94565b505050505050565b612c51611f07565b6001600160a01b0316336001600160a01b031614612c6e57600080fd5b565b6000612cb283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614918565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116b09084906149af565b6000612d1561241d565b9050336001600160a01b03821614612d2c57600080fd5b612d34611eb0565b6001600160a01b0316816001600160a01b031663d67bdd256040518163ffffffff1660e01b815260040160206040518083038186803b158015612d7657600080fd5b505afa158015612d8a573d6000803e3d6000fd5b505050506040513d6020811015612da057600080fd5b50516001600160a01b03161461144257600080fd5b604080516b36b2b9b9b0b3b2aa37b5b2b760a11b602080830191909152602c80830185905283518084039091018152604c90920183528151918101919091206000908152600290915220546001600160a01b0316919050565b604080516f1b595cdcd859d9549958da5c1a595b9d60821b602080830191909152603080830185905283518084039091018152605090920183528151918101919091206000908152600290915220546001600160a01b0316919050565b604080516b6d65737361676556616c756560a01b602080830191909152602c80830185905283518084039091018152604c90920183528151918101919091206000908152908190522054919050565b604080516b1b595cdcd859d9519a5e195960a21b602080830191909152602c8083019490945282518083039094018452604c9091018252825192810192909220600090815260049092529020805460ff19166001179055565b6116b06000612f2185611bbf565b6001600160a01b03161484848485614a60565b612f3d81614c34565b612f4657600080fd5b7f811bbb11e8899da471f0e69a3ed55090fc90215227fc5fb1cb0d6e962ea7b74f60005260026020527fb4ed64697d3ef8518241966f7c6f28b0d72f20f51198717d198d2d55076c593d80546001600160a01b0319166001600160a01b0392909216919091179055565b826001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561300757600080fd5b505af115801561301b573d6000803e3d6000fd5b505050506040513d602081101561303157600080fd5b50516116b057600080fd5b604080516f686f6d65546f6b656e4164647265737360801b6020808301919091526001600160601b0319606086811b82166030850152845160248186030181526044850186528051908401206000908152600280855286822080546001600160a01b03808b166001600160a01b0319928316811790935572666f726569676e546f6b656e4164647265737360681b60648a0152948a901b90951660778801528751606b818903018152608b909701808952875197870197909720835294529485208054909216908716908117909155909290917f78d063210f4fb6b4cc932390bb8045fa2465e51349590182dab8b9e84c57a6ee9190a35050565b600082820183811015612cb2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613199613e68565b156131a357600080fd5b6131ad8482611a47565b6131b657600080fd5b6131c8846131c2611a9d565b83614c6d565b6131d58385848485614a60565b6131dd614cee565b826001600160a01b0316856001600160a01b03167f9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593846040518082815260200191505060405180910390a450505050565b604080516861636b4465706c6f7960b81b6020808301919091526001600160601b0319606085901b1660298301528251601d818403018152603d909201835281519181019190912060009081526004909152205460ff1661144257604080516861636b4465706c6f7960b81b6020808301919091526001600160601b0319606085901b1660298301528251601d818403018152603d90920183528151918101919091206000908152600490915220805460ff1916600117905550565b6000806132f68861197f565b90506001600160a01b03811661359d57606087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529394506060939250899150889081908401838280828437600092019190915250508451929350505015158061338b575060008151115b61339457600080fd5b81516133a2578091506133ab565b80516133ab5750805b6133b482614d61565b91506133be612883565b6001600160a01b031663a39d6acf8383886133d761241d565b6001600160a01b0316631544298e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561340f57600080fd5b505afa158015613423573d6000803e3d6000fd5b505050506040513d602081101561343957600080fd5b50516040516001600160e01b031960e087901b16815260ff831660448201526064810182905260806004820190815285516084830152855190918291602482019160a40190602089019080838360005b838110156134a1578181015183820152602001613489565b50505050905090810190601f1680156134ce5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b838110156135015781810151838201526020016134e9565b50505050905090810190601f16801561352e5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561355157600080fd5b505af1158015613565573d6000803e3d6000fd5b505050506040513d602081101561357b57600080fd5b505192506135898a8461303c565b613596838660ff16614e16565b505061362d565b6135a68161167f565b61362d578260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156135e757600080fd5b505afa1580156135fb573d6000803e3d6000fd5b505050506040513d602081101561361157600080fd5b505160ff161461362057600080fd5b61362d818460ff16614e16565b979650505050505050565b7f98aa806e31e94a687a31c65769cb99670064dd7f5a87526da075c5fb4eab988060005260026020527f0c1206883be66049a02d4937078367c00b3d71dd1a9465df969363c6ddeac96d80546001600160a01b0319166001600160a01b0392909216919091179055565b6040810151158015906136bc575060408101516020820151115b80156136cc575060208101518151115b6136d557600080fd5b8051604080516919185a5b1e531a5b5a5d60b21b602082810191909152606086901b6001600160601b031916602a83018190528351808403601e018152603e8401855280519083012060009081528083528481209590955581860151670dac2f0a0cae4a8f60c31b605e850152606684018290528451605a818603018152607a8501865280519084012086528583528486205583860151670dad2dca0cae4a8f60c31b609a85015260a28401919091528351609681850301815260b690930184528251928201929092208452839052908220556001600160a01b038316907fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd25941599083905b60200201516040518082815260200191505060405180910390a25050565b805160208201511061380757600080fd5b80516040805172195e1958dd5d1a5bdb91185a5b1e531a5b5a5d606a1b602082810191909152606086901b6001600160601b031916603383018190528351808403602701815260478401855280519083012060009081528083528481209590955581860151700caf0cac6eae8d2dedc9ac2f0a0cae4a8f607b1b606785015260788401919091528351606c818503018152608c90930184528251928201929092208452839052908220556001600160a01b038316907f4c177b42dbe934b3abbc0208c11a42e46589983431616f1710ab19969c5ed62e9083906137d8565b6138ed614f9a565b8111156138f957600080fd5b7f2dfd6c9f781bb6bbb5369c114e949b69ebb440ef3d4dd6b2836225eb1dc3a2be60009081526020527f2de0d2cdc19d356cb53b5984f91bfd3b31fe0c678a0d190a6db39274bb34753f55565b6001600160a01b03811661395957600080fd5b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0613982611f07565b604080516001600160a01b03928316815291841660208301528051918290030190a17f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e80546001600160a01b0319166001600160a01b0392909216919091179055565b613a1781614c34565b613a2057600080fd5b7f269c5905f777ee6391c7a361d17039a7d62f52ba9fffeb98c5ade342705731a360005260026020527f15c764a0cd4bb3d72a49abedd3d6793c3b93c0d57f43174a348b443be86f79c180546001600160a01b0319166001600160a01b0392909216919091179055565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc805460ff19166001179055565b306001600160a01b0316636fde82026040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1a57600080fd5b505afa158015613b2e573d6000803e3d6000fd5b505050506040513d6020811015613b4457600080fd5b50516001600160a01b03163314612c6e57600080fd5b806001600160a01b038116613b6e57600080fd5b6001600160a01b038316613b8a57613b8582614fdc565b6116b0565b6116b08383614fe7565b613b9d84614c34565b156115c157836001600160a01b031663db7af85460e01b84848460405160240180846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990991698909817885251815191979096508695509350915081905083835b60208310613c9f5780518252601f199092019160209182019101613c80565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ca4576040519150601f19603f3d011682016040523d82523d6000602084013e611ca4565b6000613d0b61241d565b6001600160a01b031663dc8601b3613d21611eb0565b85613d2a612362565b6040518463ffffffff1660e01b815260040180846001600160a01b0316815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015613d8b578181015183820152602001613d73565b50505050905090810190601f168015613db85780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015613dd957600080fd5b505af1158015613ded573d6000803e3d6000fd5b505050506040513d6020811015613e0357600080fd5b50519392505050565b604080516f1b5a5b90d85cda151a1c995cda1bdb1960821b60208083019190915260609490941b6001600160601b0319166030820152815180820360240181526044909101825280519084012060009081529283905290912055565b7f6168652c307c1e813ca11cfb3a601f1cf3b22452021a5052d8b05f1f1f8a3e925490565b6014015190565b6001600160a01b03831615801590613ec55750613eaf611eb0565b6001600160a01b0316836001600160a01b031614155b613ece57600080fd5b613ed78561167f565b613ef7576000613ee686615074565b9050613ef5868260ff16614e16565b505b613f01858361151a565b613f0a57600080fd5b613f16856124ee611a9d565b6060612516613f2487611bbf565b878686866141af565b6001600160a01b0381161580613fb85750806001600160a01b031663bdd378a0836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613f8b57600080fd5b505afa158015613f9f573d6000803e3d6000fd5b505050506040513d6020811015613fb557600080fd5b50515b613fc157600080fd5b604080516b1a5b9d195c995cdd125b5c1b60a21b60208083019190915260609490941b6001600160601b031916602c82015281518082038501815290820182528051908401206000908152600290935290912080546001600160a01b0319166001600160a01b03909216919091179055565b60008061403f83611e27565b9050600061404c82614c34565b6140575760006140d1565b816001600160a01b031663cff77444856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156140a457600080fd5b505afa1580156140b8573d6000803e3d6000fd5b505050506040513d60208110156140ce57600080fd5b50515b90506141296140e3826112da87611624565b604080516370a0823160e01b815230600482015290516001600160a01b038816916370a08231916024808301926020929190829003018186803b158015612bf357600080fd5b949350505050565b61413f81611532858561225b565b600080858560405160200180806f746f74616c5370656e7450657244617960801b815250601001836001600160a01b031660601b81526014018281526020019250505060405160208183030381529060405280519060200120815260200190815260200160002081905550505050565b6060600080835111806141d457506000356001600160e01b03191663d740548160e01b145b90506001600160a01b03871661468f576141fa866141f5866115328a611624565b615242565b61420386612309565b15614340578061426157604080516001600160a01b0380891660248301528716604482015260648082018790528251808303909101815260849091019091526020810180516001600160e01b031663125e4cfb60e01b179052614338565b63c534576160e01b8686868660405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156142d15781810151838201526020016142b9565b50505050905090810190601f1680156142fe5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909916989098179097525050505050505b915050614821565b600061434b87615074565b905060606143588861529d565b9050606061436589615463565b9050600082511180614378575060008151115b61438157600080fd5b836144d457632ae87cdd60e01b898383868c8c60405160240180876001600160a01b0316815260200180602001806020018660ff168152602001856001600160a01b03168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156144055781810151838201526020016143ed565b50505050905090810190601f1680156144325780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b8381101561446557818101518382015260200161444d565b50505050905090810190601f1680156144925780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909c169b909b17909a5250614684975050505050505050565b63d522cfd760e01b898383868c8c8c60405160240180886001600160a01b0316815260200180602001806020018760ff168152602001866001600160a01b031681526020018581526020018060200184810384528a818151815260200191508051906020019080838360005b83811015614558578181015183820152602001614540565b50505050905090810190601f1680156145855780820380516001836020036101000a031916815260200191505b5084810383528951815289516020918201918b019080838360005b838110156145b85781810151838201526020016145a0565b50505050905090810190601f1680156145e55780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015614618578181015183820152602001614600565b50505050905090810190601f1680156146455780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909e169d909d17909c5250505050505050505050505b945050505050614821565b856001600160a01b03166342966c68856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146d557600080fd5b505af11580156146e9573d6000803e3d6000fd5b505050508061474657604080516001600160a01b03808a1660248301528716604482015260648082018790528251808303909101815260849091019091526020810180516001600160e01b031663272255bb60e01b17905261481d565b63867f7a4d60e01b8786868660405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156147b657818101518382015260200161479e565b50505050905090810190601f1680156147e35780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909916989098179097525050505050505b9150505b95945050505050565b6148348484615596565b61483e8483615602565b6148488482615672565b83826001600160a01b0316846001600160a01b03167f59a9a8027b9c87b961e254899821c9a276b5efc35d1f7409ea4f291470f1629a846040518082815260200191505060405180910390a450505050565b7f6168652c307c1e813ca11cfb3a601f1cf3b22452021a5052d8b05f1f1f8a3e9255565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526115c19085906149af565b600081848411156149a75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561496c578181015183820152602001614954565b50505050905090810190601f1680156149995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6060614a04826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166156c19092919063ffffffff16565b8051909150156116b057808060200190516020811015614a2357600080fd5b50516116b05760405162461bcd60e51b815260040180806020018281038252602a815260200180615b61602a913960400191505060405180910390fd5b8415614c16576000614a7185611624565b90506001600160a01b038516730ae055097c6d159879521c384f1d2123d1f195e6148015614a9e57508281105b15614abc57614ab96001600160a01b03861630838603612fb0565b50815b6000614ac786611e27565b90506001600160a01b03811615614bed576000614b5d826001600160a01b031663cff77444896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614b2a57600080fd5b505afa158015614b3e573d6000803e3d6000fd5b505050506040513d6020811015614b5457600080fd5b50518490612c70565b905080851115614beb57816001600160a01b031663f3fef3a388614b8c614b838b611b10565b858a0390613137565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015614bd257600080fd5b505af1158015614be6573d6000803e3d6000fd5b505050505b505b614bfb866141f58486612c70565b614c0f6001600160a01b0387168686612cb9565b505061214c565b61214c8383614c24876156d0565b6001600160a01b03169190612fb0565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614129575050151592915050565b614c7b81611532858561297b565b6000808585604051602001808072746f74616c457865637574656450657244617960681b815250601301836001600160a01b031660601b81526014018281526020019250505060405160208183030381529060405280519060200120815260200190815260200160002081905550505050565b6000614cf861241d565b6001600160a01b031663669f618b6040518163ffffffff1660e01b815260040160206040518083038186803b158015614d3057600080fd5b505afa158015614d44573d6000803e3d6000fd5b505050506040513d6020811015614d5a57600080fd5b5051905090565b606080827f00000000000000000000000000000000000000000000000000000000000000006040516020018083805190602001908083835b60208310614db85780518252601f199092019160209182019101614d99565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529390910190525093517f0000000000000000000000000000000000000000000000000000000000000000018452509192915050565b60006012821015614f0a5781601203600a0a90506000614e4082614e3a600061215d565b906156d3565b90506000614e5283614e3a60006111ee565b90506000614e6484614e3a6000612a06565b90506000614e7685614e3a60006115c7565b90506000614e8886614e3a6000611aa6565b905084614ebe5760019450848411614ebe5760649350606491508383111580614eb15750818111155b15614ebe57506127109150815b614ee2886040518060600160405280868152602001878152602001888152506136a2565b614f00886040518060400160405280848152602001858152506137f6565b50505050506116b0565b60128203600a0a9050614f63836040518060600160405280614f3685614f306000612a06565b90615715565b8152602001614f4985614f3060006111ee565b8152602001614f5c85614f30600061215d565b90526136a2565b6116b0836040518060400160405280614f8085614f306000611aa6565b8152602001614f9385614f3060006115c7565b90526137f6565b6000614fa461241d565b6001600160a01b031663e5789d036040518163ffffffff1660e01b815260040160206040518083038186803b158015614d3057600080fd5b4761114b828261576e565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561503257600080fd5b505afa158015615046573d6000803e3d6000fd5b505050506040513d602081101561505c57600080fd5b505190506115c16001600160a01b0383168483612cb9565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1781529151815160009384936060936001600160a01b03881693919290918291908083835b602083106150dd5780518252601f1990920191602091820191016150be565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461513d576040519150601f19603f3d011682016040523d82523d6000602084013e615142565b606091505b5091509150816152235760408051600481526024810182526020810180516001600160e01b0316632e0f262560e01b178152915181516001600160a01b0388169382918083835b602083106151a85780518252601f199092019160209182019101615189565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114615208576040519150601f19603f3d011682016040523d82523d6000602084013e61520d565b606091505b5090925090508161522357600092505050611241565b80806020019051602081101561523857600080fd5b5051949350505050565b604080516e6d65646961746f7242616c616e636560881b60208083019190915260609490941b6001600160601b031916602f820152815180820360230181526043909101825280519084012060009081529283905290912055565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b1781529151815160609360009385936001600160a01b03881693919290918291908083835b602083106153065780518252601f1990920191602091820191016152e7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114615366576040519150601f19603f3d011682016040523d82523d6000602084013e61536b565b606091505b50915091508161545a5760408051600481526024810182526020810180516001600160e01b03166351fa6fbf60e11b178152915181516001600160a01b0388169382918083835b602083106153d15780518252601f1990920191602091820191016153b2565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114615431576040519150601f19603f3d011682016040523d82523d6000602084013e615436565b606091505b5090925090508161545a576040518060200160405280600081525092505050611241565b614129816157d3565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1781529151815160609360009385936001600160a01b03881693919290918291908083835b602083106154cc5780518252601f1990920191602091820191016154ad565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461552c576040519150601f19603f3d011682016040523d82523d6000602084013e615531565b606091505b50915091508161545a5760408051600481526024810182526020810180516001600160e01b0316631eedf1af60e31b178152915181516001600160a01b038816938291808383602083106153d15780518252601f1990920191602091820191016153b2565b604080516b36b2b9b9b0b3b2aa37b5b2b760a11b602080830191909152602c8083019590955282518083039095018552604c90910182528351938101939093206000908152600290935290912080546001600160a01b0319166001600160a01b03909216919091179055565b604080516f1b595cdcd859d9549958da5c1a595b9d60821b60208083019190915260308083019590955282518083039095018552605090910182528351938101939093206000908152600290935290912080546001600160a01b0319166001600160a01b03909216919091179055565b604080516b6d65737361676556616c756560a01b602080830191909152602c8083019590955282518083039095018552604c909101825283519381019390932060009081529283905290912055565b6060614129848460008561592f565b90565b6000612cb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615a9c565b60008261572457506000611587565b8282028284828161573157fe5b0414612cb25760405162461bcd60e51b8152600401808060200182810382526021815260200180615b406021913960400191505060405180910390fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505061114b5780826040516157a590615b01565b6001600160a01b039091168152604051908190036020019082f09050801580156115c1573d6000803e3d6000fd5b60606020825111156158a9578180602001905160208110156157f457600080fd5b8101908080516040519392919084600160201b82111561581357600080fd5b90830190602082018581111561582857600080fd5b8251600160201b81118282018810171561584157600080fd5b82525081516020918201929091019080838360005b8381101561586e578181015183820152602001615856565b50505050905090810190601f16801561589b5780820380516001836020036101000a031916815260200191505b506040525050509050611241565b81516020141561591a5760008280602001905160208110156158ca57600080fd5b50516040805160208082528183019092529192506060919060208201818036833701905050905060008260208301525b821561590f5760089290921b916001016158fa565b815291506112419050565b50604080516020810190915260008152611241565b606061593a85614c34565b61598b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106159ca5780518252601f1990920191602091820191016159ab565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615a2c576040519150601f19603f3d011682016040523d82523d6000602084013e615a31565b606091505b50915091508115615a455791506141299050565b805115615a555780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561496c578181015183820152602001614954565b60008183615aeb5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561496c578181015183820152602001614954565b506000838581615af757fe5b0495945050505050565b603280615b0e8339019056fe60806040526040516032380380603283398181016040526020811015602357600080fd5b50516001600160a01b038116fffe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220274caa5a6a0c729be67fdcf4620871c021af258e3a717eac25b66f36cb17ee4964736f6c634300070500330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a2066726f6d207844616900000000000000000000000000000000000000000000