[ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" } ], "name": "DrainWrongToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "token0FeePercent", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "token1FeePercent", "type": "uint16" } ], "name": "FeePercentUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SetPairTypeImmutable", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "prevStableSwap", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "stableSwap", "type": "bool" } ], "name": "SetStableSwap", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Skim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "constant": true, "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "FEE_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_FEE_PERCENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "drainWrongToken", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint16", "name": "_token0FeePercent", "type": "uint16" }, { "internalType": "uint16", "name": "_token1FeePercent", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "pairTypeImmutable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "precisionMultiplier0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "precisionMultiplier1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint16", "name": "newToken0FeePercent", "type": "uint16" }, { "internalType": "uint16", "name": "newToken1FeePercent", "type": "uint16" } ], "name": "setFeePercent", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "setPairTypeImmutable", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bool", "name": "stable", "type": "bool" }, { "internalType": "uint112", "name": "expectedReserve0", "type": "uint112" }, { "internalType": "uint112", "name": "expectedReserve1", "type": "uint112" } ], "name": "setStableSwap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "stableSwap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "swap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "sync", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token0FeePercent", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1FeePercent", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" } ]
60806040526008805461ffff60e01b1916607d60e11b176001600160f01b0316607d60f11b1790556001600d5534801561003857600080fd5b506040514690806052613c178239604080519182900360520182208282018252600a83526904369746164656c204c560b41b6020938401528151808301835260018152603160f81b908401528151808401919091527f187218a920880e9e244af672fc892b946c93ab497b605f1e22eeefe59848dcf8818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055613aef806101286000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80636a6278421161013b578063ba9a7a56116100b8578063d73792a91161007c578063d73792a914610775578063dd62ed3e1461077d578063f140a35a146107ab578063f39ac11f146107d7578063fff6cae91461080557610248565b8063ba9a7a56146106e6578063bc25cf77146106ee578063c45a015514610714578063d21220a71461071c578063d505accf1461072457610248565b806389afcb44116100ff57806389afcb441461066357806395d89b41146106a25780639e548b7f146106aa578063a9059cbb146106b2578063b6200b07146106de57610248565b80636a627842146105545780636e1fdd7f1461057a57806370a082311461060f5780637464fc3d146106355780637ecebe001461063d57610248565b80633029e5d4116101c95780633ba170771161018d5780633ba17077146104e5578063485cc955146104ed57806348e5d2601461051b57806362ecec031461054457806367d817401461054c57610248565b80633029e5d41461047957806330adf81f146104af578063313ce567146104b75780633644e515146104d55780633b9f1dc0146104dd57610248565b8063158ef93e11610210578063158ef93e146103fa57806318160ddd1461040257806323b872dd1461041c578063288e5d02146104525780632fcd16921461045a57610248565b8063022c0d9f1461024d57806306fdde03146102db5780630902f1ac14610358578063095ea7b3146103965780630dfe1681146103d6575b600080fd5b6102d96004803603608081101561026357600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b50909250905061080d565b005b6102e36108ae565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031d578181015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103606108d4565b604080516001600160701b03958616815293909416602084015261ffff9182168385015216606082015290519081900360800190f35b6103c2600480360360408110156103ac57600080fd5b506001600160a01b038135169060200135610907565b604080519115158252519081900360200190f35b6103de61091e565b604080516001600160a01b039092168252519081900360200190f35b6103c261092d565b61040a61093d565b60408051918252519081900360200190f35b6103c26004803603606081101561043257600080fd5b506001600160a01b03813581169160208101359091169060400135610943565b61040a610a1a565b610462610a20565b6040805161ffff9092168252519081900360200190f35b6102d96004803603606081101561048f57600080fd5b5080351515906001600160701b0360208201358116916040013516610a31565b61040a610d15565b6104bf610d39565b6040805160ff9092168252519081900360200190f35b61040a610d3e565b61040a610d44565b6102d9610d4a565b6102d96004803603604081101561050357600080fd5b506001600160a01b0381358116916020013516610ee7565b6102d96004803603604081101561053157600080fd5b5061ffff8135811691602001351661107b565b6104626112a0565b61040a6112b1565b61040a6004803603602081101561056a57600080fd5b50356001600160a01b03166112b7565b6102d9600480360360a081101561059057600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460018302840111640100000000831117156105fb57600080fd5b9193509150356001600160a01b03166115b6565b61040a6004803603602081101561062557600080fd5b50356001600160a01b031661165a565b61040a61166c565b61040a6004803603602081101561065357600080fd5b50356001600160a01b0316611672565b6106896004803603602081101561067957600080fd5b50356001600160a01b0316611684565b6040805192835260208301919091528051918290030190f35b6102e3611a1d565b6103c2611a40565b6103c2600480360360408110156106c857600080fd5b506001600160a01b038135169060200135611a49565b6103c2611a56565b61040a611a64565b6102d96004803603602081101561070457600080fd5b50356001600160a01b0316611a6a565b6103de611bf8565b6103de611c07565b6102d9600480360360e081101561073a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c16565b61040a611e18565b61040a6004803603604081101561079357600080fd5b506001600160a01b0381358116916020013516611e1f565b61040a600480360360408110156107c157600080fd5b50803590602001356001600160a01b0316611e3c565b6102d9600480360360408110156107ed57600080fd5b506001600160a01b0381358116916020013516611eac565b6102d9612100565b61081561387a565b5060408051610100810182526006546001600160a01b039081168252600754166020808301919091528183018890526060820187905260006080830181905260a0830181905260c0830181905260e08301528251601f850182900482028101820190935283835290916108a6918391879187908790819084018382808284376000920182905250925061229e915050565b505050505050565b6040518060400160405280600a81526020016904369746164656c204c560b41b81525081565b6008546001600160701b0380821692600160701b83049091169161ffff600160e01b8204811692600160f01b9092041690565b6000610914338484612c57565b5060015b92915050565b6006546001600160a01b031681565b600754600160a01b900460ff1681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610a04576001600160a01b03841660009081526002602090815260408083203384529091528120546109a3908463ffffffff612cb916565b6001600160a01b038616600081815260026020908152604080832033808552908352928190208590558051858152905194955091937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505b610a0f848484612d09565b5060015b9392505050565b600a5481565b600854600160f01b900461ffff1681565b600d54600114610a76576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d5560055460408051637e1c813560e11b815290516001600160a01b039092169163fc39026a91600480820192602092909190829003018186803b158015610ac057600080fd5b505afa158015610ad4573d6000803e3d6000fd5b505050506040513d6020811015610aea57600080fd5b50516001600160a01b03163314610b325760405162461bcd60e51b815260040180806020018281038252602a8152602001806139c1602a913960400191505060405180910390fd5b600c54610100900460ff1615610b88576040805162461bcd60e51b81526020600482015260166024820152754369746164656c506169723a20696d6d757461626c6560501b604482015290519081900360640190fd5b600c5460ff1615158315151415610bdf576040805162461bcd60e51b81526020600482015260166024820152754369746164656c506169723a206e6f2075706461746560501b604482015290519081900360640190fd5b6008546001600160701b038381169116148015610c1057506008546001600160701b03828116600160701b90920416145b610c57576040805162461bcd60e51b815260206004820152601360248201527210da5d1859195b14185a5c8e8819985a5b1959606a1b604482015290519081900360640190fd5b600854600090610c7a906001600160701b0380821691600160701b900416612dc3565b600c546040805160ff90921615158252861515602083015280519293507fb6a86710bde53aa7fb1b3856279e2af5b476d53e2dd0902cf17a0911b5a43a8b92918290030190a1600c805460ff191685158015919091179091558490610cdc5750805b610ce7576000610d07565b600854610d07906001600160701b0380821691600160701b900416612f7c565b600b5550506001600d555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60095481565b600d54600114610d8f576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d5560055460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b158015610dd957600080fd5b505afa158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b50516001600160a01b03163314610e4b5760405162461bcd60e51b8152600401808060200182810382526021815260200180613a9a6021913960400191505060405180910390fd5b600c54610100900460ff1615610ea8576040805162461bcd60e51b815260206004820152601e60248201527f4369746164656c506169723a20616c726561647920696d6d757461626c650000604482015290519081900360640190fd5b600c805461ff0019166101001790556040517f09122c41ae733a4d7740324d50e35fbd6ee85be3c1312a45596d8045150ab2f290600090a16001600d55565b6005546001600160a01b031633148015610f0b5750600754600160a01b900460ff16155b610f55576040805162461bcd60e51b815260206004820152601660248201527521b4ba30b232b62830b4b91d102327a92124a22222a760511b604482015290519081900360640190fd5b600680546001600160a01b038085166001600160a01b0319928316811790935560078054918516919092161790556040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b158015610fb957600080fd5b505afa158015610fcd573d6000803e3d6000fd5b505050506040513d6020811015610fe357600080fd5b505160ff16600a0a6009556040805163313ce56760e01b815290516001600160a01b0383169163313ce567916004808301926020929190829003018186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d602081101561105857600080fd5b505160ff16600a90810a905550506007805460ff60a01b1916600160a01b179055565b600d546001146110c0576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d5560055460408051634c21771560e01b815290516001600160a01b0390921691634c21771591600480820192602092909190829003018186803b15801561110a57600080fd5b505afa15801561111e573d6000803e3d6000fd5b505050506040513d602081101561113457600080fd5b50516001600160a01b0316331461117c5760405162461bcd60e51b815260040180806020018281038252602a8152602001806138f8602a913960400191505060405180910390fd5b6107d08261ffff161115801561119857506107d08161ffff1611155b6111d35760405162461bcd60e51b8152600401808060200182810382526032815260200180613a416032913960400191505060405180910390fd5b60008261ffff161180156111eb575060008161ffff16115b6112265760405162461bcd60e51b815260040180806020018281038252603281526020018061394c6032913960400191505060405180910390fd5b6008805461ffff60e01b1916600160e01b61ffff858116918202929092176001600160f01b0316600160f01b9285169283021790925560408051928352602083019190915280517fa4877b8ecb5a00ba277e4bceeeb187a669e7113649774dfbea05c259ce27f17b9281900390910190a150506001600d55565b600854600160e01b900461ffff1681565b6107d081565b6000600d546001146112fe576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d8190558061130e6108d4565b5050600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561136357600080fd5b505afa158015611377573d6000803e3d6000fd5b505050506040513d602081101561138d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156113e057600080fd5b505afa1580156113f4573d6000803e3d6000fd5b505050506040513d602081101561140a57600080fd5b505190506000611429836001600160701b03871663ffffffff612cb916565b90506000611446836001600160701b03871663ffffffff612cb916565b905060006114548787612dc3565b6000549091508061149d576114896103e861147d611478878763ffffffff61309216565b6130f5565b9063ffffffff612cb916565b985061149860006103e8613147565b6114ec565b6114e96001600160701b0389166114ba868463ffffffff61309216565b816114c157fe5b046001600160701b0389166114dc868563ffffffff61309216565b816114e357fe5b046131dd565b98505b6000891161152b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613a17602a913960400191505060405180910390fd5b6115358a8a613147565b61153f86866131f3565b811561156957600854611565906001600160701b0380821691600160701b900416612f7c565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b6115be61387a565b5060408051610100810182526006546001600160a01b039081168252600754166020808301919091528183018990526060820188905260006080830181905260a0830181905260c0830181905260e08301528251601f860182900482028101820190935284835290916116519183918891889088908190840183828082843760009201919091525088925061229e915050565b50505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600d546001146116cc576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d819055806116dc6108d4565b5050600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561173957600080fd5b505afa15801561174d573d6000803e3d6000fd5b505050506040513d602081101561176357600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156117b157600080fd5b505afa1580156117c5573d6000803e3d6000fd5b505050506040513d60208110156117db57600080fd5b5051306000908152600160205260408120549192506117fa8888612dc3565b60005490915080611811848763ffffffff61309216565b8161181857fe5b049a508061182c848663ffffffff61309216565b8161183357fe5b04995060008b118015611846575060008a115b6118815760405162461bcd60e51b815260040180806020018281038252602a815260200180613922602a913960400191505060405180910390fd5b61188b30846132e0565b611896878d8d61337e565b6118a1868d8c61337e565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156118e757600080fd5b505afa1580156118fb573d6000803e3d6000fd5b505050506040513d602081101561191157600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561195d57600080fd5b505afa158015611971573d6000803e3d6000fd5b505050506040513d602081101561198757600080fd5b5051935061199585856131f3565b81156119bf576008546119bb906001600160701b0380821691600160701b900416612f7c565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b604051806040016040528060078152602001660464f52542d4c560cc1b81525081565b600c5460ff1681565b6000610914338484612d09565b600c54610100900460ff1681565b6103e881565b600d54600114611aaf576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611b5e9285928792611b59926001600160701b03169185916370a0823191602480820192602092909190829003018186803b158015611b2157600080fd5b505afa158015611b35573d6000803e3d6000fd5b505050506040513d6020811015611b4b57600080fd5b50519063ffffffff612cb916565b61337e565b600854604080516370a0823160e01b81523060048201529051611bc59284928792611b5992600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611b2157600080fd5b6040517f21ad22495c9c75cd1c94756f91824e779c0c8a8e168b267c790df464fe056b7990600090a150506001600d5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611c60576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611d7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611db15750886001600160a01b0316816001600160a01b0316145b611e02576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611e0d898989612c57565b505050505050505050565b620186a081565b600260209081526000928352604080842090915290825290205481565b60065460009081906001600160a01b03848116911614611e6957600854600160f01b900461ffff16611e78565b600854600160e01b900461ffff165b600854909150611ea490859085906001600160701b0380821691600160701b90041661ffff8616613518565b949350505050565b600d54600114611ef1576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d5560055460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b158015611f3b57600080fd5b505afa158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b50516001600160a01b03163314611fad5760405162461bcd60e51b8152600401808060200182810382526021815260200180613a9a6021913960400191505060405180910390fd5b6006546001600160a01b03838116911614801590611fd957506007546001600160a01b03838116911614155b61202a576040805162461bcd60e51b815260206004820152601a60248201527f4369746164656c506169723a20696e76616c696420746f6b656e000000000000604482015290519081900360640190fd5b6120b68282846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b505161337e565b604080516001600160a01b0383811682529151918416917f368a9dc863ecb94b5ba32a682e26295b10d9c2666fad7d785ebdf262c3c524139181900360200190a250506001600d55565b600d54600114612145576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d819055600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561219757600080fd5b505afa1580156121ab573d6000803e3d6000fd5b505050506040513d60208110156121c157600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561221457600080fd5b505afa158015612228573d6000803e3d6000fd5b505050506040513d602081101561223e57600080fd5b50519050811580159061225057508015155b61228b5760405162461bcd60e51b815260040180806020018281038252602c8152602001806139eb602c913960400191505060405180910390fd5b61229582826131f3565b50506001600d55565b600d546001146122e3576040805162461bcd60e51b8152602060048201526013602482015260008051602061397e833981519152604482015290519081900360640190fd5b6000600d5560408401511515806122fe575060008460600151115b6123395760405162461bcd60e51b8152600401808060200182810382526027815260200180613a736027913960400191505060405180910390fd5b6000806000806123476108d4565b9350935093509350836001600160701b031688604001511080156123775750826001600160701b03168860600151105b6123b25760405162461bcd60e51b815260040180806020018281038252602381526020018061399e6023913960400191505060405180910390fd5b87516001600160a01b038881169116148015906123e5575087602001516001600160a01b0316876001600160a01b031614155b612436576040805162461bcd60e51b815260206004820152601760248201527f4369746164656c506169723a20494e56414c49445f544f000000000000000000604482015290519081900360640190fd5b604088015115612453576124538860000151888a6040015161337e565b606088015115612470576124708860200151888a6060015161337e565b85511561256a57866001600160a01b03166310d1e85c338a604001518b606001518a6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125025781810151838201526020016124ea565b50505050905090810190601f16801561252f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561255157600080fd5b505af1158015612565573d6000803e3d6000fd5b505050505b8751604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b50516080890152602088810151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561262d57600080fd5b505afa158015612641573d6000803e3d6000fd5b505050506040513d602081101561265757600080fd5b505160a0890152604088015160808901516000916001600160701b0387160310612682576000612699565b8860400151856001600160701b0316038960800151035b905060008960600151856001600160701b0316038a60a00151116126be5760006126d5565b8960600151856001600160701b0316038a60a00151035b905060008211806126e65750600081115b6127215760405162461bcd60e51b81526004018080602001828103825260268152602001806138d26026913960400191505060405180910390fd5b620186a06127398361ffff871663ffffffff61309216565b8161274057fe5b0460c08b0152620186a061275e8261ffff861663ffffffff61309216565b8161276557fe5b0460e08b01526000806001600160a01b0389166127835760006127fd565b60055460408051631c60f51f60e21b81526001600160a01b038c8116600483015291519190921691637183d47c916024808301926020929190829003018186803b1580156127d057600080fd5b505afa1580156127e4573d6000803e3d6000fd5b505050506040513d60208110156127fa57600080fd5b50515b905080156128c2578315612868576402540be40061283561ffff8816612829878563ffffffff61309216565b9063ffffffff61309216565b8161283c57fe5b049150612856828d60c00151612cb990919063ffffffff16565b60c08d01528b51612868908a8461337e565b82156128c2576402540be40061288c61ffff8716612829868563ffffffff61309216565b8161289357fe5b0491506128ad828d60e00151612cb990919063ffffffff16565b60e08d015260208c01516128c2908a8461337e565b600c5460ff1615612a2a5760055460408051634cadad5760e11b8152815160009384936001600160a01b039091169263995b5aae9260048083019392829003018186803b15801561291257600080fd5b505afa158015612926573d6000803e3d6000fd5b505050506040513d604081101561293c57600080fd5b50805160209091015190925090506001600160a01b03811615612a275761297082612829620186a08663ffffffff612cb916565b915085156129cb5766038d7ea4c6800061299861ffff8a16612829898663ffffffff61309216565b8161299f57fe5b0493506129b9848f60c00151612cb990919063ffffffff16565b60c08f01528d516129cb90828661337e565b8415612a275766038d7ea4c680006129f161ffff8916612829888663ffffffff61309216565b816129f857fe5b049350612a12848f60e00151612cb990919063ffffffff16565b60e08f015260208e0151612a2790828661337e565b50505b8315612aac578b51604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b505160808d01525b8215612b2c576020808d0151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b505160a08d01525b50506000612b4b8b60c001518c60800151612cb990919063ffffffff16565b90506000612b6a8c60e001518d60a00151612cb990919063ffffffff16565b9050612b88886001600160701b0316886001600160701b0316612f7c565b612b928383612f7c565b1015612bd6576040805162461bcd60e51b815260206004820152600e60248201526d4369746164656c506169723a204b60901b604482015290519081900360640190fd5b5050612bea8a608001518b60a001516131f3565b6040808b01516060808d0151835186815260208101869052808501939093529082015290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d555050505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b80820382811115610918576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054612d32908263ffffffff612cb916565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d67908263ffffffff6136e616565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600c5460009060ff1615612dd957506000610918565b60055460408051634cadad5760e11b8152815160009384936001600160a01b039091169263995b5aae9260048083019392829003018186803b158015612e1e57600080fd5b505afa158015612e32573d6000803e3d6000fd5b505050506040513d6040811015612e4857600080fd5b508051602090910151600b546001600160a01b038216158015965092945090925090612f67578015612f62576000612e95611478886001600160701b0316886001600160701b0316612f7c565b90506000612ea2836130f5565b905080821115612f5f576000612edb606487612ec7620186a08363ffffffff61309216565b81612ece57fe5b049063ffffffff612cb916565b90506000612f066064612829612ef7878763ffffffff612cb916565b6000549063ffffffff61309216565b90506000612f3a612f1e85606463ffffffff61309216565b612f2e878663ffffffff61309216565b9063ffffffff6136e616565b90506000818381612f4757fe5b0490508015612f5a57612f5a8882613147565b505050505b50505b612f73565b8015612f73576000600b555b50505092915050565b600c5460009060ff161561308257600954600090612fa885670de0b6b3a764000063ffffffff61309216565b81612faf57fe5b0490506000600a54612fd2670de0b6b3a76400008661309290919063ffffffff16565b81612fd957fe5b0490506000670de0b6b3a7640000612ff7848463ffffffff61309216565b81612ffe57fe5b0490506000613054670de0b6b3a764000061301f858063ffffffff61309216565b8161302657fe5b04670de0b6b3a7640000613040878063ffffffff61309216565b8161304757fe5b049063ffffffff6136e616565b9050670de0b6b3a764000061306f838363ffffffff61309216565b8161307657fe5b04945050505050610918565b610a13838363ffffffff61309216565b60008115806130ad575050808202828282816130aa57fe5b04145b610918576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b60006003821115613138575080600160028204015b818110156131325780915060028182858161312157fe5b04018161312a57fe5b04905061310a565b50613142565b8115613142575060015b919050565b60005461315a908263ffffffff6136e616565b60009081556001600160a01b038316815260016020526040902054613185908263ffffffff6136e616565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106131ec5781610a13565b5090919050565b6001600160701b03821180159061321157506001600160701b038111155b61325a576040805162461bcd60e51b81526020600482015260156024820152744369746164656c506169723a204f564552464c4f5760581b604482015290519081900360640190fd5b600880546dffffffffffffffffffffffffffff19166001600160701b038481169182176dffffffffffffffffffffffffffff60701b1916600160701b9185169182021790925560408051918252602082019290925281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a15050565b6001600160a01b038216600090815260016020526040902054613309908263ffffffff612cb916565b6001600160a01b03831660009081526001602052604081209190915554613336908263ffffffff612cb916565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061342b5780518252601f19909201916020918201910161340c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461348d576040519150601f19603f3d011682016040523d82523d6000602084013e613492565b606091505b50915091508180156134c05750805115806134c057508080602001905160208110156134bd57600080fd5b50515b613511576040805162461bcd60e51b815260206004820152601c60248201527f4369746164656c506169723a205452414e534645525f4641494c454400000000604482015290519081900360640190fd5b5050505050565b600c5460009060ff161561365b57613553620186a061353d888563ffffffff61309216565b8161354457fe5b8891900463ffffffff612cb916565b955060006135618585612f7c565b905060095485670de0b6b3a7640000028161357857fe5b049450600a5484670de0b6b3a7640000028161359057fe5b600654919004945060009081906001600160a01b038981169116146135b65785876135b9565b86865b60065491935091506001600160a01b038981169116146135ee57600a5489670de0b6b3a764000002816135e857fe5b04613605565b60095489670de0b6b3a7640000028161360357fe5b045b98506000613616838b018584613735565b6006549083039150670de0b6b3a7640000906001600160a01b038b811691161461364257600954613646565b600a545b82028161364f57fe5b049450505050506136dd565b60065460009081906001600160a01b0388811691161461367c57848661367f565b85855b90925090506136a761369a620186a08663ffffffff612cb916565b899063ffffffff61309216565b97506136c088612f2e84620186a063ffffffff61309216565b6136d0898363ffffffff61309216565b816136d757fe5b04925050505b95945050505050565b80820182811015610918576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000805b60ff8110156137ed5782600061374f87836137f6565b9050858110156137855760006137658887613846565b828803670de0b6b3a7640000028161377957fe5b049590950194506137ac565b60006137918887613846565b878303670de0b6b3a764000002816137a557fe5b0490950394505b818511156137ce576001828603116137c957849350505050610a13565b6137e3565b6001858303116137e357849350505050610a13565b5050600101613739565b50909392505050565b6000670de0b6b3a76400008281858181800204028161381157fe5b04028161381a57fe5b04670de0b6b3a764000080848181800204028161383357fe5b0485028161383d57fe5b04019392505050565b6000670de0b6b3a7640000838181800204028161385f57fe5b04670de0b6b3a7640000808480020485600302028161383d57fe5b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe4369746164656c506169723a20494e53554646494349454e545f494e5055545f414d4f554e544369746164656c506169723a206f6e6c7920666163746f7279277320666565416d6f756e744f776e65724369746164656c506169723a20494e53554646494349454e545f4c49515549444954595f4255524e45444369746164656c506169723a2066656550657263656e74206d7573746e27742065786365656420746865206d696e696d756d4369746164656c506169723a204c4f434b4544000000000000000000000000004369746164656c506169723a20494e53554646494349454e545f4c49515549444954594369746164656c506169723a206f6e6c7920666163746f7279277320736574537461626c654f776e65724369746164656c506169723a206c697175696469747920726174696f206e6f7420696e697469616c697a65644369746164656c506169723a20494e53554646494349454e545f4c49515549444954595f4d494e5445444369746164656c506169723a2066656550657263656e74206d7573746e27742065786365656420746865206d6178696d756d4369746164656c506169723a20494e53554646494349454e545f4f55545055545f414d4f554e544369746164656c506169723a206f6e6c7920666163746f72792773206f776e6572a265627a7a723158205c6342ed9e59d266c382f0cbbd15b5b2e8ee6849d03a331cb6e318851020919e64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429