[ { "inputs": [], "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": "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": [ { "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" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasMinimums", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "mintFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "gasAmount", "type": "uint256" } ], "name": "mustBurn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "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": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint112", "name": "minimumAmount", "type": "uint112" } ], "name": "setMinimumBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "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": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "feeAmountOverride", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapWithDiscount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gasAmountToken0", "type": "uint256" }, { "internalType": "uint256", "name": "gasAmountToken1", "type": "uint256" } ], "name": "syncSafe", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokenMinimumBalance", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "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" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint112", "name": "amount", "type": "uint112" } ], "name": "withdrawTokensAgainstMinimumBalance", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001600e5534801561001557600080fd5b50604080518082018252600e81526d586368616e676520414d4d20563160901b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f74972fe396d9537d3a5efe1ef0ac7dd89248cbd05a7fbdb5a940874aa7336a45818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556135e28061010c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80636a62784211610145578063ba9a7a56116100bd578063d505accf1161008c578063e2507dab11610071578063e2507dab146105b5578063ed6e76e1146105c2578063fff6cae9146105d557600080fd5b8063d505accf14610577578063dd62ed3e1461058a57600080fd5b8063ba9a7a5614610537578063bc25cf7714610540578063c45a015514610553578063d21220a71461056457600080fd5b806389afcb4411610114578063a9059cbb116100f9578063a9059cbb146104e8578063a90a3a95146104fb578063ac637caa1461052457600080fd5b806389afcb441461049957806395d89b41146104ac57600080fd5b80636a6278421461043d57806370a08231146104505780637464fc3d146104705780637ecebe001461047957600080fd5b806318160ddd116101d85780633644e515116101a7578063485cc9551161018c578063485cc955146104185780635909c0d51461042b5780635a3d54931461043457600080fd5b80633644e515146103e4578063468d9c67146103ed57600080fd5b806318160ddd1461037957806323b872dd1461039057806330adf81f146103a3578063313ce567146103ca57600080fd5b80630902f1ac116102145780630902f1ac146102e8578063095ea7b3146103235780630dfe16811461034657806313966db51461037157600080fd5b8063022c0d9f14610246578063030cbb2c1461025b57806306fdde031461026e57806308f61154146102c0575b600080fd5b610259610254366004613072565b6105dd565b005b6102596102693660046130dc565b610646565b6102aa6040518060400160405280600e81526020017f586368616e676520414d4d20563100000000000000000000000000000000000081525081565b6040516102b7919061312e565b60405180910390f35b6102d36102ce366004613161565b610841565b604080519283526020830191909152016102b7565b600854604080516001600160701b038084168252600160701b8404166020820152600160e01b90920463ffffffff16908201526060016102b7565b610336610331366004613161565b610d8c565b60405190151581526020016102b7565b600654610359906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b610259610da2565b61038260005481565b6040519081526020016102b7565b61033661039e36600461318d565b610de7565b6103827f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103d2600681565b60405160ff90911681526020016102b7565b61038260035481565b6104006103fb3660046131e5565b610e7c565b6040516001600160701b0390911681526020016102b7565b61025961042636600461322c565b61104e565b61038260095481565b610382600a5481565b61038261044b366004613265565b6110e3565b61038261045e366004613265565b60016020526000908152604090205481565b610382600b5481565b610382610487366004613265565b60046020526000908152604090205481565b6102d36104a7366004613265565b6113f4565b6102aa6040518060400160405280600981526020017f58372d414d4d2d5631000000000000000000000000000000000000000000000081525081565b6103366104f6366004613161565b61188e565b610400610509366004613265565b600d602052600090815260409020546001600160701b031681565b610259610532366004613282565b61189b565b6103826103e881565b61025961054e366004613265565b6119e5565b6005546001600160a01b0316610359565b600754610359906001600160a01b031681565b6102596105853660046132c6565b611ce1565b61038261059836600461322c565b600260209081526000928352604080842090915290825290205481565b600c546103369060ff1681565b6102596105d0366004613337565b611f00565b610259611f64565b600e546001146106265760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b60448201526064015b60405180910390fd5b6000600e5561063a85858560c8868661208e565b50506001600e55505050565b600e5460011461068a5760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e556005546040516396d6487960e01b81523360048201526001600160a01b03909116906396d6487990602401602060405180830381865afa1580156106d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fb91906133aa565b61073c5760405162461bcd60e51b81526020600482015260126024820152712c31b430b733b29d102327a92124a22222a760711b604482015260640161061d565b6006546040516370a0823160e01b8152306004820152610838916001600160a01b0316906370a082319085906024016020604051808303818786fa158015610788573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107ad91906133cc565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319085906024016020604051808303818786fa1580156107f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061081c91906133cc565b6008546001600160701b0380821691600160701b9004166127e0565b50506001600e55565b600080600e546001146108885760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e55600554604051632eb8193d60e21b81523360048201526001600160a01b039091169063bae064f490602401602060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f991906133aa565b61090257600080fd5b6000806109336008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b50600654600754306000908152600160205260408120549496509294506001600160a01b03918216939116916001600160701b03808716929086169161097988886129a5565b6000549091508061098a86856133fb565b6109949190613430565b9a50806109a185856133fb565b6109ab9190613430565b995060008b1180156109bd575060008a115b610a185760405162461bcd60e51b815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201526510955493915160d21b606482015260840161061d565b610a223084612ad8565b610a2e878e8d8f612b6c565b9a50610a3c868e8c8f612b6c565b99508b15610b1e576040516370a0823160e01b81523060048201526001600160a01b038816906370a08231908e906024016020604051808303818786fa93505050508015610aa7575060408051601f3d908101601f19168201909252610aa4918101906133cc565b60015b15610aaf5794505b6040516370a0823160e01b81523060048201526001600160a01b038716906370a08231908e906024016020604051808303818786fa93505050508015610b12575060408051601f3d908101601f19168201909252610b0f918101906133cc565b60015b15610bf4579350610bf4565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8691906133cc565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf191906133cc565b93505b610c0085858b8b6127e0565b8115610c2957600854610c25906001600160701b03600160701b8204811691166133fb565b600b555b600c5460ff1615610d2e576001600160a01b0387166000908152600d60205260409020546001600160701b0316851015610cb15760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c604482015263414e434560e01b606482015260840161061d565b6001600160a01b0386166000908152600d60205260409020546001600160701b0316841015610d2e5760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c604482015263414e434560e01b606482015260840161061d565b604080518c8152602081018c90526001600160a01b038f169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600e819055509250929050565b6000610d99338484612c5d565b50600192915050565b600080610dd36008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b5091509150610de282826129a5565b505050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610e67576001600160a01b0384166000908152600260209081526040808320338452909152902054610e42908390613444565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610e72848484612cbf565b5060019392505050565b6005546040516396d6487960e01b81523360048201526000916001600160a01b0316906396d6487990602401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906133aa565b610f2a5760405162461bcd60e51b81526020600482015260126024820152712c31b430b733b29d102327a92124a22222a760711b604482015260640161061d565b6001600160a01b0384166000908152600d60205260409020546001600160701b039081169083161115610f7c576001600160a01b0384166000908152600d60205260409020546001600160701b031691505b6001600160a01b0384166000908152600d602052604081208054849290610fad9084906001600160701b031661345b565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550610fe58484846001600160701b0316612d67565b6006546001600160a01b03166000908152600d60205260409020546001600160701b031615801561103757506007546001600160a01b03166000908152600d60205260409020546001600160701b0316155b1561104757600c805460ff191690555b5092915050565b6005546001600160a01b0316331461109d5760405162461bcd60e51b81526020600482015260126024820152712c31b430b733b29d102327a92124a22222a760711b604482015260640161061d565b600680546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b6000600e546001146111295760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e819055600854600654604080516370a0823160e01b815230600482015290516001600160701b0380851695600160701b9095041693926001600160a01b0316916370a082319160248083019260209291908290030181865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb91906133cc565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d91906133cc565b905060006112446001600160701b03861684613444565b9050600061125b6001600160701b03861684613444565b9050600061126987876129a5565b600080549192508190036112aa576103e861128c61128785876133fb565b612eb2565b6112969190613444565b98506112a560006103e8612f22565b6112f1565b6112ee6001600160701b0389166112c183876133fb565b6112cb9190613430565b6001600160701b0389166112df84876133fb565b6112e99190613430565b612fa7565b98505b600089116113675760405162461bcd60e51b815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201527f4d494e5445440000000000000000000000000000000000000000000000000000606482015260840161061d565b6113718a8a612f22565b61137d86868a8a6127e0565b81156113a6576008546113a2906001600160701b03600160701b8204811691166133fb565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600e5550949695505050505050565b600080600e5460011461143b5760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e819055600854600654600754604080516370a0823160e01b815230600482015290516001600160701b0380861696600160701b90960416946001600160a01b0394851694909316929184916370a08231916024808201926020929091908290030181865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d991906133cc565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154791906133cc565b3060009081526001602052604081205491925061156488886129a5565b6000549091508061157586856133fb565b61157f9190613430565b9a508061158c85856133fb565b6115969190613430565b995060008b1180156115a8575060008a115b6116035760405162461bcd60e51b815260206004820152602660248201527f586368616e67653a20494e53554646494349454e545f4c49515549444954595f60448201526510955493915160d21b606482015260840161061d565b61160d3084612ad8565b611618878d8d612d67565b611623868d8c612d67565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b91906133cc565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f691906133cc565b935061170485858b8b6127e0565b811561172d57600854611729906001600160701b03600160701b8204811691166133fb565b600b555b600c5460ff1615611832576001600160a01b0387166000908152600d60205260409020546001600160701b03168510156117b55760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c604482015263414e434560e01b606482015260840161061d565b6001600160a01b0386166000908152600d60205260409020546001600160701b03168410156118325760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c604482015263414e434560e01b606482015260840161061d565b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600e81905550915091565b6000610d99338484612cbf565b6005546040516396d6487960e01b81523360048201526001600160a01b03909116906396d6487990602401602060405180830381865afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190791906133aa565b6119485760405162461bcd60e51b81526020600482015260126024820152712c31b430b733b29d102327a92124a22222a760711b604482015260640161061d565b6001600160a01b038281166000908152600d602052604080822080546dffffffffffffffffffffffffffff19166001600160701b03868116919091179091556006549093168252902054161580156119c157506007546001600160a01b03166000908152600d60205260409020546001600160701b0316155b156119d457600c805460ff191690555050565b600c805460ff191660011790555050565b600e54600114611a295760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e556006546007546008546040516370a0823160e01b81523060048201526001600160a01b039384169390921691611ac891849186916001600160701b03169083906370a08231906024015b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab991906133cc565b611ac39190613444565b612d67565b6008546040516370a0823160e01b8152306004820152611b109183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190602401611a78565b600c5460ff1615611cd7576001600160a01b0382166000818152600d6020526040908190205490516370a0823160e01b81523060048201526001600160701b0390911691906370a0823190602401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f91906133cc565b1015611bf95760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c604482015263414e434560e01b606482015260840161061d565b6001600160a01b0381166000818152600d6020526040908190205490516370a0823160e01b81523060048201526001600160701b0390911691906370a0823190602401602060405180830381865afa158015611c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7d91906133cc565b1015611cd75760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c604482015263414e434560e01b606482015260840161061d565b50506001600e5550565b42841015611d315760405162461bcd60e51b815260206004820152601060248201527f586368616e67653a204558504952454400000000000000000000000000000000604482015260640161061d565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611d8483613483565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001611dfd92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611e68573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611e9e5750886001600160a01b0316816001600160a01b0316145b611eea5760405162461bcd60e51b815260206004820152601a60248201527f586368616e67653a20494e56414c49445f5349474e4154555245000000000000604482015260640161061d565b611ef5898989612c5d565b505050505050505050565b600e54600114611f445760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e55611f5786868686868661208e565b50506001600e5550505050565b600e54600114611fa85760405162461bcd60e51b815260206004820152600f60248201526e1618da185b99d94e881313d0d2d151608a1b604482015260640161061d565b6000600e556006546040516370a0823160e01b8152306004820152612087916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201b91906133cc565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612063573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c91906133cc565b6001600e55565b600086118061209d5750600085115b6120f55760405162461bcd60e51b815260206004820152602360248201527f586368616e67653a20494e53554646494349454e545f4f55545055545f414d4f60448201526215539560ea1b606482015260840161061d565b6000806121266008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b5091509150816001600160701b03168810801561214b5750806001600160701b031687105b6121975760405162461bcd60e51b815260206004820152601f60248201527f586368616e67653a20494e53554646494349454e545f4c495155494449545900604482015260640161061d565b61219f612ff3565b6006546007546001600160a01b0391821691168a156121c3576121c3828a8d612d67565b89156121d4576121d4818a8c612d67565b8515612241576040516304347a1760e21b81526001600160a01b038a16906310d1e85c9061220e9033908f908f908d908d9060040161349c565b600060405180830381600087803b15801561222857600080fd5b505af115801561223c573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a991906133cc565b83526040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231391906133cc565b6020840152600c5460ff1615612427576001600160a01b0382166000908152600d602052604090205483516001600160701b0390911611156123a35760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e305f42414c604482015263414e434560e01b606482015260840161061d565b6001600160a01b0381166000908152600d60205260409020546001600160701b0316836001602002015110156124275760405162461bcd60e51b8152602060048201526024808201527f586368616e67653a20494e53554646494349454e545f544f4b454e315f42414c604482015263414e434560e01b606482015260840161061d565b506000905061243f8a6001600160701b038616613444565b82511161244d57600061246c565b6124608a6001600160701b038616613444565b825161246c9190613444565b905060006124838a6001600160701b038616613444565b6020840151116124945760006124b6565b6124a78a6001600160701b038616613444565b60208401516124b69190613444565b905060008211806124c75750600081115b61251e5760405162461bcd60e51b815260206004820152602260248201527f586368616e67653a20494e53554646494349454e545f494e5055545f414d4f55604482015261139560f21b606482015260840161061d565b60c888811461269b576005546040516396d6487960e01b81523360048201526001600160a01b03909116906396d6487990602401602060405180830381865afa15801561256f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259391906133aa565b1561259f575087612686565b600560009054906101000a90046001600160a01b03166001600160a01b03166334091a436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261691906134e9565b604051636fcca69b60e01b81523360048201526001600160a01b039190911690636fcca69b90602401602060405180830381865afa15801561265c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126809190613506565b60ff1690505b60c88111156126965760c8612698565b805b90505b60006126a782856133fb565b85516126b690620186a06133fb565b6126c09190613444565b905060006126ce83856133fb565b60208701516126e090620186a06133fb565b6126ea9190613444565b90506127026001600160701b03808916908a166133fb565b612711906402540be4006133fb565b61271b82846133fb565b10156127695760405162461bcd60e51b815260206004820152600a60248201527f586368616e67653a204b00000000000000000000000000000000000000000000604482015260640161061d565b50508351602085015161277e925087876127e0565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a35050505050505050505050565b6001600160701b0384118015906127fe57506001600160701b038311155b61284a5760405162461bcd60e51b815260206004820152601160248201527f586368616e67653a204f564552464c4f57000000000000000000000000000000604482015260640161061d565b60085463ffffffff600160e01b909104811642039081161580159061287757506001600160701b03831615155b801561288b57506001600160701b03821615155b156128f6578063ffffffff166128b3846128a485612fbf565b6001600160e01b031690612fde565b600980546001600160e01b03929092169290920201905563ffffffff81166128de836128a486612fbf565b600a80546001600160e01b0392909216929092020190555b506008805463ffffffff4216600160e01b026001600160e01b036001600160701b03878116600160701b9081027fffffffff000000000000000000000000000000000000000000000000000000009095168a83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a150505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f91906134e9565b600b546001600160a01b038216158015945091925090612ac4578015612abf576000612a5a6112876001600160701b038088169089166133fb565b90506000612a6783612eb2565b905080821115612abc576000612a7d8284613444565b600054612a8a91906133fb565b90506000612a988385613523565b90506000612aa68284613430565b90508015612ab857612ab88782612f22565b5050505b50505b612ad0565b8015612ad0576000600b555b505092915050565b6001600160a01b038216600090815260016020526040902054612afc908290613444565b6001600160a01b03831660009081526001602052604081209190915554612b24908290613444565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0386811660248301526044808301879052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928816918591612bf99161353b565b60006040518083038160008787f1925050503d8060008114612c37576040519150601f19603f3d011682016040523d82523d6000602084013e612c3c565b606091505b505090508015612c4f5783915050612c55565b60009150505b949350505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054612ce3908290613444565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d13908290613523565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cb29085815260200190565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291516000928392871691612df3919061353b565b6000604051808303816000865af19150503d8060008114612e30576040519150601f19603f3d011682016040523d82523d6000602084013e612e35565b606091505b5091509150818015612e5f575080511580612e5f575080806020019051810190612e5f91906133aa565b612eab5760405162461bcd60e51b815260206004820152601860248201527f586368616e67653a205452414e534645525f4641494c45440000000000000000604482015260640161061d565b5050505050565b60006003821115612f135750806000612ecc600283613430565b612ed7906001613523565b90505b81811015612f0d57905080600281612ef28186613430565b612efc9190613523565b612f069190613430565b9050612eda565b50919050565b8115612f1d575060015b919050565b80600054612f309190613523565b60009081556001600160a01b038316815260016020526040902054612f56908290613523565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b609085815260200190565b6000818310612fb65781612fb8565b825b9392505050565b6000612fd8600160701b6001600160701b038416613557565b92915050565b6000612fb86001600160701b03831684613586565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461302657600080fd5b50565b60008083601f84011261303b57600080fd5b50813567ffffffffffffffff81111561305357600080fd5b60208301915083602082850101111561306b57600080fd5b9250929050565b60008060008060006080868803121561308a57600080fd5b853594506020860135935060408601356130a381613011565b9250606086013567ffffffffffffffff8111156130bf57600080fd5b6130cb88828901613029565b969995985093965092949392505050565b600080604083850312156130ef57600080fd5b50508035926020909101359150565b60005b83811015613119578181015183820152602001613101565b83811115613128576000848401525b50505050565b602081526000825180602084015261314d8160408501602087016130fe565b601f01601f19169190910160400192915050565b6000806040838503121561317457600080fd5b823561317f81613011565b946020939093013593505050565b6000806000606084860312156131a257600080fd5b83356131ad81613011565b925060208401356131bd81613011565b929592945050506040919091013590565b80356001600160701b0381168114612f1d57600080fd5b6000806000606084860312156131fa57600080fd5b833561320581613011565b9250602084013561321581613011565b9150613223604085016131ce565b90509250925092565b6000806040838503121561323f57600080fd5b823561324a81613011565b9150602083013561325a81613011565b809150509250929050565b60006020828403121561327757600080fd5b8135612fb881613011565b6000806040838503121561329557600080fd5b82356132a081613011565b91506132ae602084016131ce565b90509250929050565b60ff8116811461302657600080fd5b600080600080600080600060e0888a0312156132e157600080fd5b87356132ec81613011565b965060208801356132fc81613011565b95506040880135945060608801359350608088013561331a816132b7565b9699959850939692959460a0840135945060c09093013592915050565b60008060008060008060a0878903121561335057600080fd5b8635955060208701359450604087013561336981613011565b935060608701359250608087013567ffffffffffffffff81111561338c57600080fd5b61339889828a01613029565b979a9699509497509295939492505050565b6000602082840312156133bc57600080fd5b81518015158114612fb857600080fd5b6000602082840312156133de57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613415576134156133e5565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261343f5761343f61341a565b500490565b600082821015613456576134566133e5565b500390565b60006001600160701b038381169083168181101561347b5761347b6133e5565b039392505050565b600060018201613495576134956133e5565b5060010190565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156134fb57600080fd5b8151612fb881613011565b60006020828403121561351857600080fd5b8151612fb8816132b7565b60008219821115613536576135366133e5565b500190565b6000825161354d8184602087016130fe565b9190910192915050565b60006001600160e01b038083168185168183048111821515161561357d5761357d6133e5565b02949350505050565b60006001600160e01b03808416806135a0576135a061341a565b9216919091049291505056fea26469706673582212206d5ee5e289bade7381b89c77f32289778287345c85e3f04ddec22c3397f41fd564736f6c634300080f0033