[ { "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": [ { "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": "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": "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": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "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": [], "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" } ]
60806040526001600c5534801561001557600080fd5b5060408051808201825260098152680f09f8d862039204c560bc1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f89fb6ce5eb6c9a089d1a86b78297fb7182803773ecc9a9a0e0265b000a18560f818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612e52806101076000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a71461045f578063d505accf1461047f578063dd62ed3e14610492578063fff6cae9146104bd57600080fd5b8063ba9a7a5614610423578063bc25cf771461042c578063c45a01551461043f57600080fd5b80637ecebe00116100d35780637ecebe00146103c857806389afcb44146103e857806395d89b41146101d3578063a9059cbb1461041057600080fd5b80636a6278421461038c57806370a082311461039f5780637464fc3d146103bf57600080fd5b806323b872dd116101665780633644e515116101405780633644e5151461035e578063485cc955146103675780635909c0d51461037a5780635a3d54931461038357600080fd5b806323b872dd1461030a57806330adf81f1461031d578063313ce5671461034457600080fd5b8063095ea7b311610197578063095ea7b31461028b5780630dfe1681146102ae57806318160ddd146102f357600080fd5b8063022c0d9f146101be57806306fdde03146101d35780630902f1ac14610225575b600080fd5b6101d16101cc36600461294a565b6104c5565b005b61020f6040518060400160405280600981526020017ff09f8d862039204c50000000000000000000000000000000000000000000000081525081565b60405161021c9190612a04565b60405180910390f35b600854604080516dffffffffffffffffffffffffffff80841682526e01000000000000000000000000000084041660208201527c010000000000000000000000000000000000000000000000000000000090920463ffffffff169082015260600161021c565b61029e610299366004612a55565b610bfc565b604051901515815260200161021c565b6006546102ce9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021c565b6102fc60005481565b60405190815260200161021c565b61029e610318366004612a81565b610c13565b6102fc7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61034c601281565b60405160ff909116815260200161021c565b6102fc60035481565b6101d1610375366004612ac2565b610cec565b6102fc60095481565b6102fc600a5481565b6102fc61039a366004612afb565b610ef5565b6102fc6103ad366004612afb565b60016020526000908152604090205481565b6102fc600b5481565b6102fc6103d6366004612afb565b60046020526000908152604090205481565b6103fb6103f6366004612afb565b6112ce565b6040805192835260208301919091520161021c565b61029e61041e366004612a55565b611786565b6102fc6103e881565b6101d161043a366004612afb565b611793565b6005546102ce9073ffffffffffffffffffffffffffffffffffffffff1681565b6007546102ce9073ffffffffffffffffffffffffffffffffffffffff1681565b6101d161048d366004612b18565b611956565b6102fc6104a0366004612ac2565b600260209081526000928352604080842090915290825290205481565b6101d1611c41565b600c54600114610536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e696e65496e63683a204c4f434b45440000000000000000000000000000000060448201526064015b60405180910390fd5b6000600c55841515806105495750600084115b6105d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e696e65496e63683a20494e53554646494349454e545f4f55545055545f414d60448201527f4f554e5400000000000000000000000000000000000000000000000000000000606482015260840161052d565b6000806106306008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b5091509150816dffffffffffffffffffffffffffff16871080156106635750806dffffffffffffffffffffffffffff1686105b6106c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4e696e65496e63683a20494e53554646494349454e545f4c4951554944495459604482015260640161052d565b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061072e57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e696e65496e63683a20494e56414c49445f544f000000000000000000000000604482015260640161052d565b8a156107a5576107a5828a8d611e0d565b89156107b6576107b6818a8c611e0d565b8615610849576040517fc18c82cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169063c18c82cc906108169033908f908f908e908e90600401612b8f565b600060405180830381600087803b15801561083057600080fd5b505af1158015610844573d6000803e3d6000fd5b505050505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190612c07565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290945073ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa158015610944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109689190612c07565b92505050600089856dffffffffffffffffffffffffffff1661098a9190612c4f565b83116109975760006109bb565b6109b18a6dffffffffffffffffffffffffffff8716612c4f565b6109bb9084612c4f565b905060006109d98a6dffffffffffffffffffffffffffff8716612c4f565b83116109e6576000610a0a565b610a008a6dffffffffffffffffffffffffffff8716612c4f565b610a0a9084612c4f565b90506000821180610a1b5750600081115b610aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e696e65496e63683a20494e53554646494349454e545f494e5055545f414d4f60448201527f554e540000000000000000000000000000000000000000000000000000000000606482015260840161052d565b6000610ac9610ab784601d611fad565b610ac387612710611fad565b9061206c565b90506000610adb610ab784601d611fad565b9050610b086305f5e100610b026dffffffffffffffffffffffffffff8b8116908b16611fad565b90611fad565b610b128383611fad565b1015610b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e696e65496e63683a204b000000000000000000000000000000000000000000604482015260640161052d565b5050610b88848488886120ae565b60408051838152602081018390529081018c9052606081018b905273ffffffffffffffffffffffffffffffffffffffff8a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6000610c0933848461238a565b5060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610cd75773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610ca5908361206c565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ce28484846123f9565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff821615801590610d26575073ffffffffffffffffffffffffffffffffffffffff811615155b610d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e696e65496e63683a205a45524f5f4144445245535300000000000000000000604482015260640161052d565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e696e65496e63683a204944454e544943414c5f414444524553534553000000604482015260640161052d565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ea2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e696e65496e63683a20464f5242494444454e00000000000000000000000000604482015260640161052d565b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b6000600c54600114610f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e696e65496e63683a204c4f434b454400000000000000000000000000000000604482015260640161052d565b6000600c819055600854600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516dffffffffffffffffffffffffffff808516956e01000000000000000000000000000090950416939273ffffffffffffffffffffffffffffffffffffffff16916370a082319160248083019260209291908290030181865afa158015611009573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102d9190612c07565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190612c07565b905060006110e3836dffffffffffffffffffffffffffff871661206c565b90506000611101836dffffffffffffffffffffffffffff871661206c565b9050600061110f87876124c6565b60008054919250819003611149576111356103e8610ac36111308787611fad565b612631565b985061114460006103e86126a1565b61119e565b61119b6dffffffffffffffffffffffffffff89166111678684611fad565b6111719190612c91565b6dffffffffffffffffffffffffffff891661118c8685611fad565b6111969190612c91565b61274a565b98505b6000891161122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4e696e65496e63683a20494e53554646494349454e545f4c495155494449545960448201527f5f4d494e54454400000000000000000000000000000000000000000000000000606482015260840161052d565b6112388a8a6126a1565b61124486868a8a6120ae565b81156112805760085461127c906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416611fad565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c5460011461133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e696e65496e63683a204c4f434b454400000000000000000000000000000000604482015260640161052d565b6000600c819055600854600654600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516dffffffffffffffffffffffffffff808616966e010000000000000000000000000000909604169473ffffffffffffffffffffffffffffffffffffffff94851694909316929184916370a08231916024808201926020929091908290030181865afa1580156113ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114139190612c07565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612c07565b306000908152600160205260408120549192506114c488886124c6565b600054909150806114d58487611fad565b6114df9190612c91565b9a50806114ec8486611fad565b6114f69190612c91565b995060008b118015611508575060008a115b611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4e696e65496e63683a20494e53554646494349454e545f4c495155494449545960448201527f5f4255524e454400000000000000000000000000000000000000000000000000606482015260840161052d565b61159e3084612760565b6115a9878d8d611e0d565b6115b4868d8c611e0d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116429190612c07565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290955073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa1580156116af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d39190612c07565b93506116e185858b8b6120ae565b811561171d57600854611719906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416611fad565b600b555b604080518c8152602081018c905273ffffffffffffffffffffffffffffffffffffffff8e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b6000610c093384846123f9565b600c546001146117ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e696e65496e63683a204c4f434b454400000000000000000000000000000000604482015260640161052d565b6000600c556006546007546008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff93841693909216916118c791849186916118c2916dffffffffffffffffffffffffffff9091169084906370a08231906024015b602060405180830381865afa15801561189e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190612c07565b611e0d565b6008546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261194c91839186916118c2916e0100000000000000000000000000009091046dffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401611881565b50506001600c5550565b428410156119c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e696e65496e63683a2045585049524544000000000000000000000000000000604482015260640161052d565b60035473ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611a2083612ca5565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001611ac19291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611b4a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611bc557508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e696e65496e63683a20494e56414c49445f5349474e41545552450000000000604482015260640161052d565b611c3689898961238a565b505050505050505050565b600c54600114611cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e696e65496e63683a204c4f434b454400000000000000000000000000000000604482015260640161052d565b6000600c556006546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152611e069173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d469190612c07565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190612c07565b6008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166120ae565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392871691611ed49190612cdd565b6000604051808303816000865af19150503d8060008114611f11576040519150601f19603f3d011682016040523d82523d6000602084013e611f16565b606091505b5091509150818015611f40575080511580611f40575080806020019051810190611f409190612cf9565b611fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e696e65496e63683a205452414e534645525f4641494c454400000000000000604482015260640161052d565b5050505050565b600082600003611fbf57506000610c0d565b6000611fcb8385612d1b565b905082611fd88583612c91565b14612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161052d565b9392505050565b600061206583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612811565b6dffffffffffffffffffffffffffff84118015906120da57506dffffffffffffffffffffffffffff8311155b612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e696e65496e63683a204f564552464c4f570000000000000000000000000000604482015260640161052d565b600061215164010000000042612d32565b60085490915060009061218a907c0100000000000000000000000000000000000000000000000000000000900463ffffffff1683612d46565b905060008163ffffffff161180156121b157506dffffffffffffffffffffffffffff841615155b80156121cc57506dffffffffffffffffffffffffffff831615155b1561229a578063ffffffff16612209856121e586612865565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690612890565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166122319190612d1b565b600960008282546122429190612d6a565b909155505063ffffffff811661225b846121e587612865565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166122839190612d1b565b600a60008282546122949190612d6a565b90915550505b6008805463ffffffff84167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8981166e0100000000000000000000000000009081027fffffffff000000000000000000000000000000000000000000000000000000009095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612429908261206c565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020526040808220939093559084168152205461246590826128ac565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123ec9085815260200190565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255a9190612d7d565b600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061261d5780156126185760006125a96111306dffffffffffffffffffffffffffff888116908816611fad565b905060006125b683612631565b9050808211156126155760006125d86125cf848461206c565b60005490611fad565b905060006125f1836125eb866007611fad565b906128ac565b905060006125ff8284612c91565b905080156126115761261187826126a1565b5050505b50505b612629565b8015612629576000600b555b505092915050565b60006003821115612692575080600061264b600283612c91565b612656906001612d6a565b90505b8181101561268c579050806002816126718186612c91565b61267b9190612d6a565b6126859190612c91565b9050612659565b50919050565b811561269c575060015b919050565b6000546126ae90826128ac565b600090815573ffffffffffffffffffffffffffffffffffffffff83168152600160205260409020546126e090826128ac565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061273e9085815260200190565b60405180910390a35050565b60008183106127595781612065565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054612790908261206c565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546127c4908261206c565b600090815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161273e565b6000818484111561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052d9190612a04565b50600061285c8486612c4f565b95945050505050565b6000610c0d6e0100000000000000000000000000006dffffffffffffffffffffffffffff8416612d9a565b60006120656dffffffffffffffffffffffffffff831684612de1565b6000806128b98385612d6a565b905083811015612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161052d565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008060008060006080868803121561296257600080fd5b8535945060208601359350604086013561297b81612925565b9250606086013567ffffffffffffffff8082111561299857600080fd5b818801915088601f8301126129ac57600080fd5b8135818111156129bb57600080fd5b8960208285010111156129cd57600080fd5b9699959850939650602001949392505050565b60005b838110156129fb5781810151838201526020016129e3565b50506000910152565b6020815260008251806020840152612a238160408501602087016129e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060408385031215612a6857600080fd5b8235612a7381612925565b946020939093013593505050565b600080600060608486031215612a9657600080fd5b8335612aa181612925565b92506020840135612ab181612925565b929592945050506040919091013590565b60008060408385031215612ad557600080fd5b8235612ae081612925565b91506020830135612af081612925565b809150509250929050565b600060208284031215612b0d57600080fd5b813561206581612925565b600080600080600080600060e0888a031215612b3357600080fd5b8735612b3e81612925565b96506020880135612b4e81612925565b95506040880135945060608801359350608088013560ff81168114612b7257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b600060208284031215612c1957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610c0d57610c0d612c20565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612ca057612ca0612c62565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cd657612cd6612c20565b5060010190565b60008251612cef8184602087016129e0565b9190910192915050565b600060208284031215612d0b57600080fd5b8151801515811461206557600080fd5b8082028115828204841417610c0d57610c0d612c20565b600082612d4157612d41612c62565b500690565b63ffffffff828116828216039080821115612d6357612d63612c20565b5092915050565b80820180821115610c0d57610c0d612c20565b600060208284031215612d8f57600080fd5b815161206581612925565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff828116828216818102831692918115828504821417612dd857612dd8612c20565b50505092915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80841680612e1057612e10612c62565b9216919091049291505056fea26469706673582212207ae92536e2e51f2c34fdd91db606ada0e82a34f031a0c0c3c2ee197ccb0b5c7964736f6c63430008130033