14 txs
15 calls
constructor
constructor(address initialOwner, address _auctioneer, address _permit2, address _stablecoin, address _collateralToken)
functions
auctioneer
viewfunction auctioneer() view returns (address)
collateralToken
viewfunction collateralToken() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getOrderHash
purefunction getOrderHash(tuple orderInfo) pure returns (bytes32)
lockedStablecoins
viewfunction lockedStablecoins(bytes32) view returns (uint256)
orderData
viewfunction orderData(bytes32) view returns (bool initialized, bool deactivated, bool tokensInWereSwappedToStablecoins, uint128 lockedCollateral, uint32 deadline, uint32 latestExecutionStart)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
permit2
viewfunction permit2() view returns (address)
stablecoin
viewfunction stablecoin() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
cancelOrder
nonpayablefunction cancelOrder(tuple orderInfo)
claimTokens
nonpayablefunction claimTokens(tuple orderInfo, tuple successConfirmation, bytes successConfirmationSignature, address recoverTokensReceiver)
createOrder
nonpayablefunction createOrder(tuple orderInfo)
renounceOwnership
nonpayablefunction renounceOwnership()
setAuctioneer
nonpayablefunction setAuctioneer(address newAuctioneer)
startOrderExecution
nonpayablefunction startOrderExecution(tuple orderInfo, bytes userSignature, tuple solverPermission, bytes auctioneerSignature)
startOrderExecutionWithSwap
nonpayablefunction startOrderExecutionWithSwap(tuple orderInfo, bytes userSignature, tuple solverPermission, bytes auctioneerSignature, address swapper, bytes swapData)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AuctioneerSet
event AuctioneerSet(address newAuctioneer)
EIP712DomainChanged
event EIP712DomainChanged()
ExecutionStart
event ExecutionStart(bytes32 indexed orderHash, address indexed solver, uint32 deadline, uint128 protocolFee, uint128 collateralAmount)
NewOrder
event NewOrder(bytes32 indexed orderHash, address indexed user, address tokenIn, uint32 deadline, uint128 amountIn, uint128 minStablecoinsAmount, bytes32 executionDetailsHash, uint256 nonce)
OrderCancelledByUser
event OrderCancelledByUser(bytes32 indexed orderHash)
OrderSuccessfullyFulfilled
event OrderSuccessfullyFulfilled(bytes32 indexed orderHash, address indexed solver, address recoverTokensReceiver)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProtocolFeesCollected
event ProtocolFeesCollected(address feeReceiver, uint256 amount)
SwappedToStablecoins
event SwappedToStablecoins(bytes32 indexed orderHash, uint256 stablecoinsAmount)
errors
AlreadyInitialized
error AlreadyInitialized()
AlreadySwapped
error AlreadySwapped()
BelowMinStablecoinsAmount
error BelowMinStablecoinsAmount(uint256)
FeeOnTransferTokensNotSupported
error FeeOnTransferTokensNotSupported()
InvalidAddress
error InvalidAddress()
InvalidAuctioneerSignature
error InvalidAuctioneerSignature()
InvalidOrder
error InvalidOrder()
InvalidPermission
error InvalidPermission()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidSolverDeadline
error InvalidSolverDeadline()
InvalidSuccessConfirmation
error InvalidSuccessConfirmation()
NoReentrancy
error NoReentrancy()
NotAllowed
error NotAllowed()
NotSolver
error NotSolver()
NotUser
error NotUser()
OrderIsBeingProcessed
error OrderIsBeingProcessed()
OrderIsNotActive
error OrderIsNotActive()
OverdueDeadline
error OverdueDeadline()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StringTooLong
error StringTooLong(string str)
SwapIsNotAllowed
error SwapIsNotAllowed()
creation bytecode
0x6101c060405234801561001157600080fd5b5060405161441938038061441983398101604081905261003091610315565b604080518082018252601081526f14dbdd5c98d950da185a5b91dd585c9960821b602080830191909152825180840190935260018352603160f81b908301529085876001600160a01b0381166100a157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100aa81610223565b506001600160a01b0381166100d25760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03929092169190911790556100fd82600361023f565b6101205261010c81600461023f565b61014052815160208084019190912060e052815190820120610100524660a05261019960e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b03821615806101bf57506001600160a01b038116155b806101d157506001600160a01b038516155b806101e357506001600160a01b038316155b156102015760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b039182166101805281166101a0521661016052506105599050565b600180546001600160a01b031916905561023c81610272565b50565b600060208351101561025b57610254836102c2565b905061026c565b816102668482610429565b5060ff90505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f815111156102ed578260405163305a27a960e01b815260040161009891906104e7565b80516102f882610535565b179392505050565b6001600160a01b038116811461023c57600080fd5b600080600080600060a0868803121561032d57600080fd5b855161033881610300565b602087015190955061034981610300565b604087015190945061035a81610300565b606087015190935061036b81610300565b608087015190925061037c81610300565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806103b457607f821691505b6020821081036103d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561042457806000526020600020601f840160051c810160208510156104015750805b601f840160051c820191505b81811015610421576000815560010161040d565b50505b505050565b81516001600160401b038111156104425761044261038a565b6104568161045084546103a0565b846103da565b6020601f82116001811461048a57600083156104725750848201515b600019600385901b1c1916600184901b178455610421565b600084815260208120601f198516915b828110156104ba578785015182556020948501946001909201910161049a565b50848210156104d85786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b8181101561051557602081860181015160408684010152016104f8565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156103d45760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051613dff61061a600039600081816102a20152818161136501528181611b3701528181611ed30152611f5f0152600081816103d20152818161096801528181610c3401528181610cfa01528181610dc901526112b70152600081816101a10152612799015260006120e5015260006120b3015260006134ff015260006134d7015260006134320152600061345c015260006134860152613dff6000f3fe608060405234801561001057600080fd5b506004361061014f5760003560e01c806384b0196e116100cd578063db065da311610081578063e9cbd82211610066578063e9cbd822146103cd578063f2fde38b146103f4578063f9ed389a1461040757600080fd5b8063db065da31461039c578063e30c3978146103af57600080fd5b80638da5cb5b116100b25780638da5cb5b1461027f578063b2016bd41461029d578063c4cd9ed3146102c457600080fd5b806384b0196e146102515780638c2318251461026c57600080fd5b8063350f40cb11610124578063715018a611610109578063715018a61461022e57806379ba5097146102365780638023c2501461023e57600080fd5b8063350f40cb146101fb5780635ec2c7bf1461020e57600080fd5b80626973b814610154578062ede7e41461018757806312261ee71461019c5780631ef56427146101e8575b600080fd5b610174610162366004613550565b60066020526000908152604090205481565b6040519081526020015b60405180910390f35b61019a61019536600461359b565b61041a565b005b6101c37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161017e565b61019a6101f63660046135d8565b6104e8565b61019a61020936600461363e565b610a23565b6002546101c39073ffffffffffffffffffffffffffffffffffffffff1681565b61019a610eff565b61019a610f13565b61019a61024c366004613723565b610f8a565b610259611070565b60405161017e979695949392919061382e565b61017461027a3660046135d8565b6110d2565b60005473ffffffffffffffffffffffffffffffffffffffff166101c3565b6101c37f000000000000000000000000000000000000000000000000000000000000000081565b61034f6102d2366004613550565b60056020526000908152604090205460ff80821691610100810482169162010000820416906fffffffffffffffffffffffffffffffff63010000008204169063ffffffff73010000000000000000000000000000000000000082048116917701000000000000000000000000000000000000000000000090041686565b6040805196151587529415156020870152921515938501939093526fffffffffffffffffffffffffffffffff16606084015263ffffffff91821660808401521660a082015260c00161017e565b61019a6103aa3660046138ef565b6110ec565b60015473ffffffffffffffffffffffffffffffffffffffff166101c3565b6101c37f000000000000000000000000000000000000000000000000000000000000000081565b61019a61040236600461359b565b611421565b61019a6104153660046135d8565b6114d1565b610422611ab7565b73ffffffffffffffffffffffffffffffffffffffff811661046f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f4ee0985a129917c72eab0afe7ec6060bf6c6e0796bedc42de903d9dbbadfc51d9060200160405180910390a150565b6104f5602082018261359b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610559576040517f7aafae9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061079961056d368490038401846139cb565b604080517f4f72646572496e666f28000000000000000000000000000000000000000000006020808301919091527f6164647265737320757365722c00000000000000000000000000000000000000602a8301527f6164647265737320746f6b656e496e2c0000000000000000000000000000000060378301527f75696e74333220737263436861696e49642c000000000000000000000000000060478301527f75696e74333220646561646c696e652c0000000000000000000000000000000060598301527f75696e7431323820616d6f756e74496e2c00000000000000000000000000000060698301527f75696e74313238206d696e537461626c65636f696e73416d6f756e742c000000607a8301527f6279746573333220657865637574696f6e44657461696c73486173682c00000060978301527f75696e74323536206e6f6e63652900000000000000000000000000000000000060b4830152825180830360a201815260c283018452805190820120845185830151868601516060880151608089015160a08a015160c08b015160e0909b015160e28a019790975273ffffffffffffffffffffffffffffffffffffffff9586166101028a01529490931661012288015263ffffffff918216610142880152166101628601526fffffffffffffffffffffffffffffffff908116610182860152166101a28401526101c28301949094526101e28083019490945282518083039094018452610202909101909152815191012090565b600081815260056020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526fffffffffffffffffffffffffffffffff6301000000840416606082015263ffffffff7301000000000000000000000000000000000000008404811660808301527701000000000000000000000000000000000000000000000090930490921660a08301529192509080610854575080602001515b1561088b576040517f8f61709900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560808101514263ffffffff90911610610908576040517fa5445e8f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109288382606001516fffffffffffffffffffffffffffffffff16611b0a565b8060400151156109945761098f610942602085018561359b565b60008481526006602052604090205473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190611b62565b6109f3565b6109f36109a4602085018561359b565b6109b460a0860160808701613aae565b6fffffffffffffffffffffffffffffffff166109d6604087016020880161359b565b73ffffffffffffffffffffffffffffffffffffffff169190611b62565b60405182907ff1122a55049cac4b6fb786a4e5e82db7ceb712dd52fe67e22a8de56069d2999590600090a2505050565b6000610a3761056d368c90038c018c6139cb565b600081815260056020908152604091829020825160c081018452905460ff8082161515835261010082048116151593830193909352620100008104909216158015938201939093526fffffffffffffffffffffffffffffffff6301000000830416606082015263ffffffff7301000000000000000000000000000000000000008304811660808301527701000000000000000000000000000000000000000000000090920490911660a0820152919250610b1d576040517f757d07f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2d60c0890160a08a01613ac9565b610b63576040517f07365cfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7360c08c0160a08d01613aae565b6fffffffffffffffffffffffffffffffff16610b9560e08a0160c08b01613aae565b6fffffffffffffffffffffffffffffffff161015610bdf576040517f868a64de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816040019015159081151581525050610c0382828d8d8d8d8d8d60018e611be8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb49190613aeb565b90508573ffffffffffffffffffffffffffffffffffffffff1663778922688d6020016020810190610ce5919061359b565b8e6080016020810190610cf89190613aae565b7f00000000000000000000000000000000000000000000000000000000000000008d60c0016020810190610d2c9190613aae565b8a8a6040518763ffffffff1660e01b8152600401610d4f96959493929190613b4d565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000925083915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190613aeb565b610e3e9190613bd5565b9050610e5060e08b0160c08c01613aae565b6fffffffffffffffffffffffffffffffff16811015610ea3576040517f8d56ec22000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600084815260066020526040908190208290555184907f3fdcbccfbe0da48fe14b577b627f0a1d7ea2956714832866f314eddb8a081cee90610ee89084815260200190565b60405180910390a250505050505050505050505050565b610f07611ab7565b610f11600061207b565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610f7e576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e9a565b610f878161207b565b50565b6000610f9e61056d368990038901896139cb565b6000818152600560209081526040808320815160c081018352905460ff80821615158352610100820481161515948301949094526201000081049093161515918101919091526fffffffffffffffffffffffffffffffff6301000000830416606082015263ffffffff7301000000000000000000000000000000000000008304811660808301527701000000000000000000000000000000000000000000000090920490911660a082015291925061106690839083908b908b908b908b908b908b9080611be8565b5050505050505050565b6000606080600080600060606110846120ac565b61108c6120de565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60006110e661056d368490038401846139cb565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116611139576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061114d61056d368890038801886139cb565b600081815260056020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526fffffffffffffffffffffffffffffffff6301000000840416606082015263ffffffff7301000000000000000000000000000000000000008404811660808301527701000000000000000000000000000000000000000000000090930490921660a08301529192509080611208575080602001515b1561123f576040517f8f61709900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556112838287878761210b565b8060400151156112e4576000828152600660205260409020546112df9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908590611b62565b61131a565b61131a836112f860a08a0160808b01613aae565b6fffffffffffffffffffffffffffffffff166109d660408b0160208c0161359b565b60608101516fffffffffffffffffffffffffffffffff161561139e5761139e611349604088016020890161359b565b606083015173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906fffffffffffffffffffffffffffffffff16611b62565b6113ae604087016020880161359b565b73ffffffffffffffffffffffffffffffffffffffff16827fd311a6ac1b2767021e67cc355ea4ddaf50485133c7a8207a3c3ac44e31ceb52885604051611410919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405180910390a350505050505050565b611429611ab7565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561148c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60006114e561056d368490038401846139cb565b600081815260056020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526fffffffffffffffffffffffffffffffff6301000000840416606082015263ffffffff7301000000000000000000000000000000000000008404811660808301527701000000000000000000000000000000000000000000000090930490921660a0830152919250906115ca576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b466115d8602085018561359b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461163c576040517f7aafae9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61164c6060850160408601613c0f565b63ffffffff168114158061167f575061166b60a0850160808601613aae565b6fffffffffffffffffffffffffffffffff16155b156116b6576040517faf61069300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426116c76080860160608701613c0f565b63ffffffff1611611704576040517fa99f132a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611716604086016020870161359b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa158015611782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a69190613aeb565b90506117fd33306117bd60a0890160808a01613aae565b6fffffffffffffffffffffffffffffffff166117df60408a0160208b0161359b565b73ffffffffffffffffffffffffffffffffffffffff16929190612200565b600061180f604087016020880161359b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190613aeb565b90506118b160a0870160808801613aae565b6fffffffffffffffffffffffffffffffff166118cd8383613bd5565b1015611905576040517fe1628f7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182526001815260006020808301828152838501838152606085018481526080860185815260a087018681528d875260059095529690942094518554925191519451965193517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161761010091151591909102177fffffffffffffffffffffffffff0000000000000000000000000000000000ffff1662010000931515939093027fffffffffffffffffffffffffff00000000000000000000000000000000ffffff169290921763010000006fffffffffffffffffffffffffffffffff90951694909402939093177fffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffff1673010000000000000000000000000000000000000063ffffffff948516027fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff1617770100000000000000000000000000000000000000000000009390911692909202919091179055611aaf8587612246565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f11576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610e9a565b8015611b5e57611b5e611b20602084018461359b565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169083611b62565b5050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611be391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612339565b505050565b611bf6888b8787878e6123dd565b6040805160c08101825260018152600060208201528a82015115158183015290606080830191611c2a918901908901613aae565b6fffffffffffffffffffffffffffffffff168152602001611c52610100880160e08901613c0f565b63ffffffff90811682524280821660209384015260008e8152600584526040908190208551815495870151928701516060880151608089015160a0998a0151881677010000000000000000000000000000000000000000000000027fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff91891673010000000000000000000000000000000000000002919091167fffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff9093166301000000027fffffffffffffffffffffffffff00000000000000000000000000000000ffffff9415156201000002949094167fffffffffffffffffffffffffff0000000000000000000000000000000000ffff971515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff961515969096167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909b169a909a1794909417959095169790971717959095169490941717909255918b015190911603611e22576040517f583fe88600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8851611e4f57611e408888888d86611e3a57306126dc565b856126dc565b611e4a8a89612246565b611f0c565b8115611e8b57611e8b81611e6960a08b0160808c01613aae565b6fffffffffffffffffffffffffffffffff166109d660408c0160208d0161359b565b60608901516fffffffffffffffffffffffffffffffff1615611f0c57611f0c611eb760208a018a61359b565b60608b015173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691906fffffffffffffffffffffffffffffffff16611b62565b611f1c6060860160408701613aae565b6fffffffffffffffffffffffffffffffff1615611f9957611f993330611f486060890160408a01613aae565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906fffffffffffffffffffffffffffffffff16612200565b611fa96080860160608701613aae565b6fffffffffffffffffffffffffffffffff161561206657611fe433611fd460a088016080890161359b565b611f486080890160608a01613aae565b7fd72df92d2a1deb61bf4978dfd140c21dcb0a449bd22cb16af2cd7a853d25052661201560a087016080880161359b565b6120256080880160608901613aae565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526fffffffffffffffffffffffffffffffff90911660208301520160405180910390a15b61206f85612bff565b50505050505050505050565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610f8781612cb4565b60606120d97f00000000000000000000000000000000000000000000000000000000000000006003612d29565b905090565b60606120d97f00000000000000000000000000000000000000000000000000000000000000006004612d29565b61211b604084016020850161359b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461217f576040517fc139eabd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b823584146121b9576040517f636b27ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121c4838383612dd5565b6121fa576040517f070f548200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526121fa9186918216906323b872dd90608401611b9c565b612253602082018261359b565b73ffffffffffffffffffffffffffffffffffffffff16827fb95d8eb62a0bfee0a9df36bb94b7e00f7a3fec28fcc85ef69dbe0891e02463d861229b604085016020860161359b565b6122ab6080860160608701613c0f565b6122bb60a0870160808801613aae565b6122cb60c0880160a08901613aae565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9182169284019290925216606082015260c080860135608083015260e086013560a08301520160405180910390a35050565b600080602060008451602086016000885af18061235c576040513d6000823e3d81fd5b50506000513d9150811561237457806001141561238e565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156121fa576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e9a565b466123ee6060880160408901613c0f565b63ffffffff1681141580612421575061240d60a0880160808901613aae565b6fffffffffffffffffffffffffffffffff16155b15612458576040517faf61069300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612463858585612e6d565b612499576040517f070f548200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160200151156124d5576040517f8f61709900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815180156124ed575042826080015163ffffffff1610155b15612524576040517fa5445e8f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426125356080890160608a01613c0f565b63ffffffff1611612572576040517fa99f132a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61257f602086018661359b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125e3576040517fc139eabd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125f36080880160608901613c0f565b63ffffffff1661260a610100870160e08801613c0f565b63ffffffff1610612647576040517f87e08d4b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42612659610100870160e08801613c0f565b63ffffffff1611612696576040517fa99f132a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b858560200135146126d3576040517f868a64de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b60006126ee604087016020880161359b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291909116906370a0823190602401602060405180830381865afa15801561275c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127809190613aeb565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663137c29fe6128656127d0368a90038a018a6139cb565b6040805160a0810182526000606082018181526080830182905282526020820181905291810191909152506040805160a08101825260208381015173ffffffffffffffffffffffffffffffffffffffff1660608084019182526080808701516fffffffffffffffffffffffffffffffff169085015290835260e0850151918301919091529092015163ffffffff169082015290565b6128d085612878368c90038c018c6139cb565b906040805180820182526000808252602091820152815180830190925273ffffffffffffffffffffffffffffffffffffffff929092168152608092909201516fffffffffffffffffffffffffffffffff169082015290565b6128dd60208b018b61359b565b6040517f4f72646572496e666f280000000000000000000000000000000000000000000060208201527f6164647265737320757365722c00000000000000000000000000000000000000602a8201527f6164647265737320746f6b656e496e2c0000000000000000000000000000000060378201527f75696e74333220737263436861696e49642c000000000000000000000000000060478201527f75696e74333220646561646c696e652c0000000000000000000000000000000060598201527f75696e7431323820616d6f756e74496e2c00000000000000000000000000000060698201527f75696e74313238206d696e537461626c65636f696e73416d6f756e742c000000607a8201527f6279746573333220657865637574696f6e44657461696c73486173682c00000060978201527f75696e74323536206e6f6e63652900000000000000000000000000000000000060b4820152889060c201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260608301909152602e808352909190613d9c6020830139604051602001612a8e929190613c2a565b6040516020818303038152906040528b8b6040518863ffffffff1660e01b8152600401612ac19796959493929190613c85565b600060405180830381600087803b158015612adb57600080fd5b505af1158015612aef573d6000803e3d6000fd5b5060009250612b07915050604088016020890161359b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906370a0823190602401602060405180830381865afa158015612b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b999190613aeb565b9050612bab60a0880160808901613aae565b6fffffffffffffffffffffffffffffffff16612bc78383613bd5565b10156126d3576040517fe1628f7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c0c602082018261359b565b73ffffffffffffffffffffffffffffffffffffffff1660208201357fafee710773342d0ce4d79093af38bd67118c6b20fedab1bfbb713ef0ea6e1e44612c59610100850160e08601613c0f565b612c696080860160608701613aae565b612c796060870160408801613aae565b6040805163ffffffff90941684526fffffffffffffffffffffffffffffffff928316602085015291169082015260600160405180910390a350565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060ff8314612d4357612d3c83612e7c565b90506110e6565b818054612d4f90613d4e565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7b90613d4e565b8015612dc85780601f10612d9d57610100808354040283529160200191612dc8565b820191906000526020600020905b815481529060010190602001808311612dab57829003601f168201915b5050505050905092915050565b600080612e20612de486612ebb565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fb992505050565b509091505073ffffffffffffffffffffffffffffffffffffffff811615801590612e64575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b95945050505050565b600080612e20612de486613006565b60606000612e8983613295565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60006110e6604051602001612f3f907f53756363657373436f6e6669726d6174696f6e2800000000000000000000000081527f62797465733332206f72646572486173682c000000000000000000000000000060148201527f6164647265737320736f6c766572290000000000000000000000000000000000602682015260350190565b604051602081830303815290604052805190602001208360000135846020016020810190612f6d919061359b565b60408051602081019490945283019190915273ffffffffffffffffffffffffffffffffffffffff1660608201526080015b604051602081830303815290604052805190602001206132d6565b60008060008351604103612ff35760208401516040850151606086015160001a612fe58882858561331e565b955095509550505050612fff565b50508151600091506002905b9250925092565b60006110e660405160200161316e907f536f75726365436861696e536f6c7665725065726d697373696f6e280000000081527f6164647265737320736f6c7665722c0000000000000000000000000000000000601c8201527f62797465733332206f72646572486173682c0000000000000000000000000000602b8201527f75696e7431323820636f6c6c61746572616c416d6f756e742c00000000000000603d8201527f75696e743132382070726f746f636f6c4665652c00000000000000000000000060568201527f616464726573732070726f746f636f6c46656552656365697665722c00000000606a8201527f626f6f6c20616c6c6f77537761702c000000000000000000000000000000000060868201527f75696e74313238206d696e537461626c65636f696e73416d6f756e742c00000060958201527f75696e74333220646561646c696e65290000000000000000000000000000000060b282015260c20190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602091820120906131b19085018561359b565b60208501356131c66060870160408801613aae565b6131d66080880160608901613aae565b6131e660a0890160808a0161359b565b6131f660c08a0160a08b01613ac9565b61320660e08b0160c08c01613aae565b6132176101008c0160e08d01613c0f565b60408051602081019a909a5273ffffffffffffffffffffffffffffffffffffffff988916908a015260608901969096526fffffffffffffffffffffffffffffffff948516608089015292841660a0880152941660c086015292151560e085015290911661010083015263ffffffff1661012082015261014001612f9e565b600060ff8216601f8111156110e6576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110e66132e3613418565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613359575060009150600390508261340e565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156133ad573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166134045750600092506001915082905061340e565b9250600091508190505b9450945094915050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561347e57507f000000000000000000000000000000000000000000000000000000000000000046145b156134a857507f000000000000000000000000000000000000000000000000000000000000000090565b6120d9604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60006020828403121561356257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f8757600080fd5b803561359681613569565b919050565b6000602082840312156135ad57600080fd5b81356135b881613569565b9392505050565b600061010082840312156135d257600080fd5b50919050565b600061010082840312156135eb57600080fd5b6135b883836135bf565b60008083601f84011261360757600080fd5b50813567ffffffffffffffff81111561361f57600080fd5b60208301915083602082850101111561363757600080fd5b9250929050565b60008060008060008060008060006102808a8c03121561365d57600080fd5b6136678b8b6135bf565b98506101008a013567ffffffffffffffff81111561368457600080fd5b6136908c828d016135f5565b90995097506136a590508b6101208c016135bf565b95506102208a013567ffffffffffffffff8111156136c257600080fd5b6136ce8c828d016135f5565b9096509450506102408a01356136e381613569565b92506102608a013567ffffffffffffffff81111561370057600080fd5b61370c8c828d016135f5565b915080935050809150509295985092959850929598565b600080600080600080610240878903121561373d57600080fd5b61374788886135bf565b955061010087013567ffffffffffffffff81111561376457600080fd5b61377089828a016135f5565b909650945061378590508861012089016135bf565b925061022087013567ffffffffffffffff8111156137a257600080fd5b6137ae89828a016135f5565b979a9699509497509295939492505050565b60005b838110156137db5781810151838201526020016137c3565b50506000910152565b600081518084526137fc8160208601602086016137c0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061386960e08301896137e4565b828103604084015261387b81896137e4565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b818110156138de5783518352602093840193909201916001016138c0565b50909b9a5050505050505050505050565b600080600080600085870361018081121561390957600080fd5b61391388886135bf565b955060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008201121561394557600080fd5b506101008601935061014086013567ffffffffffffffff81111561396857600080fd5b613974888289016135f5565b90945092505061016086013561398981613569565b809150509295509295909350565b803563ffffffff8116811461359657600080fd5b80356fffffffffffffffffffffffffffffffff8116811461359657600080fd5b60006101008284031280156139df57600080fd5b60009050604051610100810181811067ffffffffffffffff82111715613a2c577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b604052613a388461358b565b8152613a466020850161358b565b6020820152613a5760408501613997565b6040820152613a6860608501613997565b6060820152613a79608085016139ab565b6080820152613a8a60a085016139ab565b60a082015260c0848101359082015260e09384013593810193909352509092915050565b600060208284031215613ac057600080fd5b6135b8826139ab565b600060208284031215613adb57600080fd5b813580151581146135b857600080fd5b600060208284031215613afd57600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff871681526fffffffffffffffffffffffffffffffff8616602082015273ffffffffffffffffffffffffffffffffffffffff851660408201526fffffffffffffffffffffffffffffffff8416606082015260a060808201526000613bc960a083018486613b04565b98975050505050505050565b818103818111156110e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060208284031215613c2157600080fd5b6135b882613997565b7f4f72646572496e666f207769746e657373290000000000000000000000000000815260008351613c628160128501602088016137c0565b835190830190613c798160128401602088016137c0565b01601201949350505050565b613cb0818951805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b6020880151604082015260408801516060820152613cf16080820188805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff861660c08201528460e08201526101406101008201526000613d2c6101408301866137e4565b828103610120840152613d40818587613b04565b9a9950505050505050505050565b600181811c90821680613d6257607f821691505b6020821081036135d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fdfe546f6b656e5065726d697373696f6e73286164647265737320746f6b656e2c75696e7432353620616d6f756e7429a2646970667358221220d039ed5f692943ef140fd24439562aaa8dbaa74a1972b083399e6bbae32a376a64736f6c634300081c0033000000000000000000000000d8655d1154a74748ac48f673264efba5c369f4bd000000000000000000000000c89ce8ce46946432afc55b867af58cb211adcd9a000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000055d398326f99059ff775485246999027b3197955