28 txs
37 calls
constructor
constructor(address _PERMIT2, address _FORWARDER)
functions
exchanges
viewfunction exchanges(address) view returns (bool)
FORWARDER
viewfunction FORWARDER() view returns (address)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
PERMIT2
viewfunction PERMIT2() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
enable
nonpayablefunction enable(address exchange, bool enabled) returns (bool)
pay
payablefunction pay(tuple payment, tuple permitTransferFromAndSignature) payable returns (bool)
pay
payablefunction pay(tuple payment, tuple permitSingle, bytes signature) payable returns (bool)
pay
payablefunction pay(tuple payment) payable returns (bool)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(address token, uint256 amount) returns (bool)
events
Disabled
event Disabled(address indexed exchange)
Enabled
event Enabled(address indexed exchange)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Payment
event Payment(address indexed from, address indexed to, uint256 indexed deadline, uint256 amountIn, uint256 paymentAmount, uint256 feeAmount, uint256 feeAmount2, uint256 protocolAmount, uint256 slippageInAmount, uint256 slippageOutAmount, address tokenInAddress, address tokenOutAddress, address feeReceiverAddress, address feeReceiverAddress2)
errors
ExchangeCallFailed
error ExchangeCallFailed()
ExchangeCallMissing
error ExchangeCallMissing()
ExchangeNotApproved
error ExchangeNotApproved()
ForwardingPaymentFailed
error ForwardingPaymentFailed()
InsufficientBalanceInAfterPayment
error InsufficientBalanceInAfterPayment()
InsufficientBalanceOutAfterPayment
error InsufficientBalanceOutAfterPayment()
InsufficientProtocolAmount
error InsufficientProtocolAmount()
NativeFeePaymentFailed
error NativeFeePaymentFailed()
NativePaymentFailed
error NativePaymentFailed()
PaymentDeadlineReached
error PaymentDeadlineReached()
PaymentToZeroAddressNotAllowed
error PaymentToZeroAddressNotAllowed()
WrongAmountPaidIn
error WrongAmountPaidIn()
creation bytecode
0x60c060405234801561000f575f80fd5b50604051612c1c380380612c1c83398101604081905261002e916100d4565b6100373361004e565b6001600160a01b039182166080521660a052610105565b600180546001600160a01b03191690556100678161006a565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100cf575f80fd5b919050565b5f80604083850312156100e5575f80fd5b6100ee836100b9565b91506100fc602084016100b9565b90509250929050565b60805160a051612acc6101505f395f81816101ee01528181611973015281816119fb0152611a6e01525f818161011501528181610b96015281816112d401526114130152612acc5ff3fe6080604052600436106100d1575f3560e01c8063ca2ad9731161007c578063e30c397811610057578063e30c397814610236578063ec97364214610260578063f2fde38b1461027f578063f3fef3a31461029e575f80fd5b8063ca2ad973146101dd578063cac7130c14610210578063e277a94814610223575f80fd5b80637412dbb3116100ac5780637412dbb31461017257806379ba5097146101a05780638da5cb5b146101b4575f80fd5b806364f0acc4146100dc5780636afdd85014610104578063715018a61461015c575f80fd5b366100d857005b5f80fd5b6100ef6100ea36600461229e565b6102bd565b60405190151581526020015b60405180910390f35b34801561010f575f80fd5b506101377f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100fb565b348015610167575f80fd5b506101706102d1565b005b34801561017d575f80fd5b506100ef61018c36600461233a565b60026020525f908152604090205460ff1681565b3480156101ab575f80fd5b506101706102e4565b3480156101bf575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610137565b3480156101e8575f80fd5b506101377f000000000000000000000000000000000000000000000000000000000000000081565b6100ef61021e36600461235c565b61039e565b6100ef61023136600461238e565b6103a8565b348015610241575f80fd5b5060015473ffffffffffffffffffffffffffffffffffffffff16610137565b34801561026b575f80fd5b506100ef61027a366004612474565b6103c0565b34801561028a575f80fd5b5061017061029936600461233a565b6104af565b3480156102a9575f80fd5b506100ef6102b83660046124a0565b61055e565b5f6102c88383610695565b90505b92915050565b6102d96106f2565b6102e25f610772565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61039b81610772565b50565b5f6102cb826107a3565b5f6103b5858585856107f5565b90505b949350505050565b5f6103c96106f2565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683158015919091179091556104655760405173ffffffffffffffffffffffffffffffffffffffff8416907f44bcce471802f9158ee4390426e4a931d186757cc50d302f6747504c17516d12905f90a26104a6565b60405173ffffffffffffffffffffffffffffffffffffffff8416907ff54453d15e2e6aee566733e6da03165ea58500408e802e05aa4e75f2408f59fe905f90a25b50600192915050565b6104b76106f2565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556105195f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6105676106f2565b7fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff84160161067457604080515f80825260208201909252339084906040516105c491906124ca565b5f6040518083038185875af1925050503d805f81146105fe576040519150601f19603f3d011682016040523d82523d5f602084013e610603565b606091505b505090508061066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f44655061793a207769746864726177206661696c6564210000000000000000006044820152606401610389565b506104a6565b6104a673ffffffffffffffffffffffffffffffffffffffff8416338461085e565b604080516080810182525f80825260208201819052918101829052606081018290526106c18482610937565b6106cb8484610b6b565b6106d484610c1e565b6106de8482610ccb565b6106e88482610f89565b5060019392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146102e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561039b816111b8565b604080516080810182525f80825260208201819052918101829052606081018290526107cf8382610937565b6107d88361122c565b6107e183610c1e565b6107eb8382610ccb565b6104a68382610f89565b604080516080810182525f80825260208201819052918101829052606081018290526108218682610937565b61082c8585856113d6565b6108358661122c565b61083e86610c1e565b6108488682610ccb565b6108528682610f89565b50600195945050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109329084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611480565b505050565b610943426103e861250d565b8260a001351015610980576040517f17e0bcd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6109a560e0840160c0850161233a565b73ffffffffffffffffffffffffffffffffffffffff16036109d1576109ca3447612524565b8152610a72565b6109e160e0830160c0840161233a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015610a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6f9190612537565b81525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610a996101208401610100850161233a565b73ffffffffffffffffffffffffffffffffffffffff1603610ac757610abe3447612524565b60408201525050565b610ad96101208301610100840161233a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abe9190612537565b5050565b604080518082019091523081528235602082015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906330f28b7a90839033610bcd608084018461254e565b6040518663ffffffff1660e01b8152600401610bed9594939291906125fd565b5f604051808303815f87803b158015610c04575f80fd5b505af1158015610c16573d5f803e3d5ffd5b505050505050565b5f610c30610100830160e0840161233a565b73ffffffffffffffffffffffffffffffffffffffff1614610c5457610c548161158d565b610c5d816118d9565b5f610c706101608301610140840161233a565b73ffffffffffffffffffffffffffffffffffffffff1614610c9457610c9481611cb0565b5f610ca76101808301610160840161233a565b73ffffffffffffffffffffffffffffffffffffffff161461039b5761039b81611e00565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610cf060e0840160c0850161233a565b73ffffffffffffffffffffffffffffffffffffffff1603610d1657476020820152610dba565b610d2660e0830160c0840161233a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015610d90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db49190612537565b60208201525b805160208201511015610df9576040517f8425754100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610e206101208401610100850161233a565b73ffffffffffffffffffffffffffffffffffffffff1603610e4657476060820152610eec565b610e586101208301610100840161233a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190612537565b60608201525b806040015181606001511015610f2e576040517f808b961200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608082013515610b6757806040015182608001358260600151610f519190612524565b1015610b67576040517f8e1ebd3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0820135610fa06101408401610120850161233a565b73ffffffffffffffffffffffffffffffffffffffff16337f0da53976db14f563aaa3ce5c693eacf31c09d283b88ef40d7485db88f3da8463853560208701356040880135606089013560808a01356110006101208c016101008d0161233a565b73ffffffffffffffffffffffffffffffffffffffff1661102660e08d0160c08e0161233a565b73ffffffffffffffffffffffffffffffffffffffff160361106657895160208b015160808d01359161105791612524565b6110619190612524565b611077565b895160208b01516110779190612524565b6110896101208d016101008e0161233a565b73ffffffffffffffffffffffffffffffffffffffff166110af60e08e0160c08f0161233a565b73ffffffffffffffffffffffffffffffffffffffff16036110d0575f6110f3565b8b608001358b604001518c606001516110e99190612524565b6110f39190612524565b61110360e08e0160c08f0161233a565b8d610100016020810190611117919061233a565b8e61014001602081019061112b919061233a565b8f61016001602081019061113f919061233a565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015273ffffffffffffffffffffffffffffffffffffffff90811660e0860152908116610100850152908116610120840152166101408201526101600160405180910390a45050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61125160e0830160c0840161233a565b73ffffffffffffffffffffffffffffffffffffffff16036112a6573481351461039b576040517fed0842e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b86101e082016101c08301612670565b156113a15773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166336c785163330843561130d60e0870160c0880161233a565b60405160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152908316604483015290911660648201526084015f604051808303815f87803b158015611388575f80fd5b505af115801561139a573d5f803e3d5ffd5b5050505050565b61039b333083356113b860e0860160c0870161233a565b73ffffffffffffffffffffffffffffffffffffffff16929190611ea2565b6040517f2b67b57000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632b67b5709061144e9033908790879087906004016126a0565b5f604051808303815f87803b158015611465575f80fd5b505af1158015611477573d5f803e3d5ffd5b50505050505050565b5f6114e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f069092919063ffffffff16565b905080515f14806115015750808060200190518101906115019190612795565b610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610389565b60025f6115a1610100840160e0850161233a565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f205460ff16611600576040517fc35a393200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61162660e0840160c0850161233a565b73ffffffffffffffffffffffffffffffffffffffff16036117175761164f6101e083018361254e565b90505f03611689576040517f6b8072c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169a610100830160e0840161233a565b73ffffffffffffffffffffffffffffffffffffffff16346116bf6101e085018561254e565b6040516116cd9291906127b0565b5f6040518083038185875af1925050503d805f8114611707576040519150601f19603f3d011682016040523d82523d5f602084013e61170c565b606091505b5050809150506118a2565b6117296101a0830161018084016127cf565b60ff1660010361177b57611776611747610100840160e0850161233a565b833561175960e0860160c0870161233a565b73ffffffffffffffffffffffffffffffffffffffff169190611f14565b6117da565b61178d6101a0830161018084016127cf565b60ff166002036117da576117da6117ab610100840160e0850161233a565b83356117bd60e0860160c0870161233a565b73ffffffffffffffffffffffffffffffffffffffff16919061085e565b6117eb610100830160e0840161233a565b73ffffffffffffffffffffffffffffffffffffffff1661180f6101e084018461254e565b60405161181d9291906127b0565b5f604051808303815f865af19150503d805f8114611856576040519150601f19603f3d011682016040523d82523d5f602084013e61185b565b606091505b5090915061187390506101a0830161018084016127cf565b60ff166001036118a2576118a2611891610100840160e0850161233a565b5f61175960e0860160c0870161233a565b80610b67576040517f6d8040c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118eb6101c082016101a083016127cf565b60ff1615611b1d575f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61191b6101208401610100850161233a565b73ffffffffffffffffffffffffffffffffffffffff16036119f6576040517f6db0f57700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636db0f577906020850135906119ae908690600401612848565b60206040518083038185885af11580156119ca573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119ef9190612795565b9050611ae6565b611a317f000000000000000000000000000000000000000000000000000000000000000060208401356117bd6101208601610100870161233a565b6040517f6db0f57700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636db0f57790611aa3908590600401612848565b6020604051808303815f875af1158015611abf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae39190612795565b90505b80610b67576040517fc797a22400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611b446101208301610100840161233a565b73ffffffffffffffffffffffffffffffffffffffff1603611c84575f611b726101408301610120840161233a565b73ffffffffffffffffffffffffffffffffffffffff1603611bbf576040517f3943f6f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611bd26101408301610120840161233a565b604080515f815260208082019283905273ffffffffffffffffffffffffffffffffffffffff939093169285013591611c0a91906124ca565b5f6040518083038185875af1925050503d805f8114611c44576040519150601f19603f3d011682016040523d82523d5f602084013e611c49565b606091505b5050905080610b67576040517fc7abb1a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039b611c996101408301610120840161233a565b60208301356117bd6101208501610100860161233a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611cd76101208301610100840161233a565b73ffffffffffffffffffffffffffffffffffffffff1603611dd4575f611d056101608301610140840161233a565b73ffffffffffffffffffffffffffffffffffffffff1660408301355f5b6040519080825280601f01601f191660200182016040528015611d4c576020820181803683370190505b50604051611d5a91906124ca565b5f6040518083038185875af1925050503d805f8114611d94576040519150601f19603f3d011682016040523d82523d5f602084013e611d99565b606091505b5050905080610b67576040517f9f06170c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039b611de96101608301610140840161233a565b60408301356117bd6101208501610100860161233a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611e276101208301610100840161233a565b73ffffffffffffffffffffffffffffffffffffffff1603611e76575f611e556101808301610160840161233a565b73ffffffffffffffffffffffffffffffffffffffff1660608301355f611d22565b61039b611e8b6101808301610160840161233a565b60608301356117bd6101208501610100860161233a565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f009085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016108b0565b50505050565b60606103b884845f85612094565b801580611fb257506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611f8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fb09190612537565b155b61203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610389565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109329084907f095ea7b300000000000000000000000000000000000000000000000000000000906064016108b0565b606082471015612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610389565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405161214e91906124ca565b5f6040518083038185875af1925050503d805f8114612188576040519150601f19603f3d011682016040523d82523d5f602084013e61218d565b606091505b509150915061219e878383876121a9565b979650505050505050565b6060831561223e5782515f036122375773ffffffffffffffffffffffffffffffffffffffff85163b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610389565b50816103b8565b6103b883838151156122535781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103899190612a43565b5f6102208284031215612298575f80fd5b50919050565b5f80604083850312156122af575f80fd5b823567ffffffffffffffff8111156122c5575f80fd5b6122d185828601612287565b925050602083013567ffffffffffffffff8111156122ed575f80fd5b830160a081860312156122fe575f80fd5b809150509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461039b575f80fd5b803561233581612309565b919050565b5f6020828403121561234a575f80fd5b813561235581612309565b9392505050565b5f6020828403121561236c575f80fd5b813567ffffffffffffffff811115612382575f80fd5b6103b884828501612287565b5f805f808486036101008112156123a3575f80fd5b853567ffffffffffffffff8111156123b9575f80fd5b6123c588828901612287565b95505060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156123f7575f80fd5b5060208501925060e085013567ffffffffffffffff811115612417575f80fd5b8501601f81018713612427575f80fd5b803567ffffffffffffffff81111561243d575f80fd5b87602082840101111561244e575f80fd5b949793965060200194505050565b801515811461039b575f80fd5b80356123358161245c565b5f8060408385031215612485575f80fd5b823561249081612309565b915060208301356122fe8161245c565b5f80604083850312156124b1575f80fd5b82356124bc81612309565b946020939093013593505050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176102cb576102cb6124e0565b818103818111156102cb576102cb6124e0565b5f60208284031215612547575f80fd5b5051919050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612581575f80fd5b83018035915067ffffffffffffffff82111561259b575f80fd5b6020019150368190038213156125af575f80fd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f863561260981612309565b73ffffffffffffffffffffffffffffffffffffffff9081168352602088810135818501526040808a0135908501526060808a01359085015287518216608085015287015160a0840152851660c083015261010060e0830181905261219e90830184866125b6565b5f60208284031215612680575f80fd5b81356123558161245c565b803565ffffffffffff81168114612335575f80fd5b73ffffffffffffffffffffffffffffffffffffffff851681525f84356126c581612309565b73ffffffffffffffffffffffffffffffffffffffff811660208401525060208501356126f081612309565b73ffffffffffffffffffffffffffffffffffffffff811660408401525065ffffffffffff6127206040870161268b565b16606083015265ffffffffffff6127396060870161268b565b166080830152608085013561274d81612309565b73ffffffffffffffffffffffffffffffffffffffff1660a08381019190915285013560c083015261010060e0830181905261278b90830184866125b6565b9695505050505050565b5f602082840312156127a5575f80fd5b81516123558161245c565b818382375f9101908152919050565b803560ff81168114612335575f80fd5b5f602082840312156127df575f80fd5b6102c8826127bf565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261281b575f80fd5b830160208101925035905067ffffffffffffffff81111561283a575f80fd5b8036038213156125af575f80fd5b602080825282358282015282013560408083019190915282013560608083019190915282013560808083019190915282013560a08083019190915282013560c0808301919091525f9061289c90840161232a565b73ffffffffffffffffffffffffffffffffffffffff811660e0840152506128c560e0840161232a565b73ffffffffffffffffffffffffffffffffffffffff8116610100840152506128f0610100840161232a565b73ffffffffffffffffffffffffffffffffffffffff81166101208401525061291b610120840161232a565b73ffffffffffffffffffffffffffffffffffffffff811661014084015250612946610140840161232a565b73ffffffffffffffffffffffffffffffffffffffff811661016084015250612971610160840161232a565b73ffffffffffffffffffffffffffffffffffffffff81166101808401525061299c61018084016127bf565b60ff81166101a0840152506129b46101a084016127bf565b60ff81166101c0840152506129cc6101c08401612469565b8015156101e0840152506129e46101e08401846127e8565b6102206102008501526129fc610240850182846125b6565b915050612a0d6102008501856127e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030161022086015261278b8382846125b6565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509291505056fea264697066735822122008649dcd7b859b4a0abb6ded18fbafd9937725fc69600f3561d82ef1fdd7042b64736f6c634300081a0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000002fd0a07a4f73285d0eba8176426bf9b8c0121206