7 txs
27 calls
constructor
constructor(address _initialOwner, address _cowSwapRelayer, address _cowSettlement)
functions
cowSwapRelayer
viewfunction cowSwapRelayer() view returns (address)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
getBuyAmount
viewfunction getBuyAmount(address sellToken) view returns (uint256 unroundedBuyAmount, uint256 roundedBuyAmount)
getSellAmount
viewfunction getSellAmount(address sellToken) view returns (uint256)
getTradeableOrderWithSignature
viewfunction getTradeableOrderWithSignature(address orderOwner, tuple params, bytes, bytes32[]) view returns (tuple order, bytes signature)
isPaused
viewfunction isPaused() view returns (bool)
isValidSignature
viewfunction isValidSignature(bytes32 tradeableOrderDigest, bytes signature) view returns (bytes4)
orderConfig
viewfunction orderConfig(address sellToken) view returns (tuple config)
owner
viewfunction owner() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
acceptOwner
nonpayablefunction acceptOwner()
createConditionalOrder
nonpayablefunction createConditionalOrder(address sellToken)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
removeOrderConfig
nonpayablefunction removeOrderConfig(address sellToken)
revokeOwnership
nonpayablefunction revokeOwnership()
setCowApproval
nonpayablefunction setCowApproval(address sellToken, uint256 amount)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setOrderConfig
nonpayablefunction setOrderConfig(address sellToken, tuple config)
setPaused
nonpayablefunction setPaused(bool paused)
updateAmountsAndAdjustmentBps
nonpayablefunction updateAmountsAndAdjustmentBps(address sellToken, uint96 minSellAmount, uint96 maxSellAmount, uint96 minBuyAmount, int16 limitPriceAdjustmentBps)
events
ConditionalOrderCreated
event ConditionalOrderCreated(address indexed owner, (address handler, bytes32 salt, bytes staticInput) params)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
OrderConfigRemoved
event OrderConfigRemoved(address indexed sellToken)
OrderConfigSet
event OrderConfigSet(address indexed sellToken)
PausedSet
event PausedSet(bool paused)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam()
InvalidSellToken
error InvalidSellToken(address sellToken)
IsPaused
error IsPaused()
OrderDoesNotMatchTradeableOrder
error OrderDoesNotMatchTradeableOrder()
OrderNotValid
error OrderNotValid(string reason)
PollTryAtBlock
error PollTryAtBlock(uint256 blockNumber, string message)
PollTryAtEpoch
error PollTryAtEpoch(uint256 timestamp, string message)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
Slippage
error Slippage(uint256 minAmountExpected, uint256 actualAmount)
UnderMinSellAmount
error UnderMinSellAmount()
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162003eb738038062003eb7833981016040819052620000349162000166565b826200004081620000cd565b50816001600160a01b03166080816001600160a01b031681525050806001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200009a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c09190620001b0565b60a05250620001ca915050565b6000546001600160a01b031615620000f857604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200012757604051634726455360e11b81526000600482015260240160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200016157600080fd5b919050565b6000806000606084860312156200017c57600080fd5b620001878462000149565b9250620001976020850162000149565b9150620001a76040850162000149565b90509250925092565b600060208284031215620001c357600080fd5b5051919050565b60805160a051613cc0620001f7600039600061087e0152600081816101a9015261160b0152613cc06000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063617e7c29116100d8578063b187bd261161008c578063c24277e311610066578063c24277e314610556578063daeccc7914610569578063ebbc49651461059757600080fd5b8063b187bd261461050b578063b1f8100d14610530578063bfccf0ec1461054357600080fd5b806375778108116100bd57806375778108146102fa5780638da5cb5b146104e5578063a7229fd9146104f857600080fd5b8063617e7c29146102d457806370023f6a146102e757600080fd5b806326e0a1961161012f5780633daaf325116101145780633daaf325146102865780633f0b495a146102995780635f4dfa03146102ac57600080fd5b806326e0a1961461025d5780632b9689581461027e57600080fd5b806310e65c641161016057806310e65c64146101e35780631626ba7e1461020457806316c38b3c1461024857600080fd5b806301ffc9a71461017c5780630cbfe7dc146101a4575b600080fd5b61018f61018a366004612cc5565b61059f565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019b565b6101f66101f1366004612cf8565b6106d0565b60405190815260200161019b565b610217610212366004612d9f565b6107b7565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161019b565b61025b610256366004612e4c565b610ada565b005b61027061026b366004612eb5565b610bc2565b60405161019b92919061309e565b61025b611076565b61025b610294366004612cf8565b611191565b61025b6102a73660046130e9565b6112d7565b6102bf6102ba366004612cf8565b61154d565b6040805192835260208301919091520161019b565b61025b6102e236600461315a565b611598565b61025b6102f5366004612cf8565b611634565b6104d8610308366004612cf8565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152506001600160a01b0390811660009081526003602081815260409283902083516101a0810185528154808716825274010000000000000000000000000000000000000000908190046bffffffffffffffffffffffff90811694830194909452600180840154808616978401979097526c010000000000000000000000008704851660608401527801000000000000000000000000000000000000000000000000870460ff90811615156080850152790100000000000000000000000000000000000000000000000000880416151560a08401527a0100000000000000000000000000000000000000000000000000008704900b60c08301527c010000000000000000000000000000000000000000000000000000000090950462ffffff1660e08201526002820154808716610100830152859004909216610120830152918201549384166101408201529190920461ffff1661016082015260049091015461018082015290565b60405161019b9190613186565b6000546101cb906001600160a01b031681565b61025b6105063660046132ad565b611740565b60025461018f9074010000000000000000000000000000000000000000900460ff1681565b61025b61053e366004612cf8565b61180a565b61025b6105513660046132ee565b611932565b61025b610564366004613376565b611b10565b61018f6105773660046133b9565b600160209081526000928352604080842090915290825290205460ff1681565b61025b611f37565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f40b8787600000000000000000000000000000000000000000000000000000000148061063257507fffffffff0000000000000000000000000000000000000000000000000000000082167f26e0a19600000000000000000000000000000000000000000000000000000000145b8061067e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b806106ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1626ba7e00000000000000000000000000000000000000000000000000000000145b92915050565b600081816106dd82611feb565b60018101546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506107af916c0100000000000000000000000082046bffffffffffffffffffffffff1691790100000000000000000000000000000000000000000000000000900460ff16906001600160a01b038616906370a0823190602401602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906133ee565b61204f565b949350505050565b60025460009074010000000000000000000000000000000000000000900460ff161561080f576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828060200190518101906108259190613431565b601f19810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600282015260228101919091526042902090915084146108e9576040517f98c850a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108f88260000151611feb565b600181015460608401519192506c0100000000000000000000000090046bffffffffffffffffffffffff169060009082116109335781610939565b83606001515b60018401549091506bffffffffffffffffffffffff16811015610988576040517fa690a25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099985600001518386612075565b600386015490925074010000000000000000000000000000000000000000900461ffff1690506000816109d05786608001516109e1565b60808701516109e190836000612261565b905080831115610a2c576040517f2746152a00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b6000610a42886000015186898b60800151612289565b9050898051906020012081604051602001610a5d91906134ef565b6040516020818303038152906040528051906020012014610aaa576040517f98c850a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f1626ba7e000000000000000000000000000000000000000000000000000000009a9950505050505050505050565b610b08336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b610b3e576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f40db37ff5c0bdc2c427fbb2078c8f24afea940abac0e3c23bb4ea3bf2da2b21290610bb790831515815260200190565b60405180910390a150565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260025460609074010000000000000000000000000000000000000000900460ff1615610cbe57610c5561012c4261352d565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600660448201527f50617573656400000000000000000000000000000000000000000000000000006064820152608401610a23565b6001600160a01b0388163014610d30576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f72646572206f776e6572206d7573742062652073656c6600000000000000006044820152606401610a23565b6000610d3f6020890189612cf8565b6001600160a01b031614610daf576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f68616e646c6572206d75737420626520756e73657400000000000000000000006044820152606401610a23565b602087013515610e1b576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f73616c74206d75737420626520756e73657400000000000000000000000000006044820152606401610a23565b6000610e2a6040890189613540565b810190610e379190612cf8565b6001600160a01b03808216600090815260036020526040902080549293509116610ebd576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f73656c6c546f6b656e206e6f7420636f6e6669677572656400000000000000006044820152606401610a23565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4191906133ee565b60018301549091506bffffffffffffffffffffffff16811015610fd357610f6a61012c4261352d565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600a60448201527f4d696e42616c616e6365000000000000000000000000000000000000000000006064820152608401610a23565b6001820154600090611024906c0100000000000000000000000081046bffffffffffffffffffffffff1690790100000000000000000000000000000000000000000000000000900460ff168461204f565b90506000611033858386612075565b91505061104285838684612289565b96508660405160200161105591906134ef565b60405160208183030381529060405295505050505050965096945050505050565b6110a4336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b6110da576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b031661dead1461112f576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a23565b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6111bf336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b6111f5576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025474010000000000000000000000000000000000000000900460ff161561124a576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61125381611feb565b50604080516001600160a01b0383166020808301919091528251808303909101815260a0820183526000828401818152606084018290526080909301829052925130939283929185917f2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361916112c891906135a5565b60405180910390a25050505050565b611305336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b61133b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836bffffffffffffffffffffffff16600003611383576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826bffffffffffffffffffffffff16846bffffffffffffffffffffffff1611156113d9576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816bffffffffffffffffffffffff16600003611421576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061142c86611feb565b8054600282015491925061144f9188916001600160a01b03908116911685612468565b60018101805482546bffffffffffffffffffffffff86811674010000000000000000000000000000000000000000026001600160a01b0392831617855561ffff86167a010000000000000000000000000000000000000000000000000000027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8983166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909516928b1692909217939093171691909117909155604051908716907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a2505050505050565b600080828161155b82611feb565b600181015490915061158d9083906c0100000000000000000000000090046bffffffffffffffffffffffff1683612075565b935093505050915091565b6115c6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b6115fc576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116306001600160a01b0383167f00000000000000000000000000000000000000000000000000000000000000008361261c565b5050565b611662336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b611698576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526003602081905260408083208381556001810180547fff000000000000000000000000000000000000000000000000000000000000001690556002810184905591820180547fffffffffffffffffffff000000000000000000000000000000000000000000001690556004909101829055517f77112f16adb9ba38b96415abef057fc90ed118ff5cd9ccd3640ebd3d36db56309190a250565b61176e336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b6117a4576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516117e991815260200190565b60405180910390a36118056001600160a01b0384168383612752565b505050565b611838336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b61186e576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118b9576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a23565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611960336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b611996576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166119e1576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610a23565b604080518082019091526000808252602082015260005b82811015611b0957838382818110611a1257611a126135dd565b905060400201803603810190611a28919061360c565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055016119f8565b5050505050565b611b3e336000357fffffffff0000000000000000000000000000000000000000000000000000000016612400565b611b74576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611bbf576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a23565b6000611bce6020830183612cf8565b6001600160a01b031603611c2757611be96020820182612cf8565b6040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a23565b611c346020820182612cf8565b6001600160a01b0316826001600160a01b031603611c5957611be96020820182612cf8565b611c696060820160408301613669565b6bffffffffffffffffffffffff16600003611cb0576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cc06080820160608301613669565b6bffffffffffffffffffffffff16611cde6060830160408401613669565b6bffffffffffffffffffffffff161115611d24576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d346040820160208301613669565b6bffffffffffffffffffffffff16600003611d7b576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db382611d8c6020840184612cf8565b611d9e61012085016101008601612cf8565b611dae60e0860160c08701613686565b612468565b6000611dc761016083016101408401612cf8565b6001600160a01b031603611de757611be961016082016101408301612cf8565b612710611dfc610180830161016084016136b3565b61ffff161115611e38576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e49610100820160e083016136e1565b62ffffff16600003611e87576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a80611e9c610100830160e084016136e1565b62ffffff161115611ed9576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090208190611efd828261374c565b50506040516001600160a01b038316907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a25050565b6002546001600160a01b03163314611f7b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6001600160a01b038082166000908152600360205260409020805490911661204a576040517fe39ca5270000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a23565b919050565b60008261205c578361206b565b838210612069578361206b565b815b90505b9392505050565b600281015460009081906001600160a01b031680156121955760028401546040517f7349615f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637349615f906120e090899089906000908190600401613af9565b602060405180830381865afa1580156120fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212191906133ee565b6001808601549194507a010000000000000000000000000000000000000000000000000000909104900b600081131561216b576121648461ffff83166000612261565b9350612193565b60008160010b12156121935761219061218382613b37565b859061ffff16600061279b565b93505b505b83547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168381116121ca57836121cc565b805b60028601549094507401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1680612205578461221a565b806122108187613ba4565b61221a9190613bb8565b935083600003612256576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050935093915050565b6000806122708461271061352d565b90506122808582612710866127bb565b95945050505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260408051610180810182526001600160a01b038781168252855481166020830152600386015416918101919091526060810185905260808101839052600184015460a082019061235e907c0100000000000000000000000000000000000000000000000000000000900462ffffff1661286c565b63ffffffff16815260048501546020820152600060408201527ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775606082015260018501547801000000000000000000000000000000000000000000000000900460ff16151560808201527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960a0820181905260c0909101529050949350505050565b600080546001600160a01b038481169116148061206e57506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff169392505050565b6001600160a01b038216156125d9576040517f950212800000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301528481166024830152831690639502128090604401602060405180830381865afa1580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190613bcf565b612538576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108160010b1315612577576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f08160010b12156125d4576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612616565b8060010b600014612616576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261269b848261288e565b612616576040516001600160a01b0384166024820152600060448201526127489085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612931565b6126168482612931565b6040516001600160a01b0383166024820152604481018290526118059084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016126e4565b60006127108381039084106127b1576000612280565b6122808582612710865b60006127c8858585612a33565b905060018260018111156127de576127de613a93565b036107af5782806127f1576127f1613b75565b848609156107af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015612829576001016107af565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610a23565b6000818061287a8142613bec565b6128849190613c0f565b6106ca9190613c37565b6000806000846001600160a01b0316846040516128ab9190613c5b565b6000604051808303816000865af19150503d80600081146128e8576040519150601f19603f3d011682016040523d82523d6000602084013e6128ed565b606091505b50915091508180156129175750805115806129175750808060200190518101906129179190613bcf565b80156122805750505050506001600160a01b03163b151590565b6000612986826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b3e9092919063ffffffff16565b90508051600014806129a75750808060200190518101906129a79190613bcf565b611805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a23565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003612a8b57838281612a8157612a81613b75565b049250505061206e565b838110612ad5576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610a23565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b606061206b848460008585600080866001600160a01b03168587604051612b659190613c5b565b60006040518083038185875af1925050503d8060008114612ba2576040519150601f19603f3d011682016040523d82523d6000602084013e612ba7565b606091505b5091509150612bb887838387612bc3565b979650505050505050565b60608315612c4c578251600003612c45576001600160a01b0385163b612c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a23565b50816107af565b6107af8383815115612c615781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a239190613c77565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461204a57600080fd5b600060208284031215612cd757600080fd5b61206e82612c95565b6001600160a01b0381168114612cf557600080fd5b50565b600060208284031215612d0a57600080fd5b813561206e81612ce0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715612d6857612d68612d15565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d9757612d97612d15565b604052919050565b60008060408385031215612db257600080fd5b8235915060208084013567ffffffffffffffff80821115612dd257600080fd5b818601915086601f830112612de657600080fd5b813581811115612df857612df8612d15565b612e0a84601f19601f84011601612d6e565b91508082528784828501011115612e2057600080fd5b80848401858401376000848284010152508093505050509250929050565b8015158114612cf557600080fd5b600060208284031215612e5e57600080fd5b813561206e81612e3e565b60008083601f840112612e7b57600080fd5b50813567ffffffffffffffff811115612e9357600080fd5b6020830191508360208260051b8501011115612eae57600080fd5b9250929050565b60008060008060008060808789031215612ece57600080fd5b8635612ed981612ce0565b9550602087013567ffffffffffffffff80821115612ef657600080fd5b908801906060828b031215612f0a57600080fd5b90955060408801359080821115612f2057600080fd5b818901915089601f830112612f3457600080fd5b813581811115612f4357600080fd5b8a6020828501011115612f5557600080fd5b602083019650809550506060890135915080821115612f7357600080fd5b50612f8089828a01612e69565b979a9699509497509295939492505050565b80516001600160a01b031682526020810151612fb960208401826001600160a01b03169052565b506040810151612fd460408401826001600160a01b03169052565b50606081015160608301526080810151608083015260a081015161300060a084018263ffffffff169052565b5060c081015160c083015260e081015160e0830152610100808201518184015250610120808201516130358285018215159052565b5050610140818101519083015261016090810151910152565b60005b83811015613069578181015183820152602001613051565b50506000910152565b6000815180845261308a81602086016020860161304e565b601f01601f19169290920160200192915050565b60006101a06130ad8386612f92565b8061018084015261228081840185613072565b6bffffffffffffffffffffffff81168114612cf557600080fd5b8060010b8114612cf557600080fd5b600080600080600060a0868803121561310157600080fd5b853561310c81612ce0565b9450602086013561311c816130c0565b9350604086013561312c816130c0565b9250606086013561313c816130c0565b9150608086013561314c816130da565b809150509295509295909350565b6000806040838503121561316d57600080fd5b823561317881612ce0565b946020939093013593505050565b81516001600160a01b031681526101a0810160208301516131b760208401826bffffffffffffffffffffffff169052565b5060408301516131d760408401826bffffffffffffffffffffffff169052565b5060608301516131f760608401826bffffffffffffffffffffffff169052565b50608083015161320b608084018215159052565b5060a083015161321f60a084018215159052565b5060c083015161323460c084018260010b9052565b5060e083015161324b60e084018262ffffff169052565b50610100838101516001600160a01b0390811691840191909152610120808501516bffffffffffffffffffffffff169084015261014080850151909116908301526101608084015161ffff169083015261018092830151929091019190915290565b6000806000606084860312156132c257600080fd5b83356132cd81612ce0565b925060208401356132dd81612ce0565b929592945050506040919091013590565b60008060006040848603121561330357600080fd5b833561330e81612ce0565b9250602084013567ffffffffffffffff8082111561332b57600080fd5b818601915086601f83011261333f57600080fd5b81358181111561334e57600080fd5b8760208260061b850101111561336357600080fd5b6020830194508093505050509250925092565b6000808284036101c081121561338b57600080fd5b833561339681612ce0565b92506101a0601f19820112156133ab57600080fd5b506020830190509250929050565b600080604083850312156133cc57600080fd5b82356133d781612ce0565b91506133e560208401612c95565b90509250929050565b60006020828403121561340057600080fd5b5051919050565b805161204a81612ce0565b805163ffffffff8116811461204a57600080fd5b805161204a81612e3e565b6000610180828403121561344457600080fd5b61344c612d44565b61345583613407565b815261346360208401613407565b602082015261347460408401613407565b6040820152606083015160608201526080830151608082015261349960a08401613412565b60a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206134cc818501613426565b908201526101408381015190820152610160928301519281019290925250919050565b61018081016106ca8284612f92565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106ca576106ca6134fe565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357557600080fd5b83018035915067ffffffffffffffff82111561359057600080fd5b602001915036819003821315612eae57600080fd5b602081526001600160a01b03825116602082015260208201516040820152600060408301516060808401526107af6080840182613072565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040828403121561361e57600080fd5b6040516040810181811067ffffffffffffffff8211171561364157613641612d15565b60405261364d83612c95565b8152602083013561365d81612e3e565b60208201529392505050565b60006020828403121561367b57600080fd5b813561206e816130c0565b60006020828403121561369857600080fd5b813561206e816130da565b61ffff81168114612cf557600080fd5b6000602082840312156136c557600080fd5b813561206e816136a3565b62ffffff81168114612cf557600080fd5b6000602082840312156136f357600080fd5b813561206e816136d0565b600081356106ca81612ce0565b600081356106ca816130c0565b600081356106ca81612e3e565b600081356106ca816130da565b600081356106ca816136d0565b600081356106ca816136a3565b61378d613758836136fe565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0391909116178255565b6137d461379c6020840161370b565b82546001600160a01b031660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016178255565b600181016138216137e76040850161370b565b82547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178255565b6138796138306060850161370b565b82547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff1660609190911b77ffffffffffffffffffffffff00000000000000000000000016178255565b6138d661388860808501613718565b8280547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1691151560c01b78ff00000000000000000000000000000000000000000000000016919091179055565b6139346138e560a08501613718565b8280547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff1691151560c81b79ff0000000000000000000000000000000000000000000000000016919091179055565b61399361394360c08501613725565b8280548260d01b7bffff0000000000000000000000000000000000000000000000000000167fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8216178255505050565b6139f26139a260e08501613732565b82547fff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7effffff0000000000000000000000000000000000000000000000000000000016178255565b5060028101613a0761375861010085016136fe565b613a1761379c610120850161370b565b5060038101613a2c61375861014085016136fe565b613a83613a3c610160850161373f565b82547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1660a09190911b75ffff000000000000000000000000000000000000000016178255565b5061018082013560048201555050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110612cf5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001600160a01b03851681526020810184905260808101613b1984613ac2565b836040830152613b2883613ac2565b82606083015295945050505050565b60008160010b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80008103613b6c57613b6c6134fe565b60000392915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613bb357613bb3613b75565b500490565b80820281158282048414176106ca576106ca6134fe565b600060208284031215613be157600080fd5b815161206e81612e3e565b600063ffffffff80841680613c0357613c03613b75565b92169190910492915050565b63ffffffff818116838216028082169190828114613c2f57613c2f6134fe565b505092915050565b63ffffffff818116838216019080821115613c5457613c546134fe565b5092915050565b60008251613c6d81846020870161304e565b9190910192915050565b60208152600061206e602083018461307256fea2646970667358221220234fc98abcc3a1c2675c930fb96c65ea1d8a749b3d62d0529a6826566f12ecdd64736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe01100000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41